首先咱們得先有一個公衆號,到微信公衆號平臺申請一個,本人申請的是訂閱號。網址:https://mp.weixin.qq.comjava
還須要一個外網地址接口微信推送的消息,微信約定外網地址目前支持80和443接口,本人使用的是花生殼映射本機算法
登錄公衆號,選擇開發-基本配置-填寫服務器配置:安全
參數說明:服務器
URL:服務器地址-用來接收微信消息和事件的接口URL(需保持外網訪問)微信
Token:任意填寫,用做生成簽名微信開發
EncodingAESKey:消息體加解密密鑰(本身填寫或者自動生成)app
此處消息加解密方式若是選擇的安全模式則須要用到EncodingAESKey進行解密消息加密
如果此處點擊提交會出現token驗證失敗,是由於咱們須要新建一個工程來進行微信驗證。本人此處使用的是SpringMvc,請看下一步spa
URL參數:code
參數 | 描述 |
---|---|
signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
timestamp | 時間戳 |
nonce | 隨機數 |
echostr | 隨機字符串 |
加密/校驗流程:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信請求
4. 經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,不然接入失敗
@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; } }
/** * 用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),無非就是進行接口的調用。