- 1、填寫服務(wù)器配置
- 2、驗(yàn)證服務(wù)器地址的有效性
第一步、填寫服務(wù)器配置
登錄微信公眾平臺(tái)官網(wǎng)后,在公眾平臺(tái)后臺(tái)管理頁面 - 開發(fā)者中心頁,點(diǎn)擊“修改配置”按鈕,填寫服務(wù)器地址(URL)、Token和EncodingAESKey,其中URL是開發(fā)者用來接收微信消息和事件的接口URL。Token可由開發(fā)者可以任意填寫,用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)。EncodingAESKey由開發(fā)者手動(dòng)填寫或隨機(jī)生成,將用作消息體加解密密鑰。
同時(shí),開發(fā)者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務(wù)器配置在提交后都會(huì)立即生效,請(qǐng)開發(fā)者謹(jǐn)慎填寫及選擇。加解密方式的默認(rèn)狀態(tài)為明文模式,選擇兼容模式和安全模式需要提前配置好相關(guān)加解密代碼,詳情請(qǐng)參考消息體簽名及加解密部分的文檔。

第二步:驗(yàn)證服務(wù)器地址的有效性
開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫的服務(wù)器地址URL上,GET請(qǐng)求攜帶四個(gè)參數(shù):
| 參數(shù) | 描述 |
|---|---|
| signature | 微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)。 |
| timestamp | 時(shí)間戳 |
| nonce | 隨機(jī)數(shù) |
| echostr | 隨機(jī)字符串 |
開發(fā)者通過檢驗(yàn)signature對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請(qǐng)求來自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷豦chostr參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。
加密/校驗(yàn)流程如下:
- 將token、timestamp、nonce三個(gè)參數(shù)進(jìn)行字典序排序
- 將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行sha1加密
- 開發(fā)者獲得加密后的字符串可與signature對(duì)比,標(biāo)識(shí)該請(qǐng)求來源于微信
檢驗(yàn)signature的PHP示例代碼:
/*
*$signature:微信加密簽名,$signature結(jié)合了開發(fā)者填寫的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)
*/
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);//將這三個(gè)參數(shù)進(jìn)行字典排序
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );//將三個(gè)參數(shù)拼接成一個(gè)字符進(jìn)行sha1加密
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
PHP示例代碼下載:下載