最近折騰微信掃碼支付,看了微信官方文檔,找了很多網頁,發現和文檔/demo不匹配,現在自己算是弄出來了(文件名稱有所更改),貼出來分享一下 一.將有用的官方lib文件和使用的相關文件放置到vendor當中 二.調用同一支付介面 WechatController ...
最近折騰微信掃碼支付,看了微信官方文檔,找了很多網頁,發現和文檔/demo不匹配,現在自己算是弄出來了(文件名稱有所更改),貼出來分享一下
一.將有用的官方lib文件和使用的相關文件放置到vendor當中
二.調用同一支付介面
WechatController
//調用同一支付介面
public function native($v_oid='',$v_amount=''){
ini_set('date.timezone','Asia/Shanghai');
error_reporting(E_ERROR);
//添加相關的類文件
vendor('Wxpay.WxPayApi');
vendor('Wxpay.log');
vendor('Wxpay.NativePay');
//初始化日誌
$logHandler= new \CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = \Log::Init($logHandler, 15);
//接受訂單信息
if(trim($v_oid)<>"") //判斷是否有傳遞訂單號
{
$v_oid = trim($v_oid);
}
else
{
$this->error('訂單號為空',U('User/index'));
exit;
}
$v_amount = trim($v_amount*100); //支付金額
//調用同一支付介面
$notify = new \NativePay();
$input = new \WxPayUnifiedOrder();
//商品描述----------------------------需要參數傳遞/統一信息
$input->SetBody("商品描述位置");
//附加數據
$input->SetAttach("附加數據位置");
//商戶訂單號
$input->SetOut_trade_no($v_oid);
//總金額
$input->SetTotal_fee($v_amount);
//開始時間
$input->SetTime_start(date("YmdHis"));
//結束時間
$input->SetTime_expire(date("YmdHis", time() + 600));
//商品標記
$input->SetGoods_tag("商品標記位置");
//非同步通知地址,不能攜帶任何參數
$input->SetNotify_url(U('NotifyProcess'));
//交易類型
$input->SetTrade_type("NATIVE");
//商品id
$input->SetProduct_id("123456789");
//獲取同一支付介面結果
$result = $notify->GetPayUrl($input);
$url2 = $result["code_url"];
$this->assign('data',urlencode($url2));
$this->assign('v_oid',$v_oid); $this->assign('v_amount',$v_amount/100); $this->display();}三.生成二維碼
三.微信支付生成二維碼
public function qrcode(){
error_reporting(E_ERROR);
vendor('Wxpay.phpqrcode.phpqrcode');
$url = $_GET["data"];
\QRcode::png($url);
}
四.非同步處理
具體處理流程和方式按個人需求
//微信非同步查詢訂單機制
public function Queryorder($transaction_id)
{
$input = new \WxPayOrderQuery();
$input->SetTransaction_id($transaction_id);
$result = \WxPayApi::orderQuery($input);
\Log::DEBUG("query:" . json_encode($result));
if(array_key_exists("return_code", $result)
&& array_key_exists("result_code", $result)
&& $result["return_code"] == "SUCCESS"
&& $result["result_code"] == "SUCCESS")
{
return true;
}
return false;
}
五.再來個form表單展示二維碼
<form action="" method="post" id="myForm-table">
<h2>訂單信息</h2>
<div class="orderNumber">
<p class="a">訂單號:"{$v_oid}"</p>
<p class="b">
<span class="left">應付金額:<strong><em>{$v_amount}</em>元</strong></span>
<span class="right">付款後,飛行之翼客服會與您聯繫,如有問題請咨詢24小時飛行熱線 400-700-2016</span>
</p>
</div>
<h2>微信支付</h2>
<img src="{:U('qrcode')}?data={$data}" alt="微信掃碼">
<div class="order-submit"><a href="javascript:history.go(-1);" class="submitOrder Order">返回其他支付方式</a></div>
</form>
成功的圖就不附上了,這是我遇到的問題,由於要重構,所以比較亂,無效代碼也比較多,需要整理,記錄下來,分享一二