接入概述
接入微信公众号平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑
一、填写服务器配置
登录微信公众号平台官网后,在公众号平台开发基本设置页面,勾选协议成为开发者,点击修改配置按钮,填写服务器地址url、token和EncodingAESKey,其中url是开发者用来接收微信消息和事件接口的url。token可由开发者任意填写,用作生成签名(该token会和接口url中包含的token进行比对,从而验证安全性)EncodingAESKey由开发者手动填写或随机生成,将用作消息加解密密钥。
二、验证消息确实是来自微信服务器
开发者提交消息后,微信服务器将发送GET请求到填写到服务器地址URL上,GET请求携带参数如下表所示:
开发者通过校验signature对请求进行校验。若确认此次get请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。
java代码:验证
public String access(HttpServletRequest request, HttpServletResponse response) {
// 验证URL真实性
logger.info("进入验证access");
// 微信加密签名
String signature = request.getParameter("signature");
// 时间戳
String timestamp = request.getParameter("timestamp");
// 随机数
String nonce = request.getParameter("nonce");
// 随机字符串
String echostr = request.getParameter("echostr");
List<String> params = new ArrayList<String>();
params.add(token);
params.add(timestamp);
params.add(nonce);
// 1. 将token、timestamp、nonce三个参数进行字典序排序
Collections.sort(params, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
// 2. 将三个参数字符串拼接成一个字符串进行sha1加密
String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));
if (temp.equals(signature)) {
try {
response.getWriter().write(echostr);
logger.info("成功返回 echostr:" + echostr);
return echostr;
} catch (IOException e) {
e.printStackTrace();
}
}
logger.info("失败 认证");
return null;
}
三、依据接口文档实现业务逻辑
验证URL有效性成功后即接入生效,成为开发者。可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。
成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写等服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。