微信開發者接入指南:token驗證

接入概述

官方文檔
接入微信公衆平臺開發,開發者需要按照如下步驟完成:

1、填寫服務器配置
2、驗證服務器地址的有效性
3、依據接口文檔實現業務邏輯


1、填寫服務器配置

下面是微信公衆號的截圖
在這裏插入圖片描述
登錄微信公衆平臺官網後,在公衆平臺官網的開發-基本設置頁面,勾選協議成爲開發者,點擊“修改配置”按鈕。
在這裏插入圖片描述
填寫服務器地址(URL)TokenEncodingAESKey
其中URL是開發者用來接收微信消息和事件的接口URL。
Token可由開發者可以任意填寫,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。
EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密密鑰。


同時,開發者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交後都會立即生效,請開發者謹慎填寫及選擇。加解密方式的默認狀態爲明文模式,選擇兼容模式和安全模式需要提前配置好相關加解密代碼

第二步:驗證消息的確來自微信服務器
邏輯:開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上。開發者通過檢驗signature對請求進行校驗。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,否則接入失敗。

signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字符串

加密/校驗流程如下:
1)將token、timestamp、nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信

<?php
//1. 將timestamp , nonce , token 按照字典排序
$timestamp = $_GET['timestamp'];
$nonce = $_GET['nonce'];
$token = "你設置的token";
$signature = $_GET['signature'];
$array = array($timestamp,$nonce,$token);
sort($array);
//2.將排序後的三個參數拼接後用sha1加密
$tmpstr = implode('',$array);
$tmpstr = sha1($tmpstr);
//3. 將加密後的字符串與 signature 進行對比, 判斷該請求是否來自微信。如果驗證正確,則返回參數echostr的內容,否則終止執行。
if($tmpstr == $signature)
{
	echo $_GET['echostr'];
	exit;
}
?>
//官方文檔給的
private function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
	
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    if( $tmpStr == $signature ){
        return true;
    }else{
        return false;
    }
}

第三步:依據接口文檔實現業務邏輯
驗證URL有效性成功後即接入生效,成爲開發者。

成爲開發者後,用戶每次向公衆號發送消息、或者產生自定義菜單、或產生微信支付訂單等情況時,開發者填寫的服務器配置URL將得到微信服務器推送過來的消息和事件,開發者可以依據自身業務邏輯進行響應,如回覆消息。

用戶向公衆號發送消息時,公衆號方收到的消息發送者是一個OpenID,是使用用戶微信號加密後的結果,每個用戶對每個公衆號有一個唯一的OpenID。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章