PHP支付介面教程,詳解微信支付(一)
微信支付
三大支付方式裡面,最複雜也是坑最多的非微信支付莫屬,我們從微信開始講。
常見的微信支付種類有下列四種:
- 微信JS支付,也稱公眾號內支付,使用場景就是微信裡面的H5商城,在微信以外的地方無法使用
- 微信PC支付,也稱掃碼支付,使用場景是PC端,注意這裡並不是“原生掃碼支付”
- 微信APP支付,使用場景是原生或者混合APP
- 微信WEB支付,場景是微信外的觸屏網站,這個介面一直都有,只是最近才開放出來可以讓普通公司申請,這個如果有機會的話也會講一講
從介面申請階段開始,四種方式就各有各的坑,這裡不得不感謝一下騰訊,替我們增加了很多工作量。
微信JS支付
第一階段:介面申請
因為是面向開發人員的教程,所以具體的申請條件、如何申請等內容並不會講的太詳細,只需要注意下面幾點即可:
- 請領導把你的微訊號設定為公眾號的臨時管理員
- 把公眾號和商戶平臺的賬號密碼拿到手
- 微信平臺需要自己去重檢視APPSECRET,這個過程需要公眾號管理員授權
- 商戶平臺需要自己去配置KEY,這個過程會有兩條驗證簡訊發到領導手機上
總之第一階段最後需要把這四個資料準確的拿到手:
- APPID——登入公眾平臺檢視
- APPSECRET——登入公眾平臺申請重置之後檢視
- MCHID——商戶平臺的ID
- KEY——商戶平臺自己設定的KEY
第二階段:配置
這裡指的配置是配置公眾平臺,配置有必要詳細的說一下,現在各種現成的專案和整合支付程式碼比比皆是,可是你就是用不起來,這個時候千萬不要花時間去審查程式碼,是你的配置出了問題。讓我們從原理上來理解一下:
業務域名、 JS介面安全域名、網頁授權域名
這三個引數在同一個頁面進行配置,配置方法也相同,直接填寫域名即可。如果你遇到的問題是REDIRECT_URI錯誤,那多半就是這裡出現了問題。
支付授權目錄
這裡一定要填寫實際發起支付的頁面的URL,並且以斜槓結尾。那麼就有三個問題:
1. 我完全沒搞懂實際發起支付的是哪個URL
2. 我並不清楚什麼叫斜槓結尾
3. 我配置對了為什麼沒用
- 在獲取OPENID的過程中會有一次重定向,一般是重定向回本頁面,但也有部分專案不會這麼做,比如ecshop,就被重定向到了別的頁面,所以實際發起頁面也就變成了別的頁面。
- 斜槓結尾就是把你的URL從右邊開始數,碰到第一個斜槓,把你數過的部分刪掉,剩下的就是正確的配置內容。當然還有廣大ThinkPHP3.2使用者,你們的引數用斜槓來傳,就意味著你們在支付頁面只能帶一個引數,否則怎麼配置都不會對的。
- 有可能你壓根沒配置對,請參考前兩條。如果你確定配置對了,請去喝一杯咖啡,這個配置有時候不會馬上生效。
第三階段:除錯
倒一杯咖啡,開啟你心愛的程式碼編輯器,按照這6個步驟來,不要浮躁,你將會再次感謝騰訊……
把你在第一階段準備的引數放到專案中(運氣好的話此時你已經完成了開發)
- 測試CODE有沒有獲取到
- 測試OPENID有沒有獲取到
- 測試預支付訂單是否正常
- 測試JS是否正常
- 測試回撥資料是否正常
把踩過的坑或者套路與大家分享一下:
在官方DEMO中,JsApiPay類下面GetOpenid方法中第4行,
$_SERVER[`PHP_SELF`]
和
$_SERVER[`QUERY_STRING`]
之間少了一個問號。導致的問題就是有一些用GET傳參的同學,OPENID死活獲取不到。
訂單名稱裡面不能含有&,暫時只發現這個符號會使得支付發起失敗
簽名錯誤,一般是再去檢查引數,特別是一些看不到的字元可能混在引數中,最好不要懷疑簽名方法有問題。
流程中有4個左右的地方會簽名,或者驗證簽名,一定要確保所使用的KEY都是正確的。
在除錯JS的時候用
alert(res.err_code+res.err_desc+res.err_msg)
把錯誤彈出來
測試回撥的時候用
$GLOBALS[`HTTP_RAW_POST_DATA`]
來接收微信的通知,做好是接收到就存到資料庫裡,先確保接收到了,再去調簽名和業務邏輯。
寫在最後
操作類的內容和理論類的內容是分開的,例如本文就是操作類的,今後將會有探討JS支付原理或者公私鑰原理的文章,但不是現在,因為不想開留太多坑。
在文章節奏的把控上略顯得有些不足,不過我會盡量不出現大篇幅程式碼,多分享經驗乾貨,多以初學者的角度行文。如果有問題歡迎留言討論,希望能對大家有幫助!
以上內容屬於作者原創,特此宣告,如需轉載,請取得同意
相關文章
- PHP-Laravel支付寶支付和微信支付PHPLaravel
- PHP微信支付類V3介面PHP
- php微信支付介面開發的實現程式PHP
- PHP微信支付開發PHP
- PHP處理-微信支付PHP
- 微信支付V3微信公眾號支付PHP教程(thinkPHP5公眾號支付)/JSSDK的使用PHPJS
- PHP微信支付統一下單PHP
- XorPay 個人支付平臺【支援個人微信支付和支付寶支付介面】
- php實現微信企業號支付個人的方法詳解PHP
- 微信jsapi支付 退款介面JSAPI
- PHP接入微信支付分PHP
- 微信開發超市全反系統,微信支付刷卡支付,微信介面簡單配置!
- 微信支付介面開發過程
- 微信公眾號支付實現詳解(前端)前端
- PHP實現個人免簽約微信支付介面原理+原始碼PHP原始碼
- 微信支付開發(2) 掃碼支付模式一模式
- 支付寶線上支付介面開發教程與總結
- 微信支付,支付寶支付,銀聯支付——三大支付總結
- 支付寶線上支付介面
- php 微信開發之 微信支付 v3 配置PHP
- 微信App支付APP
- PHPcms微信支付PHP
- 微信企業號支付個人php實現PHP
- Django呼叫支付寶支付介面Django
- 基於H5的微信支付開發詳解H5
- 微信支付技術解決方案
- nodejs微信支付之掃碼支付NodeJS
- 微信開發 微信支付
- 一個PHP檔案搞定微信支付系列之企業付款PHP
- 一個PHP檔案搞定微信支付系列之現金紅包PHP
- Java接入支付寶支付教程Java
- Laravel 搞定支付寶和微信掃碼支付Laravel
- Android 接入微信支付寶支付Android
- PHP支付寶支付開發流程PHP
- 微信支付WxpayAPI_php_v3 錯誤修改APIPHP
- 微信支付開發
- 微信JSAPI支付JSAPI
- pay-spring-boot 開箱即用的Java支付模組,整合支付寶支付、微信支付SpringbootJava