下面我将详细讲解Java微信开发API第一步——服务器接入的完整攻略。
一、准备工作
在进行微信开发之前,需要先进行微信公众号或小程序的注册和开发者资质认证。开发者资质认证通过后,即可进入公众号后台或小程序管理后台,完成服务器配置。
二、服务器配置
1. 服务器搭建
首先,我们需要在服务器上搭建一个运行中的web服务,推荐使用Spring MVC、JFinal等框架进行开发。在服务器上启动web服务后,需要配置好服务器IP地址、端口号、Token等参数。
2. 验证token
接下来,需要在公众号后台或小程序管理后台中配置服务器地址和Token。其中,Token需要和服务器端配置一致。
在接收到微信服务器的验证消息时,需要按照同样的方式进行Token的验证,以确保消息是从微信服务器发送的。具体的验证方法如下所示,其中signature、timestamp和nonce是微信服务器发送的参数,echostr是开发者服务器返回的字符串。
@RequestMapping(value = "/wx", method = RequestMethod.GET)
public void validate(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 获取微信服务器发送的参数
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr");
// 将参数按照字典排序
String[] str = new String[] { TOKEN, timestamp, nonce };
Arrays.sort(str);
// 将排序后的参数拼接成一个字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 3; i++) {
sb.append(str[i]);
}
// 使用SHA1加密
String sha1 = DigestUtils.sha1Hex(sb.toString());
// 如果验证通过,则返回echostr
if (sha1.equals(signature)) {
PrintWriter out = response.getWriter();
out.print(echostr);
out.flush();
out.close();
}
}
3. 处理微信消息
当用户在公众号或小程序中发送消息时,微信服务器会把消息推送到开发者服务器上。
在服务器端,需要编写对应的代码来接收和处理微信服务器发送的消息,返回给用户合适的响应。处理消息的代码如下所示:
@RequestMapping(value = "/wx", method = RequestMethod.POST, produces = "application/xml;charset=UTF-8")
@ResponseBody
public String handle(HttpServletRequest request) throws Exception {
// 将微信服务器发送的xml格式消息转换为Map
Map<String, String> xml = MessageUtil.parseXml(request);
// 获取消息类型
String msgType = xml.get("MsgType");
String content = xml.get("Content");
String fromUserName = xml.get("FromUserName");
String toUserName = xml.get("ToUserName");
String createTime = xml.get("CreateTime");
if (MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType)) {
// 处理文本消息
String reply = "你发的消息是:" + content;
return MessageUtil.buildTextMessage(fromUserName, toUserName, reply);
} else if (MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgType)) {
// 处理事件消息
String eventType = xml.get("Event");
if (MessageUtil.EVENT_TYPE_SUBSCRIBE.equals(eventType)) {
// 处理订阅事件
String reply = "感谢关注我的公众号!";
return MessageUtil.buildTextMessage(fromUserName, toUserName, reply);
}
}
return "";
}
三、示例说明
示例一
假设用户在公众号或小程序中输入“Hello”,服务器端返回“你发的消息是:Hello”,代码如下所示:
wx.sendTextMessage({
touser: openid,
msgtype: 'text',
text: {
content: 'Hello'
}
}).then(function(res) {
console.log(res.data)
})
if (MessageUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType)) {
// 处理文本消息
String reply = "你发的消息是:" + content;
return MessageUtil.buildTextMessage(fromUserName, toUserName, reply);
}
示例二
假设用户在公众号或小程序中关注了服务器端的公众号,服务器端向用户返回一条欢迎消息“感谢关注我的公众号!”,代码如下所示:
wx.sendTextMessage({
touser: openid,
msgtype: 'event',
event: 'subscribe'
}).then(function(res) {
console.log(res.data)
})
if (MessageUtil.REQ_MESSAGE_TYPE_EVENT.equals(msgType)) {
// 处理事件消息
String eventType = xml.get("Event");
if (MessageUtil.EVENT_TYPE_SUBSCRIBE.equals(eventType)) {
// 处理订阅事件
String reply = "感谢关注我的公众号!";
return MessageUtil.buildTextMessage(fromUserName, toUserName, reply);
}
}
以上就是Java微信开发API第一步——服务器接入的完整攻略,希望可以帮助到你。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java微信开发API第一步 服务器接入 - Python技术站