java微信公众号第三方接入解析及全网检查代码示例
优采云 发布时间: 2020-08-22 12:10java微信公众号第三方接入解析及全网监测代码示例
一、接入大体思路解析
这里主要是查看文档的授权流程技术说明,这里从开发者角度介绍。
接入第三方的开发者想必早已对公众号开发比较了解,第三方是代微信号实现功能的一个组件,所以其实陌陌方的开发们也是这么考虑,为第三方的access_token起名为component_access_token。
1、首先获取第三方
component_access_token
这个过程中会使用到陌陌服务器定期向我们服务器推送的component_verify_ticket数组,加上component_appid、component_appsecret等信息即可获得。
2、获取授权公众号信息
类似公众号网页授权,通过反弹的方式,微信公众号运营者可以通过陌陌扫码的方式将公众号授权给第三方,唯一有些不同的这儿在拼出授权跳转页面url后的第一步是引导用户跳转到该页面上,再进行扫码,所以这个跳转不是必须在陌陌外置浏览器中进行。
拼出的url中的参数出了要用到component_access_token外还须要一个pre_auth_code预授权码,可通过component_access_token获得,具体的实效时间机制和component_access_token差不多。
用户授权成功后会在redirect_url后接参数auth_code,类似公众号网页授权的code值,通过auth_code和component_access_token等信息即可获得该授权公众号信息,若中间要与公众号第三方平台的帐号绑定再带一个帐号标识参数即可。
3、带公众号实现业务
公众号授权成功后第三方会得到该公众号的authorizer_access_token,与公众号的access_token功能相同,使用这个即可用微信公众号的插口代公众号实现业务。
有些不同的再第三方文档里以有说明。官方文档
另外文档上没有提及的是,每当有公众号授权成功后,微信服务器会将公众号授权信息推送到授权风波接收URL,即接收component_verify_ticket的插口。
4、关于加密揭秘
获取陌陌服务器推送信息的时侯都是进行加密的。
二、接入中发觉的几个问题1、微信的示例java代码,XMLParse类中
/**
* 提取出xml数据包中的加密消息
* @param xmltext 待提取的xml字符串
* @return 提取出的加密消息字符串
* @throws AesException
*/
public static Object[] extract(String xmltext) throws AesException {
Object[] result = new Object[3];
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader sr = new StringReader(xmltext);
InputSource is = new InputSource(sr);
Document document = db.parse(is);
Element root = document.getDocumentElement();
NodeList nodelist1 = root.getElementsByTagName("Encrypt");
NodeList nodelist2 = root.getElementsByTagName("ToUserName");
System.out.println("nodelist2.item(0)="+nodelist2.item(0));
result[0] = 0;
result[1] = nodelist1.item(0).getTextContent();
//这里加了一个判断,因为接收推送component_verify_ticket的解谜过程中没有第三个参数,回报空指针异常
if(nodelist2.item(0) != null){
result[2] = nodelist2.item(0).getTextContent();
}
return result;
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ParseXmlError);
}
}
2、文档中:使用授权码换取公众号的插口调用凭据和授权信息
返回json信息最后少了一个}
{
"authorization_info": {
"authorizer_appid": "wxf8b4f85f3a794e77",
"authorizer_access_token": "QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM",
"expires_in": 7200,
"authorizer_refresh_token": "dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY",
"func_info": [
{
"funcscope_category": {
"id": 1
}
},
{
"funcscope_category": {
"id": 2
}
},
{
"funcscope_category": {
"id": 3
}
}
]
}
}
大家开发时要注意json数据结构
三、关于代码
在 微信公众帐号第三方平台全网发布源码(java)- 实战测试通过 代码结构基础上进行更改