"大众年夜众号第三方平台的申请资料解释
授权发起页域名:指"大众号在登录授权给第三方平台方时的授权回调域名,在"大众年夜众号进行登录授权流程中,必须从本域名内网页跳转到登录授权页,才可完成登录授权。授权成功后会回调授权时供应的URI,"大众年夜众平台会检讨URI,必须担保URI所属域名与做事申请时供应的授权域名保持同等。请把稳,域名不需带有“http://”等协议内容,也不能在域名末端附加详细目录,严格按照类似www.qq.com的写法。
授权测试公众号列表:在全网发布之前,仅该列表内"大众号才可进行授权,以便测试。请填写"大众年夜众号的原始ID(可在"大众平台网站的公众号设置页找到),最多10个,以英文“;”隔开。请至少要填写这一个:gh_ea3c04785154,这是全网发布时必须用到的。
授权事宜吸收URL:用于吸收取消授权关照、授权成功关照、授权更新关照,也用于吸收ticket,ticket是验证平台方的主要凭据,做事方在获取component_access_token时须要供应最新推送的ticket以供验证身份合法性。此ticket作为验证做事方的主要凭据,请妥善保存。
"大众年夜众号校验Token: 开拓者在代替"大众年夜众号吸收到时,用此Token来校验。用法与普通"大众年夜众号token同等
公众号加解密Key: 在代替"大众年夜众号收发过程中利用。必须是长度为43位的字符串,只能是字母和数字。用法与普通"大众年夜众号symmetric_key同等
"大众年夜众号与事宜吸收URL:该URL用于吸收已授权公众年夜众号的和事宜,内容、格式、署名办法、加密办法与普通公众年夜众号吸收的同等,唯一差异在于署名token和加密symmetric_key利用的是做事方申请时所填写的信息。由于详细内容不会变更,故根据内容里的ToUserName,做事方是可以区分出详细所属的公众号
白名单IP地址列表:仅当开拓者IP地址在该列表中时,才被许可调用干系接口。最多填写100个IP地址,以英文“;”隔开。后续有出口IP变更时一定要先在申请资料里填写并覆盖现网,否则会被拦截。
1,获取第三方平台access_token
http要求办法: POST(请利用https协议) https://api.weixin.qq.com/cgi-bin/component/api_component_token
POST数据示例:
{34;component_appid":"appid_value" ,"component_appsecret": "appsecret_value", "component_verify_ticket": "ticket_value" }
要求参数解释
参数解释component_appid第三方平台appidcomponent_appsecret第三方平台appsecretcomponent_verify_ticket微信后台推送的ticket,此ticket会定时推送,详细请见本页末端的推送解释
返回结果示例
{"component_access_token":"61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA", "expires_in":7200}
结果参数解释
参数解释component_access_token第三方平台access_tokenexpires_in有效期
上述中的参数前两个在平台中都可以找到,component_verify_ticke这个参数须要去获取。
获取方法:
上述是你自己的第三方的开拓平台的详情,个中的授权事宜接管URl便是获取component_verify_ticket的关键。
在第三方平台创建审核通过后,微信服务器会向其“授权事宜吸收URL”每隔10分钟定时推送component_verify_ticket。第三方平台方在收到ticket推送后也需进行解密。以是在授权的方法中,须要去接管微信推送的post数据,然后解密得到参数:
官方给出了个java的例子,可以看着例子进行讲述:
public static void main(String[] args) throws Exception {//// 第三方回答公众年夜众平台//// 须要加密的明文String encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";String token = "pamtest";String timestamp = "1409304348";String nonce = "xxxxxx";String appId = "wxb11529c136998cb6";String replyMsg = " 中文<xml><ToUserName><![CDATA[oia2TjjewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Description><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>";WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);String mingwen = pc.encryptMsg(replyMsg, timestamp, nonce);System.out.println("加密后: " + mingwen);DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();StringReader sr = new StringReader(mingwen);InputSource is = new InputSource(sr);Document document = db.parse(is);Element root = document.getDocumentElement();NodeList nodelist1 = root.getElementsByTagName("Encrypt");NodeList nodelist2 = root.getElementsByTagName("MsgSignature");String encrypt = nodelist1.item(0).getTextContent();String msgSignature = nodelist2.item(0).getTextContent();String format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%1$s]]></Encrypt></xml>";String fromXML = String.format(format, encrypt);//// "大众年夜众平台发送给第三方,第三方处理//// 第三方收到公众年夜众号平台发送的String result2 = pc.decryptMsg(msgSignature, timestamp, nonce, fromXML);System.out.println("解密后明文: " + result2);//pc.verifyUrl(null, null, null, null);}
这个是给出例子的加解密的代码,而我们在授权的方法中获取的便是微信加密后的xml文件,以是我们要做的便是解密个中的文件,我们可以修正上述代码,下面是我解析推送的数据:
public void auth_webhook() {logger.info("微信服务推送要求。");Context context = getContext();HttpServletRequest request = context.getReq();HttpServletResponse response = context.getResp();logger.info("处理要求数据");PrintWriter out = null;StringBuffer json = new StringBuffer();try {request.setCharacterEncoding("utf-8");out = response.getWriter();BufferedReader reader = request.getReader();String line = null;while ((line = reader.readLine()) != null) {json.append(line);}} catch (Exception e) {logger.error(e.toString(), e);return;}logger.info("json:=="+json);logger.info("json.toString:=="+json.toString());processAuthorizeEvent(request,json.toString());//output(response, "success"); // 直接返回success。}/ 处理授权事宜的推送 @param request @throws AesException @throws IOException/public void processAuthorizeEvent(HttpServletRequest request,String xml){logger.info("开始处理要求数据"); String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String signature = request.getParameter("signature"); String msgSignature = request.getParameter("msg_signature"); String token="你平台的token"; String encodingAesKey="你的key"; String appId="你的id"; logger.info("noce:{},timestamp:{}", nonce, timestamp); logger.info("signature:{},msgSignature:{}", signature, msgSignature); try {WXBizMsgCrypt pc = new WXBizMsgCrypt(token, encodingAesKey, appId);xml = pc.decryptMsg(msgSignature, timestamp, nonce, xml);logger.info("解密后的数据:"+xml);} catch (AesException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
上面中的xml便是解密后我们要的数据,我们可以根据这个数据在进行解析得到我们要的那个字段,详细参照http://blog.csdn.net/jackren_developer/article/details/78882408
2,获取预授权码
http要求办法: POST(请利用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
POST数据示例:
{"component_appid":"appid_value" }
要求参数解释
参数解释component_appid第三方平台方appid
返回结果示例
{"pre_auth_code":"Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw","expires_in":600}
结果参数解释
参数解释pre_auth_code预授权码expires_in有效期,为20分钟
拿到了预授权码后,紧接着我们就要启动授权页,可以在自己的界面加上一个按钮调起微信的授权页
3,勾引进入授权页面
在任何一个html或者jsp页面,加一个按钮,按钮的相应地址为:
https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx该网址中第三方平台方须要供应第三方平台方appid、预授权码和回调URI
个中在redirect_uri这个URL中须要获取扫码用户的授权码,当"大众年夜众号用户扫过后,会回调上述的URI,将用户的授权码返回给你,你只须要接管保存
4,授权后回调URI,得到授权码和过期韶光
授权流程完成后,会进入回调URI,并在URL参数中返回授权码和过期韶光(redirect_url?auth_code=xxx&expires_in=600)
5,利用授权码换取"大众年夜众号的授权信息
接口调用要求解释
http要求办法: POST(请利用https协议)
https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx
POST数据示例:
{"component_appid":"appid_value" ," authorization_code": "auth_code_value"}
要求参数解释
参数解释component_appid第三方平台appidauthorization_code授权code,会在授权成功时返回给第三方平台,详见第三方平台授权流程解释
返回结果示例
{ "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}}]}
结果参数解释
参数解释authorization_info授权信息authorizer_appid授权方appidauthorizer_access_token授权方令牌(在授权的"大众年夜众号具备API权限时,才有此返回值)expires_in有效期(在授权的"大众年夜众号具备API权限时,才有此返回值)authorizer_refresh_token刷新令牌(在授权的"大众号具备API权限时,才有此返回值),刷新令牌紧张用于公众年夜众号第三方平台获取和刷新已授权用户的access_token,只会在授权时候供应,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌func_info"大众号授权给开拓者的权限集列表(请把稳,当涌现用户已经将与菜单权限集授权给了某个第三方,再授权给另一个第三方时,由于该权限集是互斥的,后一个第三方的授权将去除此权限集,开拓者可以在返回的func_info信息中验证这一点,避免信息遗漏),1到8分别代表:与菜单权限集用户管理权限集帐号管理权限集网页授权权限集微信小店权限集多客服权限集业务关照权限集微信卡券权限集
末了拿到上述的authorizer_appid去获取用户的信息:
http要求办法: POST(请利用https协议)https://api.weixin.qq.com/cgi-bin/component/api_get_authorizer_info?component_access_token=xxxx
POST数据示例:
{"component_appid":"appid_value" ,"authorizer_appid": "auth_appid_value" }
要求参数解释
参数解释component_appid做事appidauthorizer_appid授权方appid
返回结果示例
{"authorizer_info": {"nick_name": "微信SDK Demo Special", "head_img": "http://wx.qlogo.cn/mmopen/GPy", "service_type_info": { "id": 2 }, "verify_type_info": { "id": 0 },"user_name":"gh_eb5e3a772040",
"principal_name":"腾讯打算机系统有限公司",
"business_info": {"open_store": 0, "open_scan": 0, "open_pay": 0, "open_card": 0, "open_shake": 0},
"alias":"paytest01"
"qrcode_url":"URL",
},
"authorization_info": {
"appid": "wxf8b4f85f3a794e77", "func_info": [{ "funcscope_category": { "id": 1 } }, { "funcscope_category": { "id": 2 } }, { "funcscope_category": { "id": 3 } }]}}
结果参数解释
参数解释nick_name授权方昵称head_img授权方头像service_type_info授权方"大众号类型,0代表订阅号,1代表由历史老帐号升级后的订阅号,2代表做事号verify_type_info授权方认证类型,-1代表未认证,0代表微信认证,1代表新浪微博认证,2代表腾讯微博认证,3代表已资质认证通过但还未通过名称认证,4代表已资质认证通过、还未通过名称认证,但通过了新浪微博认证,5代表已资质认证通过、还未通过名称认证,但通过了腾讯微博认证user_name授权方公众年夜众号的原始IDprincipal_name"大众年夜众号的主体名称alias授权方"大众号所设置的微旗子暗记,可能为空 business_info
用以理解以下功能的开通状况(0代表未开通,1代表已开通):
open_store:是否开通微信门店功能
open_scan:是否开通微信扫商品功能
open_pay:是否开通微信支付功能
open_card:是否开通微信卡券功能
open_shake:是否开通微信摇一摇功能
qrcode_url 二维码图片的URL,开拓者最好自行也进行保存authorization_info授权信息appid授权方appidfunc_info公众年夜众号授权给开拓者的权限集列表,ID为1到15时分别代表:管理权限用户管理权限帐号做事权限网页做事权限微信小店权限微信多客服权限群发与关照权限微信卡券权限
微信扫一扫权限
微信连WIFI权限
素材管理权限
微信摇周边权限
微信门店权限
微信支付权限
自定义菜单权限
请把稳:1)该字段的返回不会考虑公众年夜众号是否具备该权限集的权限(由于可能部分具备),请根据"大众号的帐号类型和认证情形,来判断"大众年夜众号的接口权限。
若有疑问关注"大众年夜众号留言: