實現步驟:
第一步:填寫服務器配置
登陸微信公衆平臺官網後,在公衆平臺後臺管理頁面 - 開發者中心頁,點擊「修改配置」按鈕,填寫服務器地址(URL)、Token和EncodingAESKey,其中URL是開發者用來接收微信消息和事件的接口URL。Token可由開發者能夠任意填寫,用做生成簽名(該Token會和接口URL中包含的Token進行比對,從而驗證安全性)。EncodingAESKey由開發者手動填寫或隨機生成,將用做消息體加解密密鑰。laravel
同時,開發者可選擇消息加解密方式:明文模式、兼容模式和安全模式。模式的選擇與服務器配置在提交後都會當即生效,請開發者謹慎填寫及選擇。加解密方式的默認狀態爲明文模式,選擇兼容模式和安全模式須要提早配置好相關加解密代碼,詳情請參考消息體簽名及加解密部分的文檔。數組
第二步:驗證服務器地址的有效性
開發者提交信息後,微信服務器將發送GET請求到填寫的服務器地址URL上,GET請求攜帶四個參數:
signature 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。
timestamp 時間戳
nonce 隨機數
echostr 隨機字符串
開發者經過檢驗signature對請求進行校驗(下面有校驗方式)。若確認這次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成爲開發者成功,不然接入失敗。
加密/校驗流程以下:
1. 將token、timestamp、nonce三個參數進行字典序排序
2. 將三個參數字符串拼接成一個字符串進行sha1加密
3. 開發者得到加密後的字符串可與signature對比,標識該請求來源於微信。 安全
利用修改配置中的提交驗證TOKEN是否驗證成功!(寫好代碼上傳的到服務器,直接提交配置就行,配置的路徑要保證和URL服務器
一致)微信
//判斷是介入仍是用戶 只有第一次介入的時候纔會返回echostr public function index(){ //這個echostr呢 只有說驗證的時候纔會echo 若是是驗證過以後這個echostr是不存在的字段了 $echoStr = $_GET["echostr"]; if ($this->checkSignature()) { echo $echoStr; //若是你不知道是否驗證成功 你能夠先echo echostr 而後再寫一個東西 exit; } } //驗證微信開發者模式接入是否成功 private function checkSignature(){ //signature 是微信傳過來的 相似於簽名的東西 $signature = $_GET["signature"]; //微信發過來的東西 $timestamp = $_GET["timestamp"]; //微信傳過來的值 什麼用我不知道... $nonce = $_GET["nonce"]; //定義你在微信公衆號開發者模式裏面定義的token $token = "kudiansbao12"; //三個變量 按照字典排序 造成一個數組 $tmpArr = array( $token, $timestamp, $nonce ); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); //哈希加密 在laravel裏面是Hash:: $tmpStr = sha1($tmpStr); //按照微信的套路 給你一個signature沒用是不可能的 這裏就用得上了 if ($tmpStr == $signature) { return true; //必定要返回 不要echo 負責微信拿不到返回值致使不經過 } else { return false; } }// checkSignature end