Java 微信公衆號開發--- 接入微信

開發微信公衆號在沒有正式的公衆平臺帳號時,咱們可使用測試平臺帳號———

測試平臺申請地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/loginhtml

進入以後咱們會看見 此時 appID、appsecret都有了,url是咱們成爲開發者與微信進行的一次握手配置(url其實就是咱們項目中你controller的訪問地址,token是咱們本身填寫的,可在後臺進行判斷的),這裏的url能夠用ngrok來作映射,這樣開發起來比較方便,ngrok配置(點擊查看)ngrok下載地址(點擊下載)

咱們能夠在開發者文檔中看見java

這裏查看詳細配置;期間咱們要說道微信會給咱們的url經過get方式傳遞4個參數web

下面咱們來看一下controller怎麼編寫spring

  1. package com.website.wechat.controller;  
  2.   
  3. import java.io.IOException;  
  4. import java.security.MessageDigest;  
  5. import java.util.ArrayList;  
  6. import java.util.Collections;  
  7. import java.util.List;  
  8.   
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.springframework.stereotype.Controller;  
  13. import org.springframework.web.bind.annotation.RequestMapping;  
  14. import org.springframework.web.bind.annotation.RequestMethod;  
  15. import org.springframework.web.bind.annotation.ResponseBody;  
  16.   
  17. @Controller  
  18. @RequestMapping(value="weixin")  
  19. public class WeiXinController {  
  20.       
  21.     private static final char[] HEX_DIGITS = { '0''1''2''3''4''5',  
  22.         '6''7''8''9''a''b''c''d''e''f' };  
  23.   
  24.     @RequestMapping(value="getWeiXinMethod",method=RequestMethod.GET)  
  25.     @ResponseBody  
  26.     public void getWeiXinMethod(HttpServletRequest request, HttpServletResponse response) throws IOException{  
  27.         boolean validate = validate(request);  
  28.         if (validate) {  
  29.             response.getWriter().write(request.getParameter("echostr"));  
  30.             response.getWriter().close();  
  31.         }  
  32.           
  33.     }  
  34.       
  35.     private boolean validate(HttpServletRequest req) throws IOException {  
  36.         String signature = req.getParameter("signature");//微信加密簽名  
  37.         String timestamp = req.getParameter("timestamp");//時間戳  
  38.         String nonce = req.getParameter("nonce");//隨機數  
  39.         List<String> list = new ArrayList<String>();  
  40.         list.add("chenchen");  
  41.         list.add(timestamp);  
  42.         list.add(nonce);  
  43.         Collections.sort(list);//字典排序  
  44.         String s = "";  
  45.         for (int i = 0; i < list.size(); i++) {  
  46.             s += (String) list.get(i);  
  47.         }  
  48.         if (encode("SHA1", s).equalsIgnoreCase(signature)) {  
  49.             return true;  
  50.         } else {  
  51.             return false;  
  52.         }  
  53.     }  
  54.   
  55.     public static String encode(String algorithm, String str) {  
  56.         if (str == null) {  
  57.             return null;  
  58.         }  
  59.         try {  
  60.             //Java自帶的加密類  
  61.             MessageDigest messageDigest = MessageDigest.getInstance(algorithm);  
  62.             //轉爲byte  
  63.             messageDigest.update(str.getBytes());  
  64.             return getFormattedText(messageDigest.digest());  
  65.         } catch (Exception e) {  
  66.             throw new RuntimeException(e);  
  67.         }  
  68.     }  
  69.   
  70.     private static String getFormattedText(byte[] bytes) {  
  71.         int len = bytes.length;  
  72.         StringBuilder buf = new StringBuilder(len * 2);  
  73.         // 把密文轉換成十六進制的字符串形式  
  74.         for (int j = 0; j < len; j++) {  
  75.             buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);  
  76.             buf.append(HEX_DIGITS[bytes[j] & 0x0f]);  
  77.         }  
  78.         return buf.toString();  
  79.     }  
  80. }  
此時驗證和調用已經沒問題,成功介入微信,成爲一名開發者
相關文章
相關標籤/搜索