關於微信H5公衆號支付咱們踩過的坑(get_brand_wcpay_request:fail)

最近公司有了一個新的需求,學生在購買課時的時候,須要讓家長或者朋友代付。這樣的話我首先想到的就是微信的H5支付(微信內置瀏覽器調用支付模塊)。當時想用這個支付的緣由由於是前端代碼十分簡單。。 
然而偏偏是由於本身選擇了這個方法,讓本身連續兩天陷入了困境。 
下面是正文跟代碼截圖 
首先我們先來看下H5的支付文檔說明 php


微信官方的H5支付文檔
我們新手或者寫過微信支付的童鞋都不難看懂 其實十分簡單,須要的入參跟說明一目瞭然。可是H5支付的大前提很重要,就是須要用戶的openid,否則你在調用微信統一下單的時候(其中交易類型:trade_type = JSAPI)它們會返回你說確實openid這個參數。問題是這個參數咱們從哪來呢? 
我直接搜一些資料貼給你們; 
據我所知目前有兩個方式: 
1.微信OAuth網頁受權。服務號(訂閱號不行)能夠在公衆號後臺開通微信OAuth網頁受權,用戶在網頁中進行受權操做時你會獲得用戶的openid 
2.接入服務器。微信容許接入服務器進行開發,配置好接入服務器(參考微信的開發文檔)後,用戶發給公衆號的消息所有會以一個xml表單的形式被轉發到你的服務器上。 
我使用的是第一種方式,其實很簡單,你們能夠參考微信的demo微信H5demo 
其中參考example/WxPay.JsApiPay.php裏面的GetOpenid方法。 
這樣獲取到openid再去調用統一下單接口就沒問題,若是再有其餘問題,能夠打日誌看微信返回錯誤,通常這個地方的返回錯誤比較明顯,很容易查到緣由。最坑也是最淚崩的是之後的錯誤類型。 
咱們看到咱們調用統一接口成功以後會返現微信返回的結果裏面有這些東西 前端


統一下單以後咱們拿到的東西 


從結果裏面咱們不難看出調用微信支付的demo裏面要的幾個參數咱們所有有了,包括sign簽名(這是一個坑)。這樣的話 咱們只須要把這些參數返回給客戶端直接組合數據應該就能成功了。 
此時咱們把數據返回給客戶端 ,客戶端組合數據以下 瀏覽器


前端代碼

咱們測試以後發現。微信返回的是支付簽名驗證失敗,通常通用錯誤類型會返回get_brand_wcpay_request:fail。這個時候 我又去看了一下文檔,那個時間戳是十位,js這種方法是13位精確到毫秒的,因而我切割字符串,得到十位時間戳,這個時候再去測試仍然跟上次錯誤同樣。因而我慢慢的冷靜下來。開始在網上瘋狂查資料。查找問題在哪?網上的答案通常是支付受權目錄的問題,其實這個我早就設置好了的。沒有問題的。因而我又一遍的啃起了他的官方文檔,結合他們的demo從新理了一遍思路。原來文檔裏面幾個參數中只有package這個參數會用統一下單返回的數據,真是中國文化博大精深啊,玩文字遊戲啊。 
因而我猜測那麼統一接口返回的sign也不能用樓。難不成所謂的sign是統一下單返回的結果從新用md5去生成麼? 
我只能去測試驗證個人結論了。很少說,貼代碼 服務器


 


這組代碼是我從統一訂單返回結果以後 按照文檔的說明,(大小寫別寫錯),從新生成了sign,而後返回客戶端,包括時間戳也返回。這樣的話再去測試,它不會再報get_brand_wcpay_request:fail。它會給我報了另一個錯誤,提示我說當前頁面爲註冊,同時彈了url出來(這一步,若是童鞋在公衆號設置。微信支付-》支付受權目錄)填寫過的話,應該就沒其餘問題了。能夠忽略。 
基本上H5內置瀏覽器調用微信支付模塊就是這些東西。主要的坑在於簽名。微信返回的錯誤類型是最坑爹的,全是通用的,根本不能快速定位。 微信

源碼免費下載地址:http://www.jinhusns.com/Products/Download測試

相關文章
相關標籤/搜索