中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用PHP怎么實現微信公眾號驗證Token

發布時間:2021-05-27 16:52:25 來源:億速云 閱讀:655 作者:Leah 欄目:開發技術

使用PHP怎么實現微信公眾號驗證Token?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。


/*這個是你自定義的令牌,圖片里面Token的位置*/
define("TOKEN", "這個是你自定義的令牌");
/*初始化當前的類*/
$wechatObj = new wechatCallbackapiTest();
/*開始驗證程序*/
$wechatObj->valid();
/**
 * Class WXApiVerify
 */
class WXApiVerify
{
  /**
   * 檢測函數輸出
   */
  public function valid()
  {
    $echoStr = $_GET['echostr'];
    if($this->checkSignature()){
      echo $echoStr; #坑點,看下面的常見坑介紹
      exit; #一定要停止php運行,避免產生不必要的字串符
    }
  }

  /**
   * 前面檢測
   * @return bool
   */
  private function checkSignature()
  {
    #注意: 這里可以不用檢驗$_GET參數的有效性,因為微信一定會傳相關的參數給你的服務器的,你直接開啟驗證模式即可。
    $signature = $_GET['signature'];
    $timestamp = $_GET['imestamp'];
    $nonce = $_GET['nonce'];
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr === $signature ){
      return true;
    }else{
      return false;
    }
  }
}

Laravel的代碼怎么寫

首先,強勢插個口播(在使用過TP5,CodeIgniter, CakePHP, Yii, Slim之后,我認為Laravel是目前來說最好的PHP框架,不接受其他任何意見。)
其次,驗證代碼上面是跟純PHP大同小異的,唯一的區別是在你處理POST請求的時候一定要讓Laravel不要檢測CSFR Token,否則會出現錯誤。

首先,設置路由:

Route::any('wx', [
  'uses' => 'WeChatApp@checkSignature'
]);
#坑點,看下面的常見坑介紹

其次,取消Laravel的CSFR檢查:

#去到你的Middlewarel里面找到VerifyCsrfToken.php然后插入下面代碼:
protected $except = [
    'wx', #注意這個是你在第一步設置的路由路徑,不接受單獨的文件路徑,太Low逼了
  ];

最后,上酸菜:

#在你對應的Controller里面加入以下函數
  public function checkSignature( Request $request ) {
    $input = $request->all();
    # 一定要抓取4個參數
    $echoStr  = $input[ "echostr" ];
    $signature = $input[ "signature" ];
    $timestamp = $input[ "timestamp" ];
    $nonce   = $input[ "nonce" ];
    # 微信官方驗證方式
    $token = env( 'TOKEN' ); #或者用config()函數
    $tmpArr = [ $token, $timestamp, $nonce ];
    sort( $tmpArr, SORT_STRING );
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    
    # 打印返回結果
    if( $tmpStr == $signature ){
      return response($echoStr);
    } else{
      return response();
    }
  }

常見的坑是什么

文檔坑。有些人看過官方文檔之后直接就上代碼了,缺忽略了里面的一個參數echostr 隨機字符串 而這個恰恰是驗證服務器的關鍵點,你要打印這個返回給微信才能通過驗證。但是官方文檔說的不夠重點。

Laravel路由坑。一定要設置請求為any這樣包括(GET跟POST)

Laravel還有一個測試的坑,就是如果你的APP_DEBUG=false如果不是false的話可能會造成拋出多余的字串導致驗證失敗。

要學會使用微信官方測試工具 https://mp.weixin.qq.com/debug/ 選擇消息接口測試文本消息接口就行。其他的可以看圖說話

使用PHP怎么實現微信公眾號驗證Token

關于使用PHP怎么實現微信公眾號驗證Token問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漠河县| 鹤峰县| 宝清县| 南靖县| 沙河市| 泽库县| 敦化市| 六安市| 嵩明县| 高阳县| 萍乡市| 内江市| 遂宁市| 泸定县| 探索| 呼玛县| 济阳县| 兴文县| 乌鲁木齐市| 闽清县| 阿坝县| 班戈县| 崇州市| 宾川县| 惠东县| 夏津县| 杭锦后旗| 若羌县| 鄂托克旗| 运城市| 邢台县| 抚顺市| 阜宁县| 宁陕县| 龙南县| 汉中市| 南投市| 邹城市| 嘉荫县| 延安市| 辽中县|