1. 程式人生 > >轉 微信Token驗證程式碼的實現 php

轉 微信Token驗證程式碼的實現 php

微信開放第三方API介面,

申請地址: 

https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/interface&token=1865635074&lang=zh_CN

官方提供PHP開發程式碼下載: 點此下載

如果你的微信介面頁面沒有做好,提交儲存的時候,會提示:驗證Token失敗。這個錯誤是因為,你的介面頁面還沒有反饋正確的資訊給微信介面。微信在教程方面還做得不夠成熟,就一個PHP示例,還是有問題的,在下篇文章我會講到這個錯誤在哪。微信官方也沒有跟大家說清楚怎麼才能是token驗證成功。下面我將給出示例告訴大家如何通過token驗證。

譬如:微信介面頁面是http://bbhet.com  預設頁面是weixin.php,我們只需要把weixin.php的程式碼改為, 然後放到你得網站根目錄:

官方下載地址 http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

方法一: 簡單的PHP實現Token驗證

[php]  view plain  copy
  1. <?php  
  2. //1. 將timestamp , nonce , token 按照字典排序  
  3. $timestamp = $_GET['timestamp'];  
  4. $nonce = $_GET['nonce'];  
  5. $token = "你自定義的Token值 用於驗證";  
  6. $signature = $_GET['signature'
    ];  
  7. $array = array($timestamp,$nonce,$token);  
  8. sort($array);  
  9.   
  10. //2.將排序後的三個引數拼接後用sha1加密  
  11. $tmpstr = implode('',$array);  
  12. $tmpstr = sha1($tmpstr);  
  13.   
  14. //3. 將加密後的字串與 signature 進行對比, 判斷該請求是否來自微信  
  15. if($tmpstr == $signature)  
  16. {  
  17.     echo $_GET['echostr'];  
  18.     exit;  
  19. }  



方法二: 封裝類的程式碼實現Token驗證

[php]  view plain  copy
  1. <?php  
  2. /** 
  3.   * wechat php test 
  4.   */  
  5.   
  6. //define your token  
  7. define("TOKEN""weixin");  
  8. $wechatObj = new wechatCallbackapiTest();  
  9. $wechatObj->valid();  
  10.   
  11. class wechatCallbackapiTest  
  12. {  
  13.     public function valid()  
  14.     {  
  15.         $echoStr = $_GET["echostr"];  
  16.   
  17.         //valid signature , option  
  18.         if($this->checkSignature()){  
  19.             echo $echoStr;  
  20.             exit;  
  21.         }  
  22.     }  
  23.   
  24.     public function responseMsg()  
  25.     {  
  26.         //get post data, May be due to the different environments  
  27.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  28.   
  29.         //extract post data  
  30.         if (!empty($postStr)){  
  31.                   
  32.                 $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA);  
  33.                 $fromUsername = $postObj->FromUserName;  
  34.                 $toUsername = $postObj->ToUserName;  
  35.                 $keyword = trim($postObj->Content);  
  36.                 $time = time();  
  37.                 $textTpl = "<xml>  
  38.                             <ToUserName><![CDATA[%s]]></ToUserName>  
  39.                             <FromUserName><![CDATA[%s]]></FromUserName>  
  40.                             <CreateTime>%s</CreateTime>  
  41.                             <MsgType><![CDATA[%s]]></MsgType>  
  42.                             <Content><![CDATA[%s]]></Content>  
  43.                             <FuncFlag>0</FuncFlag>  
  44.                             </xml>";               
  45.                 if(!empty$keyword ))  
  46.                 {  
  47.                     $msgType = "text";  
  48.                     $contentStr = "Welcome to wechat world!";  
  49.                     $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  50.                     echo $resultStr;  
  51.                 }else{  
  52.                     echo "Input something...";  
  53.                 }  
  54.   
  55.         }else {  
  56.             echo "";  
  57.             exit;  
  58.         }  
  59.     }  
  60.           
  61.     private function checkSignature()  
  62.     {  
  63.         $signature = $_GET["signature"];  
  64.         $timestamp = $_GET["timestamp"];  
  65.         $nonce = $_GET["nonce"];      
  66.                   
  67.         $token = TOKEN;  
  68.         $tmpArr = array($token$timestamp$nonce);  
  69.         sort($tmpArr);  
  70.         $tmpStr = implode( $tmpArr );  
  71.         $tmpStr = sha1( $tmpStr );  
  72.           
  73.         if$tmpStr == $signature ){  
  74.             return true;  
  75.         }else{  
  76.             return false;  
  77.         }  
  78.     }  
  79. }  
  80.   
  81. ?>  

微信開放第三方API介面,

申請地址: 

https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/interface&token=1865635074&lang=zh_CN

官方提供PHP開發程式碼下載: 點此下載

如果你的微信介面頁面沒有做好,提交儲存的時候,會提示:驗證Token失敗。這個錯誤是因為,你的介面頁面還沒有反饋正確的資訊給微信介面。微信在教程方面還做得不夠成熟,就一個PHP示例,還是有問題的,在下篇文章我會講到這個錯誤在哪。微信官方也沒有跟大家說清楚怎麼才能是token驗證成功。下面我將給出示例告訴大家如何通過token驗證。

譬如:微信介面頁面是http://bbhet.com  預設頁面是weixin.php,我們只需要把weixin.php的程式碼改為, 然後放到你得網站根目錄:

官方下載地址 http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

方法一: 簡單的PHP實現Token驗證

[php]  view plain  copy
  1. <?php  
  2. //1. 將timestamp , nonce , token 按照字典排序  
  3. $timestamp = $_GET['timestamp'];  
  4. $nonce = $_GET['nonce'];  
  5. $token = "你自定義的Token值 用於驗證";  
  6. $signature = $_GET['signature'];  
  7. $array = array($timestamp,$nonce,$token);  
  8. sort($array);  
  9.   
  10. //2.將排序後的三個引數拼接後用sha1加密  
  11. $tmpstr = implode('',$array);  
  12. $tmpstr = sha1($tmpstr);  
  13.   
  14. //3. 將加密後的字串與 signature 進行對比, 判斷該請求是否來自微信  
  15. if($tmpstr == $signature)  
  16. {  
  17.     echo $_GET['echostr'];  
  18.     exit;  
  19. }  



方法二: 封裝類的程式碼實現Token驗證

[php]  view plain  copy
  1. <?php  
  2. /** 
  3.   * wechat php test 
  4.   */  
  5.   
  6. //define your token  
  7. define("TOKEN""weixin");  
  8. $wechatObj = new wechatCallbackapiTest();  
  9. $wechatObj->valid();  
  10.   
  11. class wechatCallbackapiTest  
  12. {  
  13.     public function valid()  
  14.     {  
  15.         $echoStr = $_GET["echostr"];  
  16.   
  17.         //valid signature , option  
  18.         if($this->checkSignature()){  
  19.             echo $echoStr;  
  20.             exit;  
  21.         }  
  22.     }  
  23.   
  24.     public function responseMsg()  
  25.     {  
  26.         //get post data, May be due to the different environments  
  27.         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
  28.   
  29.         //extract post data  
  30.         if (!empty($postStr)){  
  31.                   
  32.                 $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA);  
  33.                 $fromUsername = $postObj->FromUserName;  
  34.                 $toUsername = $postObj->ToUserName;  
  35.                 $keyword = trim($postObj->Content);  
  36.                 $time = time();  
  37.                 $textTpl = "<xml>  
  38.                             <ToUserName><![CDATA[%s]]></ToUserName>  
  39.                             <FromUserName><![CDATA[%s]]></FromUserName>  
  40.                             <CreateTime>%s</CreateTime>  
  41.                             <MsgType><![CDATA[%s]]></MsgType>  
  42.                             <Content><![CDATA[%s]]></Content>  
  43.                             <FuncFlag>0</FuncFlag>  
  44.                             </xml>";               
  45.                 if(!empty$keyword ))  
  46.                 {  
  47.                     $msgType = "text";  
  48.                     $contentStr = "Welcome to wechat world!";  
  49.                     $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr);  
  50.                     echo $resultStr;  
  51.                 }else{  
  52.                     echo "Input something...";  
  53.                 }  
  54.   
  55.         }else {  
  56.             echo "";  
  57.             exit;  
  58.         }  
  59.     }  
  60.           
  61.     private function checkSignature()  
  62.     {  
  63.         $signature = $_GET["signature"];  
  64.         $timestamp = $_GET["timestamp"];  
  65.         $nonce = $_GET["nonce"];      
  66.                   
  67.         $token = TOKEN;  
  68.         $tmpArr = array($token$timestamp$nonce);  
  69.         sort($tmpArr);  
  70.         $tmpStr = implode( $tmpArr );  
  71.         $tmpStr = sha1( $tmpStr );  
  72.           
  73.         if$tmpStr == $signature ){  
  74.             return true;  
  75.         }else{  
  76.             return false;  
  77.         }  
  78.     }  
  79. }  
  80.   
  81. ?>