1. 程式人生 > >黃聰:微信h5支付demo微信H5支付demo非微信瀏覽器支付demo微信wap支付

黃聰:微信h5支付demo微信H5支付demo非微信瀏覽器支付demo微信wap支付

一、首先先確定H5支付許可權已經申請!

二、開發流程

1、使用者在商戶側完成下單,使用微信支付進行支付

2、由商戶後臺向微信支付發起下單請求(呼叫統一下單介面)注:交易型別trade_type=MWEB

3、統一下單介面返回支付相關引數給商戶後臺,如支付跳轉url(引數名“mweb_url”),商戶通過mweb_url調起微信支付中間頁

4、中間頁進行H5許可權的校驗,安全性檢查(此處常見錯誤請見下文)

5、如支付成功,商戶後臺會接收到微信側的非同步通知

6、使用者在微信支付收銀臺完成支付或取消支付,返回商戶頁面(預設為返回支付發起頁面)

7、商戶在展示頁面,引導使用者主動發起支付結果的查詢

8,9、商戶後臺判斷是否接到收微信側的支付結果通知,如沒有,後臺呼叫我們的訂單查詢介面確認訂單狀態

10、展示最終的訂單支付結果給使用者

三、開發過程

1、配置相關引數

1 2 3 4 5 6 7 8 9 class WechatPayConf { const APPID = '';//APPID const MCH_ID = '';//商戶號 const KEY = '';//商戶key const NOTIFY_URL = '';//回撥地址 }

2、統一下單

介面連結

URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder

請求引數

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <xml> <appid>wx2421b1c4370ec43b</appid> <attach>支付測試</attach> <body>H5支付測試</body> <mch_id>10000100</mch_id> <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str> <notify_url>http:
//wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url> <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid> <out_trade_no>1415659990</out_trade_no> <spbill_create_ip>14.23.150.211</spbill_create_ip> <total_fee>1</total_fee> <trade_type>MWEB</trade_type> <scene_info>{"h5_info": {"type":"IOS","app_name""王者榮耀","package_name""com.tencent.tmgp.sgame"}}</scene_info> <sign>0CB01533B8C1EF103065174F50BCA001</sign> </xml>

PHP程式碼

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 /** * 統一支付介面類 */ class UnifiedOrder_pub extends Wxpay_client_pub {   function __construct() { //設定介面連結 $this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //設定curl超時時間 $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /** * 生成介面引數xml */ function createXml() { try { //檢測必填引數 if($this->parameters["out_trade_no"] == null) { throw new SDKRuntimeException("缺少統一支付介面必填引數out_trade_no!"."<br>"); }elseif($this->parameters["body"] == null){ throw new SDKRuntimeException("缺少統一支付介面必填引數body!"."<br>"); }elseif ($this->parameters["total_fee"] == null ) { throw new SDKRuntimeException("缺少統一支付介面必填引數total_fee!"."<br>"); }elseif ($this->parameters["notify_url"] == null) { throw new SDKRuntimeException("缺少統一支付介面必填引數notify_url!"."<br>"); }elseif ($this->parameters["trade_type"] == null) { throw new SDKRuntimeException("缺少統一支付介面必填引數trade_type!"."<br>"); }elseif ($this->parameters["trade_type"] == "JSAPI" && $this->parameters["openid"] == NULL){ throw new SDKRuntimeException("統一支付介面中,缺少必填引數openid!trade_type為JSAPI時,openid為必填引數!"."<br>"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號 $this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//終端ip       $this->parameters["nonce_str"] = $this->createNoncestr();//隨機字串 $this->parameters["sign"] = $this->getSign($this->parameters);//簽名 return  $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /** * 獲取prepay_id */ function getPrepayId() { $this->postXml(); $this->result = $this->xmlToArray($this->response); $prepay_id $this->result["prepay_id"]; return $prepay_id; } }

如果呼叫正常,就會得到一個支付url

其它常見錯誤

序號問題錯誤描述解決方法
1 268498465 網路環境未能通過安全驗證,請稍後再試 1. 商戶側統一下單傳的終端IP(spbill_create_ip)與使用者實際調起支付時微信側檢測到的終端IP不一致導致的,這個問題一般是商戶在統一下單時沒有傳遞正確的終端IP到spbill_create_ip導致,詳細可參見客戶端ip獲取指引

2. 統一下單與調起支付時的網路有變動,如統一下單時是WIFI網路,下單成功後切換成4G網路再調起支付,這樣可能會引發我們的正常攔截,請保持網路環境一致的情況下重新發起支付流程

2 268443815 商家引數格式有誤,請聯絡商家解決

1. 當前調起H5支付的referer為空導致,一般是因為直接訪問頁面調起H5支付,請按正常流程進行頁面跳轉後發起支付,或自行抓包確認referer值是否為空


2. 如果是APP裡調起H5支付,需要在webview中手動設定referer,如(
Map<string,string> extraHeaders = new HashMap<string,string>();
extraHeaders.put("Referer", "商戶申請H5時提交的授權域名");//例如 http://www.baidu.com ))

3 268443816 商家存在未配置的引數,請聯絡商家解決 1,當前調起H5支付的域名(微信側從referer中獲取)與申請H5支付時提交的授權域名不一致,如需新增或修改授權域名,請登陸商戶號對應的商戶平臺--"產品中心"--"開發配置"自行配置 

2,如果設定了回跳地址redirect_url,請確認設定的回跳地址的域名與申請H5支付時提交的授權域名是否一致
4 268498468 支付請求已失效,請重新發起支付 統一下單返回的MWEB_URL生成後,有效期為5分鐘,如超時請重新生成MWEB_URL後再發起支付
6 請在微信外開啟訂單,進行支付 H5支付不能直接在微信客戶端內調起,請在外部瀏覽器調起

相關推薦

h5支付demoH5支付demo瀏覽器支付demowap支付

一、首先先確定H5支付許可權已經申請! 二、開發流程 1、使用者在商戶側完成下單,使用微信支付進行支付 2、由商戶後臺向微信支付發起下單請求(呼叫統一下單介面)注:交易型別trade_type=MWEB 3、統一下單介面返回支付相關引數給商戶後臺,如支付跳轉url(引數名“mweb_url”),商

詳解申請h5支付方法,開通h5網頁支付介面(轉)

現在大街小巷的商家都在使用微信支付,但是一些商家使用的是個人微信收款,這個雖然很便利,但是如果你想要資料統計彙總,讓客戶在網路上線上付款,就需要用到微信的h5支付。 微信h5支付 今天子恆老師跟你分享一下,怎麼開通h5支付。 一、 申請開通微信h5支付前要做的準備 並不是每個人都能

URL Scheme,URL喚起

微信URL Scheme 在外部瀏覽器中,可以通過<a href="weixin://">開啟微信APP 也可以通過加一些引數,開啟微信APP裡的指定頁面 <a href="weixin://dl/scan">掃一掃</a> <a href="weixin:/

ffmpeg基本用法(轉)

sca wid cal ner aspect mp4 動態文本 tegra 控制輸出 FFmpeg FFmpeg 基本用法 本課要解決的問題 1.FFmpeg的轉碼流程是什麽? 2.常見的視頻格式包含哪些內容嗎? 3.如何把這些內容從視頻文件中抽取出來? 4.如

FFmpeg 使用指南

留下 時間 下一個 pseudo rdquo tle 全局 什麽 實時 1. ffmpeg 是什麽? ffmpeg(命令行工具) 是一個快速的音視頻轉換工具。 2. ffmpeg 的使用方式 命令行: ffmpeg [全局選項] {[輸入文件選項] -i &lsquo

FFmpeg視頻轉碼技巧之-crf參數(H.264篇)

文件中 one log 它的 忽略 enter center tail vcd 昨天,有個朋友給我出了個難題:他手上有一個視頻,1080P的,49秒,200多兆;要求在確保質量的情況下把文件壓縮到10M以內。 這是什麽概念呢?按照文件大小10M來計算,碼率是:10 x 8

濃縮的才是精華淺析GIF格式圖片的存儲和壓縮(轉)

meid 單獨 圖片分辨率 change 之前 dex 本質 0.11 blog http://www.cnblogs.com/qcloud1001/p/6647080.html 成文迪, 在Web前端摸爬滾打的碼農一枚,對技術充滿熱情的菜鳥,致力為手Q的建設添磚加瓦

PHP數據庫連接失敗--could not find driver 解決辦法

才會 pdo_mysq php 驅動 mysq sql ould 數據庫 對象 數據庫連接失敗could not find driver在調試一個PHP程序時,報了這個錯誤, could not find driver 經過一番查找,結合自己的思考和實踐,終於找到了問題所在

JQUERY判斷操作CHECKBOX選中、取消選中、反選、第二次無法選中的問題

clas 再次 box als 修改 api disable jquer checkbox 用JQuery做CheckBox全選和反選的時候,遇到一個問題。當用JQ控制全選,全取消一次以後,再次點擊全選,發現代碼變了,但是CheckBox沒有處於選中狀態。 $(

Jquery+DataTables插件,如何在ajax調用服務器數據後,自動給tr添加id屬性

jquer ida ted fnr pos sid idt 事件 all http://legacy.datatables.net/usage/callbacks#fnRowCallback 主要通過 fnCreatedRow 事件來實現 var table = $

jquery.bootgrid表格插件有的屬性(visibleInSelection、cssClass、headerCssClass、headerAlign)不能識別的解決辦法

oot div 添加 bsp load scl 不能 大小 jquer 主要是屬性大小寫問題,修改jquery.bootgrid.js文件,在function loadColumns()方法裏面添加下面的語句就好了 data.headerAlign = data.he

iOS $299刀企業證書申請的過程以及細節補充

別人 華夏鄧白氏 details 等等 .com 註意 內容 QQ blog 最近申請了iOS的 299刀企業證書,相關過程有些問題,分享出來,以便後來人參考。申請的過程我主要參考了別人以前的文章,鏈接如下:1、https://developer.apple.com/cn/

AngularJS最理想開發工具WebStorm

java tool row scl ng-repeat data- oom repos href Aug 29, 2013 Tags: angularangular.jsangularjswebstorm Comments: 23 Comments

通過 itms:services://? 在線安裝ipa ,跨過appstore

ins with 安裝 .get 解決方法 str war item 點擊 1.需要一個html文件,引導下載用戶在線安裝ipa <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">&

JS數學計算精度修正

function 浮點數 turn 計算 filesize add follow fun his 問題描述 如果我問你,4330.61乘以100等於多少,我猜你肯定跟我說:“肯定是 433061”啊! 是啊,要我我也是這麽回答,來來來我們

OTP動態密碼_Java代碼實現

-c name 好的 動態口令 comm final 並不是 bsp down OTP認知 動態口令(OTP,One-Time Password)又稱一次性密碼,是使用密碼技術實現的在客戶端和服務器之間通過共享秘密的一種認證技術,是一種強認證技術,是增強目前靜態口令

史上最詳細的kali安裝教程沒有之一

ner 沒有 操作系統 你是 著作權 如圖所示 鏈接 class 區域 首先在vm裏面新建虛擬機,直接選擇典型,然後下一步。 1 2 然後到了這一步,選擇中間的安裝程序光盤鏡像文件,然後去文件裏面

mysql主從配置(清晰的思路)

   mysql主從配置。鄙人是在如下環境測試的:   主資料庫所在的作業系統:win7   主資料庫的版本:5.0   主資料庫的ip地址:192.168.1.111   從資料庫所在的作業系統:linux   從資料的版本:5.0   從資料庫的ip地址:192.168.1.112 介紹完

Mysql主從配置,實現讀寫分離

大型網站為了軟解大量的併發訪問,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器扛,如此多的資料庫連線操作,資料庫必然會崩潰,資料丟失的話,後果更是 不堪設想。這時候,我們會考慮如何減少資料庫的聯接,一方面採用優秀的程式碼框架,進行程式碼的優

浮動視窗程式碼(帶關閉按鈕+全屏漂浮)

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>帶關閉按鈕的浮動視窗程式碼(全屏漂浮)</title></head