個人認為掃碼支付比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"];
<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为必填参数!"); }
Native 方式必須需要product_id , 順便再吐槽一下,判斷是否是Native 支付方式,缺少product_id 提示的 後面竟然是 JSAPI 必填product_id ,
唉,真是不能再馬虎了,SDK都可以這麼馬虎的寫寫也沒sei了
在之後就是呼叫統一下單一介面流程了。
函數執行完畢會返回一個 weixin:// 開頭的鏈接,然後再呼叫phpqrcode 程式產生二維碼即可。
支付結果處理頁面仍使用notify.php 檔案中的處理邏輯就可以了。
延伸閱讀:
微信支付之掃碼支付(java版 native原生支付)
微信支付發展流程
微信支付JS-SDK最新版,從0開始
iOS-關於微信支付
以上就介紹了微信支付—— 掃碼支付,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。