微信第三方平台授权流程- java
2017-06-26 14:17
260 查看
1. 微信第三方平台的开发,第一步就是公众号的授权,授权成功后第三方凭条才能利用公众号的appid和token获得公众账号额信息,并代替公众账号完成一些功能。
2. 授权的流程,理论图
代码流程,
1》 首先在微信开放平台的官网进行微信第三方平台的开发认证
2》认证通过后,在微信开放平台创建第三方平台的实体,创建完成后才能有对应的appid和secret,用于开发
3》微信服务项第三方平台会推送信息,例如:进行授权、取消授权、更新授权后,但是这些信息都是加密的,所以要下载微信的解密工具,随后会上传至我的账号
4》在创建微信第三方平台时,需要填写加密的key,长度为43个字符,但是在jdk(我用的是jdk1.7)编译时,因为长度过长,会报异常,是因为jdk自己的安全机制对key的长度有限制,需要将限制取消,方法就是下载UnlimitedJCEPolicyJDK7.zip利用里面的jar包代替jdk安装目录下,我的是:C:\Java\jdk1.7.0_80\jre\lib\security里的两个jar包即可,压缩包会上传至我的账号
5》微信服务器的推送信息,是通过域名进行推送的并且不能指定端口号,所以要将微信第三方平台创建时填写的域名映射到开发的电脑上,端口为80.
6》编写微信第三方平台注册时填写的“授权事件接收URL”的方法,第三方平台注册成功后,微信服务器会每十分钟向该url推送一次
7》获得ticket后,通过ticket获得微信第三方平台开发的token,其余的步骤按照微信开放平台尽心即可,注意的是,调用微信的接口时
2. 授权的流程,理论图
代码流程,
1》 首先在微信开放平台的官网进行微信第三方平台的开发认证
2》认证通过后,在微信开放平台创建第三方平台的实体,创建完成后才能有对应的appid和secret,用于开发
3》微信服务项第三方平台会推送信息,例如:进行授权、取消授权、更新授权后,但是这些信息都是加密的,所以要下载微信的解密工具,随后会上传至我的账号
4》在创建微信第三方平台时,需要填写加密的key,长度为43个字符,但是在jdk(我用的是jdk1.7)编译时,因为长度过长,会报异常,是因为jdk自己的安全机制对key的长度有限制,需要将限制取消,方法就是下载UnlimitedJCEPolicyJDK7.zip利用里面的jar包代替jdk安装目录下,我的是:C:\Java\jdk1.7.0_80\jre\lib\security里的两个jar包即可,压缩包会上传至我的账号
5》微信服务器的推送信息,是通过域名进行推送的并且不能指定端口号,所以要将微信第三方平台创建时填写的域名映射到开发的电脑上,端口为80.
6》编写微信第三方平台注册时填写的“授权事件接收URL”的方法,第三方平台注册成功后,微信服务器会每十分钟向该url推送一次
component_verify_ticket ,通过aes进行解密,获得ticket,我得获得ticket的方法
public void processAuthorizeEvent(HttpServletRequest request) { System.out.println("开始获取微信推送信息----------------------------"); // 获得微信推送的参数 String nonce = request.getParameter("nonce"); String timestamp = request.getParameter("timestamp"); String signature = request.getParameter("signature"); String msgSignature = request.getParameter("msg_signature"); try { if (!StringUtils.isNotBlank(msgSignature)) { return;// 微信推送给第三方开放平台的消息一定是加过密的,无消息加密无法解密消息 } String component_token = prop.getProperty("component_token"); boolean isValid = checkSignature(component_token, signature, timestamp, nonce); if (isValid) { StringBuilder sb = new StringBuilder(); BufferedReader in = request.getReader(); String line; while ((line = in.readLine()) != null) { sb.append(line); } // 微信推送的加密为信息 String xml = sb.toString(); // 参数 String component_encodingaeskey = prop.getProperty("component_encodingaeskey"); String component_appid = prop.getProperty("weixinThirdPart_appid"); // 加密信息的解密工具类 WXBizMsgCrypt pc = new WXBizMsgCrypt(component_token, component_encodingaeskey, component_appid); // 微信推送的加密信息,解密后的xml xml = pc.decryptMsg(msgSignature, timestamp, nonce, xml); Document doc = DocumentHelper.parseText(xml); Element rootElt = doc.getRootElement(); String type = rootElt.elementText("InfoType"); if ("component_verify_ticket".equals(type)) { processAuthorizationEvent(rootElt); } else if ("unauthorized".equals(type)) { handleUnauthorized(rootElt); } System.out.println("type}}}}}}}}}}}}}}}" + type); } } catch (Exception e) { e.printStackTrace(); } }解密的方法
public static boolean checkSignature(String token, String signature, String timestamp, String nonce) { boolean flag = false; if (signature != null && !signature.equals("") && timestamp != null && !timestamp.equals("") && nonce != null && !nonce.equals("")) { String sha1 = ""; String[] ss = new String[]{token, timestamp, nonce}; Arrays.sort(ss); for (String s : ss) { sha1 += s; } sha1 = AddSHA1.SHA1(sha1); if (sha1.equals(signature)) { flag = true; } } return flag; }
7》获得ticket后,通过ticket获得微信第三方平台开发的token,其余的步骤按照微信开放平台尽心即可,注意的是,调用微信的接口时
相关文章推荐
- 微信第三方平台授权流程
- 微信第三方平台授权流程
- 微信开放平台之公众号第三方平台授权流程
- 微信第三方平台授权流程
- 微信第三方授权流程:获取公众信息
- 第三方APP分享内容到微信平台的授权过程小总结
- php微信第三方平台授权
- JAVA微信开放平台授权
- 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码
- 微信小程序 申请第三方平台流程
- 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台
- 微信第三方平台处理授权公众号的网页授权接口
- 微信公众号第三方平台开发 授权流程
- ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程一(获取第三方平台access_token)
- [置顶] 微信开放平台的第三方平台、全网发布流程、组件API、返回普通文本消息
- 微信公众号第三方平台开发 授权流程
- 微信第三方平台开发经验总结(四):重定向到授权页
- 微信第三方平台公众号授权
- 微信第三方平台开发授权1:获取component_verify_ticket
- 微信第三方平台开发授权2:获取component_access_token,pre_auth_code