先从注册说起。
注册微信开放平台账号,进行资质认证。企业需要提交营业执照、公函(个人无法进行资质认证,腾讯认为个人是无法完成一个公众号第三方平台搭建的)。
公众号第三方平台是什么?
– 为公众号提供便捷的服务,基于微信公众号,微信提供的第三方API进行开发,为微信公众号的使用者提供便捷服务。
进行完资质认证后,可以创建公众号第三方平台了,一个账号最多创建5个公众平台。
比较便捷的是,填完第三方平台的资料(地址url, token等信息)后,便是审核通过的状态,也就可以开始调试了。
一步步按照文档来。
1.接收component_verify_ticket
注意,ticket每10分钟微信服务器会像你的地址推送一次。收到后,你要保存好,因为后面要用到。
推送的报文:
1413192605
你需要保存 ComponentVerifyTicket ,我将他保存到redis, 以 $AppId$_ticket命名。($AppId$为AppId的值)。
处理完后,返回微信服务器 success 即可。
2.根据ticket获取component_access_token
向 https://api.weixin.qq.com/cgi-bin/component/api_component_token
post 如下数据
{ "component_appid":"appid_value" , "component_appsecret": "appsecret_value", "component_verify_ticket": "ticket_value" }
其中,appid和appsecret在微信开放平台-》管理中心-》平台详情查看(需要扫码)。
返回结果示例:
{ "component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", "expires_in":7200 }
我将component_access_token保存到redis, 命名为 $APPID$_token.
3.根据component_access_token获取预授权码pre_auth_code
向 https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
post 如下数据
{ "component_appid":"appid_value" }
其中,appid在微信开放平台-》管理中心-》平台详情查看。
返回结果示例:
{ "pre_auth_code":"Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw", "expires_in":3600 }
我将pre_auth_code保存到redis, 命名为 $APPID$_preauth.
注意 1,2,3 都有一定的时效,发布时要做成定时任务。
4.生成授权链接
String url=String.format("https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=%s&pre_auth_code=%s&redirect_uri=%s", APPID, RedisUtil.getData(APPID+"_preauth"), "你的平台地址"); System.out.println(url);
在浏览器中访问,效果如下
用微信扫码后,点确认,完成授权。
【小结一下】
以上步骤完成后,要完成发布前的验证。
进入微信开放平台,管理中心,点全网发布,会自动进入检测。
检测完成,全部成功后,可以提交审核。
检测包含自动回复,api的检查。
其中自动回复必须为加密模式。先接收加密的消息,然后返回加密的回复内容。
需要注意的是,加密、解密所用的 token ,aeskey是你在创建第三方平台填写的,appid是创建后可以查看。
5.自动化检测
在全网发布前,需要进行自动化检测(点全网发布开始)
自动化检测的账号(自动授权的公众号信息)
(1)appid: wx570bc396a51b8ff8
(2)Username: gh_3c884a361561
其中appid即你所填地址的$APPID$, 你可以捕获这个字段来判断是否来自自动化测试。
5.1 event事件模拟
当接收到来自 wx570bc396a51b8ff8 的事件消息时,一律回复 普通文本信息,信息内容event + “from_callback”(假定event为LOCATION,则Content为: LOCATIONfrom_callback)
5.2 固定文本消息应答
微信推送固定文本信息TESTCOMPONENT_MSG_TYPE_TEXT 到第三方平台地址 ,此时你需要回复固定的文本消息TESTCOMPONENT_MSG_TYPE_TEXT_callback作为应答。
if(msg.equals("TESTCOMPONENT_MSG_TYPE_TEXT")){ if(appid.equals("wx570bc396a51b8ff8")){ 。。 。处理 } }
5.3 固定文本不应答,API检测
微信会推送一段以QUERY_AUTH_CODE:开头的文本信息,此时需要回复 success .(也就是不做应答)
然后调用客服API, 发送文本信息 ,文本内容为 $query_auth_code$_from_api。其中 $query_auth_code$ 是微信推送文本中除了 QUERY_AUTH_CODE:的内容。
示例代码如下:
if(msg.startsWith("QUERY_AUTH_CODE")){ if(appid.equals("wx570bc396a51b8ff8")){ String auth=msg.replace("QUERY_AUTH_CODE:", ""); System.out.println("AUTH:"+auth); this.responseOutText("success", response); // 调授权换取 Compement.getAuthAc("", auth, request.getParameter("openid")); // 调客服 return null; } }
5.4 ticket接收
微信模拟每10分钟的ticket推送,直接回复success 即可。
至此完成发布前的自动化检测准备工作,可以继续完善你的第三方平台,然后择期全网发布。
【全文完】
(原创文章,转载请注明出处)