首頁 >php框架 >ThinkPHP >避雷! thinkphp整合企業號的坑

避雷! thinkphp整合企業號的坑

藏色散人
藏色散人轉載
2020-07-28 14:03:011901瀏覽

下面由thinkphp框架教學專欄給大家分享thinkphp整合企業號的坑,希望對需要的朋友有幫助!

避雷! thinkphp整合企業號的坑

ThinkPHP 使用微信企業號回調的坑

最近在做企業號回調的接口,之前做過幾個企業號的應用了,每次接入到Thinkphp都報各種各樣的錯誤,算哥倒霉,該踩的不該踩的坑全踩了。

這次掉坑差點就放棄了,開發過企業號的都知道,企業號回調會經過一個加密的演算法,要求開發者對此進行解密才能開啟回調,就是個這個回調,微信的錯誤提示極度霸道,不管你什麼錯,就一句話「 echostr校驗失敗,請您檢查是否正確解密並輸出明文echostr」。最起碼應該告訴一下開發者,微信收到的回傳長度是多少,也好與自己的輸出進行校驗,如果長度都不一致,就更不用說內容了。

如果你跟我一樣用了tp框架,那你要留意了,這篇文章以Thinkphp3.2.3 php版本5.3為例

坑1

  • 下載官方的處理介面的範例,放在Thinkphp>Library>Wechat(自建)目錄下

  • 修改WXBizMsgCrypt.php為WXBizMsgCrypt.class.php

  • ##在WXBizMsgCrypt中宣告命名空間namespace Wechat;

  • 在你需要的控制器中引入類別use Wechat WXBizMsgCrypt;




#之後就是使用官方的sample copy進你的專案簡單修改下就算整合完成了,過程挺簡單的,但是!在PHP5.3之前建構函數的寫法和PHP5.3之後有變化,建構函數不能再以類別名稱當作函數名稱來命名,必須要使用__construct宣告一個建構函數,也就是說用官方的例子來整合是一定會報錯的,當然前提是你用的也是PHP5.3之後的版本。

所以還需要############修改WXBizMsgCrypt檔案中WXBizMsgCrypt函式名,改為__construct#############修改pkcs7Encoder檔案中pkcs7Encoder函式名,改為__construct############大功告成,可能不適用於低版的Thinkphp 或php5.3以下,我沒做過其他版本的測試######坑2######填寫企業號回呼資訊點擊儲存不成功時,多點幾次真的有奇效! ###這不是玩笑~~因為企業號發給開發者的隨機簽名裡面,很有可能包含號,當你get url的時候,php會自動把號過濾為空格,導致發來的簽名和實際地址簽章不一致,signature驗證就不會通過了,會報40001: 簽章驗證錯誤。 ###當然,你也可以把空格再還原為 號,這樣能確保與發送的簽名地址一致。 (我覺得這是微信回呼的一個小bug,簽名裡不應該帶有這樣特殊意義的符號)#######坑3######全部都通過驗證了,也返回微信要的明文了,還是不通過,what?印到本地看看,也沒錯啊,百度我都搜遍了,什麼去掉文件BOM頭,改header頭,通通都試過了,我真的的確確解密了,而且把解密的結果返回給了微信,還是不行啊,WTF。 。 ######真的回傳了明文麼?你以為印到本地是對的麼?錯了。有東西叫緩衝區###緩衝區的東西是不會印到本地的,微信在存取你網址的時候,先get到的東西是緩衝區內容而不是你輸出的明文。所以,要先清除緩衝區,辦法是在echo前使用ob_clean(),估計其他框架也是一樣。 ######這三個算是比較大的坑吧,網路上的資料也少得可憐,希望能幫到大家。 ######

以上是避雷! thinkphp整合企業號的坑的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除