微信開發:接入微信入口

一,申請開發者帳號,進行服務器配置

        首先咱們得先有一個公衆號,到微信公衆號平臺申請一個,本人申請的是訂閱號。網址: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),無非就是進行接口的調用。

相關文章
相關標籤/搜索