PHP:微信小程序微信支付服务端集成实例详解
在本文中,我们将为大家讲解如何在 PHP 中集成微信支付服务端,并包含了两个具体的示例。
准备工作
在开始集成之前,需要完成以下准备工作:
- 注册微信支付账号
- 在微信支付后台配置公众号或小程序,并设置回调地址
- 安装 curl 扩展
集成微信支付服务端
首先,我们需要在 PHP 代码中引用微信支付 SDK,可以使用 Composer 进行引用,也可以直接下载 SDK 手动引用。
统一下单
// 引入微信支付 SDK
require_once 'path/to/WxPay.Api.php';
// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no('订单号');
$input->SetTotal_fee(1);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid('用户 openid');
$result = WxPayApi::unifiedOrder($input);
在上述代码中,首先引入微信支付 SDK,然后构造一个统一下单实例,设置所需的参数,并通过 WxPayApi::unifiedOrder($input)
函数向微信支付接口提交请求,最后返回支付信息。
回调通知
// 引入微信支付 SDK
require_once 'path/to/WxPay.Api.php';
// 微信支付回调通知
$notify = new WxPayNotify();
$return = $notify->Handle(false);
if ($return) {
// 回调成功,更新订单状态等操作
echo 'success';
} else {
// 回调失败,记录日志
echo 'fail';
}
在上述代码中,首先引入微信支付 SDK,然后构造一个回调通知实例,调用 Handle
方法处理微信支付回调通知,判断是否处理成功,然后根据回调结果进行后续操作。
示例说明
以下我们给出两个示例。
示例一:微信小程序支付
前端代码:
wx.request({
url: '服务端统一下单接口地址',
data: {
order_no: '订单号',
total_fee: 1,
openid: '用户 openid',
},
success: function (res) {
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
success: function(res) {
// 支付成功回调
},
fail: function(res) {
// 支付失败回调
}
})
}
})
服务端代码:
// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no($_POST['order_no']);
$input->SetTotal_fee($_POST['total_fee']);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid($_POST['openid']);
$result = WxPayApi::unifiedOrder($input);
// 返回支付信息
$data = [
'timeStamp' => strval(time()),
'nonceStr' => $result['nonce_str'],
'package' => 'prepay_id=' . $result['prepay_id'],
'signType' => 'MD5',
'paySign' => $result['pay_sign'],
];
echo json_encode($data);
在上述示例中,前端调用服务端的统一下单接口,服务端返回支付信息,前端使用 wx.requestPayment
进行支付,支付成功后执行回调。
示例二:自定义订单号
服务端代码:
$out_trade_no = '自定义订单号';
// 检测订单号是否存在,如果存在需要重新生成
while (is_order_no_exist($out_trade_no)) {
$out_trade_no = generate_order_no();
}
// 统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody('商品名称');
$input->SetOut_trade_no($out_trade_no);
$input->SetTotal_fee(1);
$input->SetNotify_url('回调地址');
$input->SetTrade_type('JSAPI');
$input->SetOpenid('用户 openid');
$result = WxPayApi::unifiedOrder($input);
// 返回支付信息
$data = [
'timeStamp' => strval(time()),
'nonceStr' => $result['nonce_str'],
'package' => 'prepay_id=' . $result['prepay_id'],
'signType' => 'MD5',
'paySign' => $result['pay_sign'],
];
echo json_encode($data);
在上述示例中,我们自定义订单号,并在统一下单接口中设置为使用自定义订单号进行支付,如果自定义订单号已存在,则重新生成。
源码下载
以上就是本文的详细攻略,源码可以前往 GitHub 下载:https://github.com/xxx/xxx
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP:微信小程序 微信支付服务端集成实例详解及源码下载 - Python技术站