- 1帕膜、填寫服務器配置
- 2、驗證服務器地址的有效性
第一步溢十、填寫服務器配置
登錄微信公眾平臺官網后垮刹,在公眾平臺后臺管理頁面 - 開發(fā)者中心頁,點擊“修改配置”按鈕张弛,填寫服務器地址(URL)荒典、Token和EncodingAESKey,其中URL是開發(fā)者用來接收微信消息和事件的接口URL吞鸭。Token可由開發(fā)者可以任意填寫寺董,用作生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)刻剥。EncodingAESKey由開發(fā)者手動填寫或隨機生成遮咖,將用作消息體加解密密鑰。
同時透敌,開發(fā)者可選擇消息加解密方式:明文模式盯滚、兼容模式和安全模式。模式的選擇與服務器配置在提交后都會立即生效酗电,請開發(fā)者謹慎填寫及選擇魄藕。加解密方式的默認狀態(tài)為明文模式,選擇兼容模式和安全模式需要提前配置好相關加解密代碼撵术,詳情請參考消息體簽名及加解密部分的文檔背率。
第二步:驗證服務器地址的有效性
開發(fā)者提交信息后,微信服務器將發(fā)送GET請求到填寫的服務器地址URL上嫩与,GET請求攜帶四個參數(shù):
參數(shù) | 描述 |
---|---|
signature | 微信加密簽名寝姿,signature結合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)划滋。 |
timestamp | 時間戳 |
nonce | 隨機數(shù) |
echostr | 隨機字符串 |
開發(fā)者通過檢驗signature對請求進行校驗(下面有校驗方式)饵筑。若確認此次GET請求來自微信服務器,請原樣返回echostr參數(shù)內容处坪,則接入生效根资,成為開發(fā)者成功架专,否則接入失敗。
加密/校驗流程如下:
- 將token玄帕、timestamp部脚、nonce三個參數(shù)進行字典序排序
- 將三個參數(shù)字符串拼接成一個字符串進行sha1加密
- 開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信
檢驗signature的PHP示例代碼:
/*
*$signature:微信加密簽名裤纹,$signature結合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)委刘、nonce參數(shù)
*/
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);//將這三個參數(shù)進行字典排序
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );//將三個參數(shù)拼接成一個字符進行sha1加密
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
PHP示例代碼下載:下載