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

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

demo == tox tex h5支付 esp alt tsig openid

一、首先先確定H5支付權限已經申請!(需要微信h5支付demo的可以加 851 488 243 備註:h5支付)

二、開發流程

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

2、由商戶後臺向微信支付發起下單請求(調用統一下單接口)註:交易類型trade_type=MWEB

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

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

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

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

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

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

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

三、開發過程

1、配置相關參數

class WechatPayConf
{
	
	const APPID = ‘‘;//APPID
	const MCH_ID = ‘‘;//商戶號
	const KEY = ‘‘;//商戶key
	const NOTIFY_URL = ‘‘;//回調地址

}

 

2、統一下單

接口鏈接

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

請求參數

<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代碼

/**
 * 統一支付接口類
 */
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支付demo微信H5支付demo非微信瀏覽器支付demo微信wap支付