微信支付開發的一些問題,獲取到prepayId以後仍然沒法H5調起支付的問題

     微信支付須要咱們在商戶平臺設置一個key的值,用來簽名的關鍵數值git

根據微信簽名的規則,全部提交到服務器的參數,須要使用key1=value1&key2=value2&....github

的這種形式拼接成一個stringA,而後stringA&key=[設置的key]api

而後MD5,就能夠獲得一個signaure,注意參數拼接的時候順序爲從小到大排列。服務器

     這裏其實可使用Java的集合TreeMap輕鬆作到,TreeMap遍歷Key的時候就已是從小到大排好的了微信

可是我在開發的時候犯了一個錯,把key也放進TreeMap裏面了,結果key也按照從小到大排列了微信支付

可是實際上規則要求key是在全部參數拼接以後,再拼接進行Hash的。排序

     微信支付首先第一個流程是獲取prepayid這裏須要進行一次Hash,而後若是你是H5支付的話,開發

那麼H5支付的時候還須要進行第二次Hash,我這裏犯的第二個錯就是string

在獲取prepayid進行第一次Hash的時候,使用H5支付,並無加入key作最後的Hash。域名

結果致使支付的時候,微信客戶端閃了一下支付,而後就取消了。而微信並無給予任何錯誤提示,是很難留意到本身是由於key的問題致使掛起支付失敗的。一開始覺得是微信支付配置那裏的域名問題,結果並非域名問題。微信的js api也已經ready狀態成功了,js ticket也是成功的了。

     後來github上搜索到wechat4j看了人家的H5支付,發現原來是我這邊少了一個key。

    總的來講就兩個失誤,第一個就是涉及微信支付的都必須Hash,Hash的時候最後面必須攜帶key,參與Hash的參數從小到大排序拼接。第二個就是key不參與參數的排序。

相關文章
相關標籤/搜索