首頁 >後端開發 >php教程 >微信支付—— 掃碼支付

微信支付—— 掃碼支付

WBOY
WBOY原創
2016-08-08 09:25:141296瀏覽

個人認為掃碼支付比Jsapi支付從開發和使用上要順心的多。掃碼支付不用擔心是PC端還是行動瀏覽器還是微信客戶端存取的問題,產生一個二維碼,掃描付款即可。

一些設定和程式碼SDK以及SDK存在的錯誤可以參考上一篇 微信支付的文章

微信支付 —— 公眾號支付代碼詳解


友情提示以下內容實在簡陋 - -# 如果你跑通了 Jsapi支付,那麼掃碼支付其實沒什麼太特別的。

掃碼支付發起支付的文件在 example SDK 中的 native.php 檔案中

掃碼支付有兩種支付方式,在使用掃碼支付之前必須配置 支付回呼URL具體配置 參考

微信開發者文件 http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_3

兩種支付方式的介紹 

模式1:http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4

模式2:http://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5


其實模式2 不需要設定回呼URL 但是一旦你修改了支付配置,而且要使用掃碼支付就必須勾選Native原生支付,此時回呼URL也就是必填項了

但我只想用模式2 ,模式2 用不到回呼URL,只好胡亂寫了個以後使用模式1可能使用的URL了。

程式碼分析:

掃碼支付模式1


$notify = new NativePay();
$url1 = $notify->GetPrePayUrl("123456789");
主要看一下 掃碼支付模式2



$input = new WxPayUnifiedOrder();
$input->SetBody("test");
$input->SetAttach("test");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
$input->SetTrade_type("NATIVE");
$input->SetProduct_id("123456789");
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];

QR 圖碼:



<img alt="模式二扫码支付" src="http://paysdk.weixin.qq.com/example/qrcode.php?data=<?php echo urlencode($url2);?>" style="width:150px;height:150px;"/>
首先實例化類別WxPayUnifiedOrder,然後設定一些付款所需的參數,並將所需參數傳給函數 GetPayUrl()


函數定義在 example/Wxpay.NativePay.php 檔案中


public function GetPayUrl($input)
	{
		if($input->GetTrade_type() == "NATIVE")
		{
			$result = WxPayApi::unifiedOrder($input);
			return $result;
		}
	}

$result = WxPayApi::unifiedOrder($input);
此處程式碼即為 呼叫統一下單介面 ,程式碼位於 檔案 lib/WxPay.Api.php 其中部分程式碼



if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()){
			throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
		}
		if($inputObj->GetTrade_type() == "NATIVE" && !$inputObj->IsProduct_idSet()){
			throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
		}

判斷付款方式,如果是 JsApi 方式需要Openid


Native 方式必須需要product_id , 順便再吐槽一下,判斷是否是Native 支付方式,缺少product_id 提示的 後面竟然是 JSAPI 必填product_id ,

唉,真是不能再馬虎了,SDK都可以這麼馬虎的寫寫也沒sei了

在之後就是呼叫統一下單一介面流程了。


函數執行完畢會返回一個 weixin:// 開頭的鏈接,然後再呼叫phpqrcode 程式產生二維碼即可。

支付結果處理頁面仍使用notify.php 檔案中的處理邏輯就可以了。


延伸閱讀:

     微信支付之掃碼支付(java版 native原生支付)
     微信支付發展流程
     微信支付JS-SDK最新版,從0開始
     iOS-關於微信支付

以上就介紹了微信支付—— 掃碼支付,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn