微信支付
三大支付方式里面,最復(fù)雜也是坑最多的非微信支付莫屬臂容,我們從微信開始講科雳。
常見的微信支付種類有下列四種:
- 微信JS支付,也稱公眾號內(nèi)支付脓杉,使用場景就是微信里面的H5商城糟秘,在微信以外的地方無法使用
- 微信PC支付,也稱掃碼支付球散,使用場景是PC端尿赚,注意這里并不是“原生掃碼支付”
- 微信APP支付,使用場景是原生或者混合APP
- 微信WEB支付蕉堰,場景是微信外的觸屏網(wǎng)站凌净,這個接口一直都有,只是最近才開放出來可以讓普通公司申請屋讶,這個如果有機會的話也會講一講
從接口申請階段開始冰寻,四種方式就各有各的坑,這里不得不感謝一下騰訊皿渗,替我們增加了很多工作量斩芭。
微信JS支付
第一階段:接口申請
因為是面向開發(fā)人員的教程,所以具體的申請條件乐疆、如何申請等內(nèi)容并不會講的太詳細划乖,只需要注意下面幾點即可:
- 請領(lǐng)導(dǎo)把你的微信號設(shè)置為公眾號的臨時管理員
- 把公眾號和商戶平臺的賬號密碼拿到手
- 微信平臺需要自己去重查看APPSECRET,這個過程需要公眾號管理員授權(quán)
- 商戶平臺需要自己去配置KEY挤土,這個過程會有兩條驗證短信發(fā)到領(lǐng)導(dǎo)手機上
總之第一階段最后需要把這四個數(shù)據(jù)準(zhǔn)確的拿到手:
- APPID——登錄公眾平臺查看
- APPSECRET——登錄公眾平臺申請重置之后查看
- MCHID——商戶平臺的ID
- KEY——商戶平臺自己設(shè)置的KEY
第二階段:配置
這里指的配置是配置公眾平臺琴庵,配置有必要詳細的說一下,現(xiàn)在各種現(xiàn)成的項目和集成支付代碼比比皆是,可是你就是用不起來细卧,這個時候千萬不要花時間去審查代碼尉桩,是你的配置出了問題。讓我們從原理上來理解一下:
業(yè)務(wù)域名贪庙、 JS接口安全域名蜘犁、網(wǎng)頁授權(quán)域名
這三個參數(shù)在同一個頁面進行配置,配置方法也相同导披,直接填寫域名即可屈扎。如果你遇到的問題是REDIRECT_URI錯誤,那多半就是這里出現(xiàn)了問題撩匕。
支付授權(quán)目錄
這里一定要填寫實際發(fā)起支付的頁面的URL模蜡,并且以斜杠結(jié)尾。那么就有三個問題:
1. 我完全沒搞懂實際發(fā)起支付的是哪個URL
2. 我并不清楚什么叫斜杠結(jié)尾
3. 我配置對了為什么沒用
- 在獲取OPENID的過程中會有一次重定向扁凛,一般是重定向回本頁面忍疾,但也有部分項目不會這么做,比如ecshop谨朝,就被重定向到了別的頁面卤妒,所以實際發(fā)起頁面也就變成了別的頁面。
- 斜杠結(jié)尾就是把你的URL從右邊開始數(shù)字币,碰到第一個斜杠则披,把你數(shù)過的部分刪掉,剩下的就是正確的配置內(nèi)容洗出。當(dāng)然還有廣大ThinkPHP3.2用戶士复,你們的參數(shù)用斜杠來傳,就意味著你們在支付頁面只能帶一個參數(shù)共苛,否則怎么配置都不會對的判没。
- 有可能你壓根沒配置對蜓萄,請參考前兩條隅茎。如果你確定配置對了,請去喝一杯咖啡嫉沽,這個配置有時候不會馬上生效辟犀。
第三階段:調(diào)試
倒一杯咖啡,打開你心愛的代碼編輯器绸硕,按照這6個步驟來堂竟,不要浮躁魂毁,你將會再次感謝騰訊……
把你在第一階段準(zhǔn)備的參數(shù)放到項目中(運氣好的話此時你已經(jīng)完成了開發(fā))
- 測試CODE有沒有獲取到
- 測試OPENID有沒有獲取到
- 測試預(yù)支付訂單是否正常
- 測試JS是否正常
- 測試回調(diào)數(shù)據(jù)是否正常
把踩過的坑或者套路與大家分享一下:
在官方DEMO中,JsApiPay類下面GetOpenid方法中第4行出嘹,
$_SERVER['PHP_SELF']
和
$_SERVER['QUERY_STRING']
之間少了一個問號席楚。導(dǎo)致的問題就是有一些用GET傳參的同學(xué),OPENID死活獲取不到税稼。
訂單名稱里面不能含有&烦秩,暫時只發(fā)現(xiàn)這個符號會使得支付發(fā)起失敗
簽名錯誤,一般是再去檢查參數(shù)郎仆,特別是一些看不到的字符可能混在參數(shù)中只祠,最好不要懷疑簽名方法有問題。
流程中有4個左右的地方會簽名扰肌,或者驗證簽名抛寝,一定要確保所使用的KEY都是正確的。
在調(diào)試JS的時候用
alert(res.err_code+res.err_desc+res.err_msg)
把錯誤彈出來
測試回調(diào)的時候用
$GLOBALS['HTTP_RAW_POST_DATA']
來接收微信的通知曙旭,做好是接收到就存到數(shù)據(jù)庫里盗舰,先確保接收到了,再去調(diào)簽名和業(yè)務(wù)邏輯夷狰。
寫在最后
操作類的內(nèi)容和理論類的內(nèi)容是分開的岭皂,例如本文就是操作類的,今后將會有探討JS支付原理或者公私鑰原理的文章沼头,但不是現(xiàn)在爷绘,因為不想開留太多坑。
在文章節(jié)奏的把控上略顯得有些不足进倍,不過我會盡量不出現(xiàn)大篇幅代碼土至,多分享經(jīng)驗干貨,多以初學(xué)者的角度行文猾昆。如果有問題歡迎留言討論陶因,希望能對大家有幫助!
以上內(nèi)容屬于作者原創(chuàng)垂蜗,特此聲明楷扬,如需轉(zhuǎn)載,請取得同意