版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35829542/article/details/52162413
1 发布前阅读
【消息加解密接入指引】https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&lang=zh_CN
【全网发布指引】https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318611&lang=zh_CN
2 加解密
加解密按【消息加解密接入指引】文档操作即可,需注意的是如果是java环境,替换jdk ${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar
3 发布修改流程
因为是全网发布检测,只要通过一次就行了,而且不能影响正常流程,所以代码加上判断是否是 gh_3c884a361561 发来的事件或消息。
3.1 配置公众号消息与事件接收URL
检测流程前三步都是通过此URL接口接受消息的,如图:
这里写图片描述
3.2 step 1
模拟粉丝触发专用测试公众号的事件,并推送事件消息到专用测试公众号,第三方平台方开发者需要提取推送XML信息中的event值,并在5秒内立即返回按照下述要求组装的文本消息给粉丝。
判断是 gh_3c884a361561 发来的事件
解密收到的消息
拼装Content: event + “from_callback” (假定event为LOCATION,则Content为: LOCATIONfrom_callback)
设置文本消息,如:
1
2
3
4
5
6
7
8
加密, 其中timestamp跟nonce可以自主生成
return
3.3 step 2
模拟粉丝发送文本消息给专用测试公众号,第三方平台方需根据文本消息的内容进行相应的响应:
判断是 gh_3c884a361561 发来的消息且消息包含 TESTCOMPONENT_MSG_TYPE_TEXT
解密收到的消息
拼装Content:TESTCOMPONENT_MSG_TYPE_TEXT_callback
设置消息,加密跟注意事项跟step 1一样,这里不赘述。
return
3.4 step 3
模拟粉丝发送文本消息给专用测试公众号,第三方平台方需在5秒内返回空串表明暂时不回复,然后再立即使用客服消息接口发送消息回复粉丝
判断是 gh_3c884a361561 发来的消息且消息包含 QUERY_AUTH_CODE
解密收到的消息
根据QUERY_AUTH_CODE获取授权公众号的authorizer_access_token。具体怎么获取可以查看第三方平台接入文档
查看微信|公众平台开发者文档的客服消息 http://mp.weixin.qq.com/wiki/11/c88c270ae8935291626538f9c64bd123.html
使用http请求post https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=authorizer_access_token
设置请求body:
{
"touser":"OPENID",
"msgtype":"text",
"text":
{
"content":"Hello World"
}
}
# OPENID 替换为: 接受都消息中的 `FromUserName`
# content设置为:$query_auth_code$_from_api(其中$query_auth_code$需要替换成推送过来的query_auth_code)
1
2
3
4
5
6
7
8
9
10
return “”, 返回空串
注:第5/6两步建议使用线程异步处理,主线程在获取完authorizer_access_token就直接返回空串。流程控制在5s内完成,否则通不过检测。
3.5 step 4
模拟推送component_verify_ticket给开发者,开发者需按要求回复(接收到后必须直接返回字符串success)
此步骤不多赘述,具体怎么处理可以查看第三方平台接入文档
4 问题与解决
4.1 消息回复不正确
缺少 导致, 原因是使用对象转xml,这个字段放父类里边了,生成xml时丢了。
4.2 客服消息不成功
不成功主要是处理逻辑时间太长了,解决方法是在上次检测把authorizer_access_token记录下来, 这次检测的时候不走获取这个token的流程,这样节省不少时间。