1. 程式人生 > >微信訂閱號開發-1

微信訂閱號開發-1

span idt sta sort 否則 tab 隨機 get code

  前天申請了個微信訂閱號,準備試試php開發微商場。


  今天中午去bae搞了個服務器,然後就開始驗證token,到晚上才弄完。別人的服務器用著就是麻煩,更新一下代碼就要push到git上,對接口不熟悉真的是太浪費時間了。下面是終於測試成功的token驗證代碼。

 1 class Main 
 2 {
 3     private $sign;  //微信加密簽名
 4     private $time;  //時間戳
 5     private $nonce;  //隨機數
 6     private $echostr;  //隨機字符串
 7     private $token;  //token
8 9 public function __construct($_sign, $_time, $_nonce, $_str) 10 { 11 $this->sign = $_sign; 12 $this->time = $_time; 13 $this->nonce = $_nonce; 14 $this->echostr = $_str; 15 $this->token = ‘7542110‘; 16 } 17 18 public
function valid() 19 { 20 if ($this->checkSignature()) { 21 echo $this->echostr; 22 exit; 23 } else { 24 return false; 25 } 26 } 27 28 private function checkSignature() 29 { 30 $dataArr = array($this->token, $this
->time, $this->nonce); 31 sort($dataArr, SORT_STRING); 32 $tmpArr = sha1(implode(‘‘, $dataArr)); 33 34 if ($tmpArr == $this->sign) { 35 return true; 36 } else { 37 return false; 38 } 39 } 40 }

  短短幾十行代碼摸索了幾個小時,就因為官方給的文檔沒看仔細。順便貼上我漏看的幾條。

  開發者通過檢驗signature對請求進行校驗(下面有校驗方式)。若確認此次GET請求來自微信服務器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。加密/校驗流程如下:

1)將token、timestamp、nonce三個參數進行字典序排序

2)將三個參數字符串拼接成一個字符串進行sha1加密

3)開發者獲得加密後的字符串可與signature對比,標識該請求來源於微信

微信訂閱號開發-1