微信开发:接入微信入口
2016-06-20 00:00
519 查看
摘要: 目前对于许多公司都会涉及到微信开发这一块,对此将我所用到的记录下来分享。
还需要一个外网地址接口微信推送的消息,微信约定外网地址目前支持80和443接口,本人使用的是花生壳映射本机
登陆公众号,选择开发-基本配置-填写服务器配置:
参数说明:
URL:服务器地址-用来接收微信消息和事件的接口URL(需保持外网访问)
Token:任意填写,用作生成签名
EncodingAESKey:消息体加解密密钥(自己填写或者自动生成)
此处消息加解密方式如果选择的安全模式则需要用到EncodingAESKey进行解密消息
若是此处点击提交会出现token验证失败,是因为我们需要新建一个工程来进行微信验证。本人此处使用的是SpringMvc,请看下一步
加密/校验流程:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信请求
4. 通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
本人的配置:
URL:*/weixin/signature (*为我外网地址)
TOKEN:xiaofli007 (我自行填写-任意)
EncodingAESKey:自动生成(此处不会用到,安全模式下接收消息会用此密钥进行解密)
点击提交,如果出现以下情况:
1. URL请求超时:检查本机URL是否能正常访问,外网URL是否能正常访问
2. TOKEN验证失败:确定signature是否与解密过后的字符串一致,本人此处验证过后返回为JSON
提交成功,则可以进行下一步开发。
一,申请开发者账号,进行服务器配置
首先我们得先有一个公众号,到微信公众号平台申请一个,本人申请的是订阅号。网址:https://mp.weixin.qq.com还需要一个外网地址接口微信推送的消息,微信约定外网地址目前支持80和443接口,本人使用的是花生壳映射本机
登陆公众号,选择开发-基本配置-填写服务器配置:
参数说明:
URL:服务器地址-用来接收微信消息和事件的接口URL(需保持外网访问)
Token:任意填写,用作生成签名
EncodingAESKey:消息体加解密密钥(自己填写或者自动生成)
此处消息加解密方式如果选择的安全模式则需要用到EncodingAESKey进行解密消息
若是此处点击提交会出现token验证失败,是因为我们需要新建一个工程来进行微信验证。本人此处使用的是SpringMvc,请看下一步
二,验证服务器地址
URL参数:参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信请求
4. 通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
[code=language-java]@Controller @RequestMapping("/") public class WeixinController { @RequestMapping("signature") @ResponseBody public String signature(String signature, String timestamp, String nonce, String echostr){ try { String shaPw = SHA1.getSHA1("xiaofli007", timestamp, nonce); if(signature.equals(shaPw)) return echostr; } catch (Exception e) { e.printStackTrace(); } return null; } }
[code=language-java]/** * 用SHA1算法生成安全签名 * @param token * @param timestamp 时间戳 * @param nonce 随机字符串 * @return 安全签名 * @throws Exception */ public static String getSHA1(String token, String timestamp, String nonce) throws Exception { try { String[] array = new String[] { token,timestamp, nonce}; StringBuffer sb = new StringBuffer(); // 字符串排序 Arrays.sort(array); for (int i = 0; i < 3; i++) { sb.append(array[i]); } String str = sb.toString(); // SHA1签名生成 MessageDigest md = MessageDigest.getInstance("SHA-1"); md.update(str.getBytes()); byte[] digest = md.digest(); StringBuffer hexstr = new StringBuffer(); String shaHex = ""; for (int i = 0; i < digest.length; i++) { shaHex = Integer.toHexString(digest[i] & 0xFF); if (shaHex.length() < 2) { hexstr.append(0); } hexstr.append(shaHex); } return hexstr.toString(); } catch (Exception e) { e.printStackTrace(); throw new Exception(); } }
本人的配置:
URL:*/weixin/signature (*为我外网地址)
TOKEN:xiaofli007 (我自行填写-任意)
EncodingAESKey:自动生成(此处不会用到,安全模式下接收消息会用此密钥进行解密)
点击提交,如果出现以下情况:
1. URL请求超时:检查本机URL是否能正常访问,外网URL是否能正常访问
2. TOKEN验证失败:确定signature是否与解密过后的字符串一致,本人此处验证过后返回为JSON
提交成功,则可以进行下一步开发。
三,文档阅读
1,微信定义的规则,一定要仔细看微信开发文档(http://mp.weixin.qq.com/wiki),无非就是进行接口的调用。相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 微信悄悄升级群聊功能:个人微信营销号的福音
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序