智能绑定微信公众号功能是如何实现的
来源:互联网 发布:nginx listen 编辑:程序博客网 时间:2024/06/05 09:24
简单来说就是由程序模拟登陆到微信公众平台,抓取需要的内容(鉴权参数)后,回填到自己的系统中,来完成一种智能化的、无需用户干扰的功能,以提高用户体验。
基本思路:
基本思路:
- 通过用户提供的用户名、密码模拟登陆到公众平台
- 登陆后转到特定的页面来获取需要的内容
- 获取到内容后回填到系统,完成绑定
知道基本思路了,下面开始正式动工,在开始之前需要有一个前提:你是个程序猿(或者至少懂一门开发语言)。
需要用到哪些东西(以下以JAVA为例):
- Eclipse(开发工具)、JDK
- apache-httpclient及相关依赖包(模拟登陆、抓取内容)
- jsoup及相关依赖包(HTML解析神器)
- fast-json(解析登陆返回参数)
- firebug(firefox插件,用于跟踪登陆地址及登陆参数)
要模拟登陆,首先我们要知道登陆的地址以及登陆参数是什么,下图是用firebug跟踪到的数据
注意参数部分的“pwd”(密码),这不是我的密码啊(估计也没人把密码设置成这样吧?),那这是肿么了?
这其实是微信在登陆时把密码用javascript进行了加密,然后才进行参数传递(加密可另开一个问题,这里不做展开),有经验的人看到这个加密的密码后或许能大概猜出这是采用什么算法加密的,好像是MD5?于是我将原始密码加密后与其对比,果然是一样一样的,就是MD5!
好了,登陆地址、参数都清楚了,下面就是用httpclient模拟登陆
public String loginGetToken(String username, String pwd) throws Exception {// 登陆地址String loginUrl = "https://mp.weixin.qq.com/cgi-bin/login" +"?lang=zh_CN&username=%s&pwd=%s&imgcode=&f=json";loginUrl = String.format(loginUrl, username, EncryptUtils.toMD5Hex(pwd.getBytes()));PostMethod loginMethod = new PostMethod(loginUrl);// 这里要加引用,否则会报错 Referer errorloginMethod.addRequestHeader("Referer", "https://mp.weixin.qq.com/");httpClient.executeMethod(loginMethod);String resp = loginMethod.getResponseBodyAsString();loginMethod.releaseConnection();JSONObject respJson = JSON.parseObject(resp);// 从登陆成功的返回消息中提取token,备用String redirect = respJson.getString("redirect_url");String token = null;for (String s : redirect.split("&")) {if (s.startsWith("token")) {token = s.split("=")[1];break;}}return token;}
登陆成功后,会获取到token,而通过token就可以随意访问公众号的任何页面了。
下面通过上一步中获取的token来访问获取鉴权参数的页面以获取鉴权参数
public String[] getDevParams(String token) throws Exception {// 鉴权参数的页面地址String devUrl = "https://mp.weixin.qq.com/advanced/" +"advanced?action=dev&t=advanced/dev&token=%s&lang=zh_CN";devUrl = String.format(devUrl, token);GetMethod devMethod = new GetMethod(devUrl);httpClient.executeMethod(devMethod);// 抓取页面内容String resp = devMethod.getResponseBodyAsString();devMethod.releaseConnection();// 从返回的内容中提取鉴权参数Document html = Jsoup.parse(resp);Element developer_info = html.select(".developer_info").get(1);Elements frm_input_box = developer_info.select(".frm_input_box");String appid = frm_input_box.get(0).text();String appsecret = frm_input_box.get(0).text();return new String[] { appid, appsecret };}
至此,我们已经获取到需要的内容了,下一步就是将鉴权参数回填到系统中,完成绑定。
0 0
- 智能绑定微信公众号功能是如何实现的
- 微信公众号智能绑定功能实现(2014年10月24日 更新)
- 微信公众号之智能绑定实现初始版本
- 商银行信用卡中心的微信公共帐号,帐号绑定功能是如何实现的?
- 微信公众号 红包接口的功能实现
- 绑定微信公众号
- 网站如何绑定微信公众帐号
- 微信公众号智能识别回复的实现(基于ThinkPHP框架)
- 微信公众号如何申请原创声明功能
- 微信:用户账号绑定到微信公众号的方法
- 微信公众号的绑定域名详解
- 实现微信公众号“一键关注”功能?
- golang实现微信公众号发红包功能
- java实现微信公众号官方支付功能
- 如何在微信公众平台上实现支付功能/微信支付
- 微信公众平台实现天气预报功能
- 微信公众号基础04_分享和录音功能的实现
- golang实现微信公众号发送代金券及获取代金券的功能
- oc----分类
- 天声人語 20150820
- 动态的向数组中添加值及获取datatable的所有列名
- Javascript(一)-01-(概述和Java的区别)
- ios Mantle使用小记
- 智能绑定微信公众号功能是如何实现的
- openwrt U盘热插拔
- WPF中多线程统计拆箱装箱和泛型的执行效率
- Algorithms—152.Maximum Product Subarray
- Java性能优化(4):避免创建重复对象
- Android Fragment 你应该知道的一切
- HTTPS和HTTP的区别
- Javascript(一)-02-(Js和html相结合的方式一二)
- 欢迎使用CSDN-markdown编辑器