1,获取第三方平台
http请求方式: POST(请使用协议)
POST数据示例:
"":"" ,
"": "",
"ket": ""
请求参数说明
参数说明
第三方平台
第三方平台
ket
微信后台推送的,此会定时推送,具体请见本页末尾的推送说明
返回结果示例
"en":"-yD-",
"":7200
结果参数说明
参数说明
en
第三方平台
有效期
上述提到的参数中,前两个参数在平台上均可查到,而ke这一参数则需要单独获取。
获取方法:
上述内容是关于您自建或第三方开发平台的详细信息,其中涉及的授权环节所使用的URL是获取密钥的途径。
在第三方平台完成创建并审核通过之后,微信的服务器便会按照每10分钟的时间间隔,向其指定的“授权事件接收URL”发送ket信息。收到这些推送后,第三方平台必须对信息进行解密处理。因此,在授权流程中,必须接收微信发送的post数据,并对其进行解密,以获取相应的参数。
官方给出了个java的例子,可以看着例子进行讲述:
public static void 执行主程序入口点,参数为字符串数组,可能抛出异常。 // // 第三方回复公众平台 // // 需要加密的明文 定义了一个字符串变量encodingAesKey,其值为"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG"。 String token = "pamtest"; 获取的字符串表示的时间戳为1409304348。 String nonce = "xxxxxx"; appId的值为"wxb11529c136998cb6"。 String replyMsg = " 中文1407743423"; 创建了一个名为WXBizMsgCrypt的对象pc,该对象通过token、encodingAesKey和appId进行初始化。 字符串明文信息通过PC加密模块,结合回复消息内容、时间戳以及随机数,被成功转换成了加密后的信息。 输出:加密结果为,明文内容,后跟明文。 创建一个DocumentBuilderFactory实例,名为dbf,通过调用newInstance()方法,并使用DocumentBuilderFactory类。 dbf创建了新的DocumentBuilder实例,并将其赋值给db。 创建一个新的字符串读取器对象,并将明文内容作为参数传入。 输入源对象等于新创建的,基于读取资源的输入源实例。 从数据库中解析出数据流,并将其存储为文档对象:Document document = db.parse(is)。 获取文档的根元素,并将其赋值给变量root。 root节点下获取所有名为"Encrypt"的元素,并将结果存储在nodelist1变量中。 root节点下获取所有名为"MsgSignature"的元素,并将结果存储在nodelist2变量中。 获取到节点列表中第一个节点的文本内容后,将其赋值给加密字符串变量encrypt。 msgSignature 被赋值为节点列表 nodelist2 中第一个节点所包含的文本内容。 String format = ""; 从XML中提取的字符串,通过使用格式化方法,结合了指定的格式与加密后的内容。 // // 公众平台发送消息给第三方,第三方处理 // // 第三方收到公众号平台发送的消息 pc对msgSignature、timestamp、nonce和fromXML进行解密操作,得到的结果存储在变量result2中。 输出解密后的清晰文本内容为:result2。 pc函数调用了verifyUrl,且所有参数均未提供。 }
此代码块展示了加密与解密的过程,我们在授权环节接收到的微信加密的XML文档,因此我们的任务是对这些文件进行解密。我们可以对前述代码进行相应的调整,接下来,我将解析发送过来的数据。
public void auth_webhook() { logger.info("微信服务推送请求。"); 获取上下文对象,并存储到变量context中。 获取到上下文中的请求对象,将其赋值给HttpServletRequest变量request。 获取到上下文中的响应对象,将其赋值给HttpServletResponse类型的变量response。 logger.info("处理请求数据"); PrintWriter out = null; 创建一个新的字符串缓冲区对象,命名为json。 try { 设置请求的字符编码为“UTF-8”。 out = response.getWriter(); 从请求中获取,reader对象是通过调用request的getReader()方法得到的。 String line = null; 在读取过程中,只要获取到的行内容不为空,即(line = reader.readLine()) != null,就持续进行循环。 json.append(line); } } catch (Exception e) { 记录器记录错误,输出异常信息,并附带异常对象。 return; } logger.info("json:=="+json); 记录器输出信息:“json.toString的值等于:”+json.toString(); 对请求进行处理,并授权事件,使用json字符串进行转换。 输出响应,标记为成功;直接呈现“成功”状态。 } /** * 处理授权事件的推送 * @param request * @throws AesException * @throws IOException */ 进行授权事件处理,接收HTTP请求和XML数据。 logger.info("开始处理请求数据"); 获取请求参数中的nonce值,并将其赋值给字符串变量String nonce。 从请求中获取参数“timestamp”,并将其赋值给字符串变量timestamp。 获取请求参数中的签名信息,并将其赋值给字符串变量signature。 msgSignature变量被赋值为请求中参数"msg_signature"的值。 String token="你平台的token"; 定义字符串变量encodingAesKey,其值为“你的key”。 String appId="你的id"; 日志记录器显示:nonce值为{},时间戳为{}。 日志记录器输出:“签名信息为:{},消息签名信息为:{}”。 try { 创建了一个名为WXBizMsgCrypt的对象pc,该对象通过token、encodingAesKey和appId进行初始化。 xml等于pc解密消息签名、时间戳、随机数后得到的xml。 logger.info("解密后的数据:"+xml); } catch (AesException e) { 在处理异常情况时,若捕获到错误,系统将自动生成相应的异常处理代码块。 e.printStackTrace(); } }
上述xml文件内容为解密后所需获取的数据,通过解析该数据,我们可以提取出所需的字段,具体操作可参考相关说明。
2,获取预授权码
http请求方式: POST(请使用协议)
POST数据示例:
"":""
请求参数说明
参数说明
第三方平台方
返回结果示例
"":"-",
"":600
结果参数说明
参数说明
预授权码
有效期,为20分钟
获取了预先授权的代码之后,我们随即需要激活授权界面,并可在个人操作界面增设一个按键,以触发微信的授权页面。
3,引导进入授权页面
在任一HTML或JSP页面中,若需添加一个按钮,该按钮的交互目标地址应当设定为:
该网站要求第三方平台必须提供相关方信息、预先授权的代码以及回调的统一资源标识符。
在指定URL中,必须取得扫描用户所授权的代码。用户扫描后,系统将自动跳转至指定的URI,并将用户的授权代码反馈至你的平台,此时你只需接收并妥善保存即可。
4,授权后回调URI,得到授权码和过期时间
授权流程一旦完成,系统将自动跳转至指定的回调地址,随后在URL的参数部分,将展示相应的授权码以及该码的有效期限(例如:xxx&=600)。
5,使用授权码换取公众号的授权信息
接口调用请求说明
http请求方式: POST(请使用协议)
POST数据示例:
"":"" ,
" ": ""
请求参数说明
参数说明
第三方平台
授权后的代码将发送至第三方平台,具体操作流程请参考第三方平台的授权指南。
返回结果示例
"": {
"": "",
"ken": "-",
"": 7200,
"oken": "dTo--",
"":
"": {
"id": 1
},
"": {
"id": 2
},
"": {
"id": 3
结果参数说明
参数说明
授权信息
授权方
ken
授权方令牌(在授权的公众号具备API权限时,才有此返回值)
有效期(在授权的公众号具备API权限时,才有此返回值)
oken
在授权公众号拥有API权限的情况下,会返回刷新令牌这一值。此令牌主要用于第三方平台获取并更新已授权用户的权限,且仅在授权时提供,需谨慎保管。若不幸遗失,用户需重新进行授权,方可获得新的刷新令牌。
开发者需留意公众号所赋予的权限清单,特别注意的是,若用户已将消息与菜单权限授权予某一第三方,若再次授权另一第三方,鉴于权限集的互斥性,后续第三方的授权将自动取消前者的权限集。开发者可从返回信息中核实此情况,以防止信息缺失。权限编号1至8依次为:
消息与菜单权限集
用户管理权限集
帐号管理权限集
网页授权权限集
微信小店权限集
多客服权限集
业务通知权限集
微信卡券权限集
最后拿到上述的去获取用户的信息:
http请求方式: POST(请使用协议)
POST数据示例:
"":"" ,
"": ""
请求参数说明
参数说明
服务
授权方
返回结果示例
"": {
"": "微信SDK Demo ",
"": "",
"": { "id": 2 },
"": { "id": 0 },
"":"",
"":"腾讯计算机系统有限公司",
禁止对特定内容进行修改,相关数据统计如下:修改次数为零,删除次数为零,添加次数为零,复制次数为零,其他操作次数为零。
"":""
"":"URL",
},
"": {
"": "",
"":
{ "": { "id": 1 } },
{ "": { "id": 2 } },
{ "": { "id": 3 } }
结果参数说明
参数说明
授权方昵称
授权方头像
授权方公众号的类型分别为:0表示订阅号,1表示源自历史老账号的升级订阅号,2则代表服务号。
授权方的认证种类如下:-1表示尚未完成认证;0表示已通过微信认证;1表示已获得新浪微博认证;2表示已取得腾讯微博认证;3表示资质认证已通过,但名称认证尚未完成;4表示资质认证通过,名称认证未通过,且新浪微博认证已获通过;5表示资质认证通过,名称认证未通过,且腾讯微博认证已获通过。
授权方公众号的原始ID
公众号的主体名称
授权方公众号所设置的微信号,可能为空
用以了解以下功能的开通状况(0代表未开通,1代表已开通):
:是否开通微信门店功能
:是否开通微信扫商品功能
:是否开通微信支付功能
:是否开通微信卡券功能
:是否开通微信摇一摇功能
二维码图片的URL,开发者最好自行也进行保存
授权信息
授权方
公众号授权给开发者的权限集列表,ID为1到15时分别代表:
消息管理权限
用户管理权限
帐号服务权限
网页服务权限
微信小店权限
微信多客服权限
群发与通知权限
微信卡券权限
微信扫一扫权限
微信连WIFI权限
素材管理权限
微信摇周边权限
微信门店权限
微信支付权限
自定义菜单权限
请注意:
该字段返回结果不涉及公众号是否拥有该权限集的权限(原因在于部分公众号可能拥有),您需依据公众号的账号类别及其认证状态,来判定其接口权限。