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

来源:http://www.cnblogs.com/yihoudangxian/archive/2017/10/19/7692191.html
-Advertisement-
Play Games

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


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


微信官方的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

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、java堆得Young區由哪些組成: Java堆由Perm區和Heap區組成,Heap區由Old區和New區(也叫Young區)組成,New區由Eden區、From區和To區(Survivor)組成。 2、實現ContentProvider需要實現哪些方法: insert、delete、quer ...
  • #菜單 pod 'LGSideMenuController' # 刷新 pod 'MJRefresh' # 網路請求 pod 'AFNetworking', '~> 3.0' # 圖片緩存 pod 'SDWebImage', '~> 4.0' # 數據解析 pod 'MJExtension' # 網 ...
  • CVPixelBufferRef YUV NV12 pixelFormatType 創建 數據填充 數據讀取 CGImageRef to CVPixelBufferRef ...
  • 2017.10.20 之前參加一個大三學長的創業項目,做一個智能的車鎖App,用到嵌入式等技術,App需要藍牙、實時位置等技術,故查了幾篇相關技術文章,以此參考! //先說說如何開啟藍牙設備和設置可見時間: private void search() { BluetoothAdapter adapt ...
  • 實現目標 先來一張微信功能截圖看看要做什麼 其實就是有一個目的地,點擊目的地的時候彈出可選擇的應用進行導航。 大腦動一下,要實現這個功能應該大體分成兩步: 底部菜單這裡用PopupWindow來做。 實現 1、菜單顯示 PopupWindow支持傳入view進行彈出展示,所有我們直接寫一個菜單佈局, ...
  • 直奔主題 第一步:為AndroidStudio安裝Kotlin插件 線上安裝步驟:File—>Settings—>Plugins—>Install JetBrains plugin…出現以下界面,選中Kotlin 點擊右邊的Install(因為我的已經安裝了所以顯示的是Update升級) 然後就是漫 ...
  • 枚舉增強程式的可讀性,用法上還是需要註意的 1.C語言的寫法 enum XMPPReconnectFlags { kShouldReconnect = 1 << 0, // If set, disconnection was accidental, and autoReconnect may be ...
  • 首先,在正式使用Masonry之前,我們先來看看在xib中我們是如何使用AutoLayout 從圖中我們可以看出,只要設置相應得局限,控制好父視圖與子視圖之間的關係就應該很ok的拖出你需要的需求。這裡就不詳細講解具體拖拽的方法..... 然後,我們按著上圖的屬性來看看如何簡單得使用Masonry 首 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...