在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);