一、简介
在我们的电商项目中,注册功能流程是这样的:
用户填写账号信息后,需要扫码关注我们的公众号,然后向公众号发送手机号码,公众号会返回消息提示(比如已发送验证码、手机号错误、手机号已注册等),接着手机会收到验证码短信,以此来完成注册。
为什么要加上关注公众号的步骤?
好处是这样可以让用户注册使用我们的电商时,就关注了我们的公众号,好处很多。
本篇博客将实现其中的公众号消息的接收与发送环节,使用wxjava框架开发。
个人的公众号类型一般是订阅号。
二、用wxjava来开发微信公众号接收消息和发送消息的接口
首先我们先在微信公众平台开个测试号方便我们测试
公众平台接口调用仅支持80端口,公众号必须实名。
接着我们修改shop-service-impl-weixin模块
修改pom.xml文件,如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>shop-service-impl</artifactId>
<groupId>com.liazhan</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>shop-service-impl-weixin</artifactId>
<packaging>jar</packaging>
<properties>
<weixin-java-mp.version>3.7.0</weixin-java-mp.version>
</properties>
<dependencies>
<dependency>
<artifactId>shop-service-api-weixin</artifactId>
<groupId>com.liazhan</groupId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- wxjava公众号开发-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin-java-mp.version}</version>
</dependency>
</dependencies>
</project>
将wxjava的某些类复制过来,如下图
这里我们主要用到WxPortalController类和MsgHandler类,一个用来接口配置,一个用来消息处理。
我们可以注意到测试号管理有个接口配置信息,需要填写URL和Token,其中Token是自定义的,而URL的地址对应的就是WxPortalController的映射/wx/portal/{appid},将appid修改成我们的公众号appID,然后我们使用的是网关,那么完整的URL就是http://127.0.0.1/liazhan-weixin/wx/portal/wx342b2a9312d0084c
这里需要注意的是,微信接口需要公网能访问到,而上述URL是本地的,因此我们要使用内网穿透,使用ngrok,有免费的可以使用,不过可能会经常掉线,使用方式自行查看官网教程。如果自己有公网服务器的话,可以用frp,利用阿里云和frp实现无域名内网穿透。
这里我使用内网穿透之后,http://liazhan.free.idcfengye.com映射到我的本地地址127.0.0.1:80,因此完整的URL就是
http://liazhan.free.idcfengye.com/liazhan-weixin/wx/portal/wx342b2a9312d0084c
修改github上weixin服务的配置文件,添加如下配置
wx:
mp:
configs:
- appId: wx342b2a9312d0084c #微信公众号的appID
secret: 33144fa93ee3940fd6d37db8ad28fc0e #微信公众号的appsecret
token: liazhan #微信公众号的Token,自定义
aesKey: 111 #微信公众号的EncodingAESKey值,在测试号中测试不需要这个值
配置文件github地址 https://github.com/liazhan/shop-project-config/commit/9b8fd6b84bddcdb719436e5ce8ce9e64a56cf95d
ok,我们依次启动config、eureka、gateway、weixin服务。
然后进行接口配置信息,填写URL和Token后点击提交
查看控制台,可以看到打印了一条信息
公众平台显示配置成功,如此便ok了。如果显示配置失败,那么可以多点击几次提交按钮试试。
接下来我们用微信号关注我们的测试号,扫描二维码关注。
然后发送消息。
可以看到,测试号自动回复了一条消息解析信息给我们,这个消息的格式是在我们的MsgHandler类里进行修改的。
我们修改MsgHandler类如下,只进行简单的消息回复
package com.liazhan.weixin.mp.handler;
import com.liazhan.weixin.mp.builder.TextBuilder;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author Binary Wang(https://github.com/binarywang)
*/
@Component
public class MsgHandler extends AbstractHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
Map<String, Object> context, WxMpService weixinService,
WxSessionManager sessionManager) {
//TODO 组装回复消息
String content = "收到信息内容:" + wxMessage.getContent();
return new TextBuilder().build(content, wxMessage, weixinService);
}
}
重新启动weixin服务,再次向测试号发送消息测试。
可以看到,消息的回复内容已经被我们更改了,如此我们接下来便可以实现我们的手机验证码短信功能了。
github项目地址https://github.com/liazhan/shop-project/tree/e1070f04933ebb0de064bf954c2a8de5059b7245
版本号为e1070f04933ebb0de064bf954c2a8de5059b7245