1. 程式人生 > >PHP微信支付--接入支付SDK,生成訂單二維碼進行掃碼支付

PHP微信支付--接入支付SDK,生成訂單二維碼進行掃碼支付

在PHP開發微信支付中接入支付SDK,生成訂單二維碼進行掃碼支付,實際運用中做出一些整理,以便後期查閱。整體流程如下圖;

微信支付官方流程:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5

1、當我們選擇使用掃碼支付,首先會出現下載微信sdk包,選擇PHPsdk包進行下載,下載到本地後會發現是一個tp5框架,只是少了一個Common資料夾,把下載好的sdk包放進去。等待呼叫......

2、設定支付授權目錄,掃碼成功後的回撥地址 

3、支付模式二

4、實現程式碼:

<?php
namespace app\index\controller;

class Index
{
    public function index()
    {
 		require_once APP_PATH.'common/WxpayAPI/lib/WxPay.Api.php';
 		$input = new \WxPayUnifiedOrder();
 		// 設定商品描述
 		$input->SetBody('測試商品');
 		// 設定訂單號 ---這裡使用的時間,其實是自己生成的
 		$input->SetOut_trade_no(date('YmdHis'));
 		// 設定訂單金額(單位:分)
 		$input->SetTotal_fee('1');
 		// 設定非同步通知地址
 		$input->SetNotify_url('http://www.php.wx/index.php/index/Notify/index');
 		// 設定交易型別
 		$input->SetTrade_type('NATIVE');
 		// 設定商品ID
 		$input->SetProduct_id('123456780');
 		// 呼叫統一下單API
 		$result = \WxPayAPI::unifiedOrder($input);
 		// 生成二維碼圖片,在這裡因為我們自己除錯的需要修改配置common/lib/WxPay.Api.php的嚴格效驗true修改為false
 		$code_url = $result['code_url'];
 		$img = '<img src=http://paysdk.weixin.qq.com/example/qrcode.php?data='.urlencode($code_url).' />';
 		echo $img;
    }
}
?>

5、需要注意在微信支付非同步處理中的回撥地址,一定不是你的授權地址,處理微信支付非同步請求的程式碼,Notify/index.php:

<?php
namespace app\index\controller;

class Notify
{
    public function index()
    {
    	require_once APP_PATH.'common/WxpayAPI/lib/WxPay.Api.php';
    	$msg = '';
    	\WxPayApi::notify(function($result){
    		// 簽名校驗通過
    		// 查詢訂單號,如果不存在,return;
    		// 如果訂單已存在,且訂單已經被處理過,return;
    		// 如果訂單沒有被處理,處理訂單

    	},$msg);
    }
}
?>

注意:如果非同步驗證的時候使用WxPay.Api.php對indx.php進行簽名驗證,是無法訪問到這個方法的。 

(github克隆地址:https://github.com/mruserfeng/weiixn.git);