微信支付小程序v3「附PHP完整后端代码」
微信支付是一种基于微信平台提供的支付和结算服务的移动支付方式,开发者可以通过微信支付接口开发自己的支付功能。微信支付小程序v3是微信支付新推出的小程序版本,它与微信公众号支付和APP支付相似,需要开发者在后端服务器上对接微信支付服务,完成预支付、下单、订单查询等支付流程。本文将详细介绍微信支付小程序v3的PHP完整后端代码。
1. 下载微信支付官方PHP SDK
微信支付官方提供了PHP SDK供开发者使用,该SDK支持微信支付小程序v3的开发,包含预支付、下单、订单查询、退款、退款查询等功能。开发者可以从微信支付官网下载SDK,也可以在GitHub上找到该SDK的项目地址。
1.1 微信支付SDK下载
在微信支付官网下载微信支付官方PHP SDK:
https://pay.weixin.qq.com/wiki/doc/api/tools/sdk.php
1.2 微信支付SDK GitHub地址
开发者可以克隆官方的PHP SDK源代码,或者下载最新的SDK压缩包:
git clone https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient.git
2. 引入微信支付SDK
将解压后的微信支付SDK文件夹拷贝至项目后端的指定目录,并在需要调用微信支付的PHP文件中引入相应的文件:
require_once '/path/to/wechatPaySdk/WechatPay.php';
3. 配置微信支付参数
在开发者中心创建小程序,申请微信支付功能后,微信支付会分配商户号、APPID、密钥等参数,开发者在向微信服务器发起请求时,需要提供这些参数。以下代码展示了如何配置微信支付参数:
3.1 获取微信支付参数
获取微信支付参数,如:商户号、APPID、密钥等
$merchantId = 'xxxxxxxxxxx'; //商户号
$appId = 'xxxxxxxxxxx'; //小程序appid
$key = 'xxxxxxxxxxx'; //商户秘钥
$mchSerialNo = 'xxxxxxxxxxx'; //商户证书文件序列号
$privateKey = 'file:///path/to/apiclient_key.pem'; //商户证书私钥
$certChain = 'file:///path/to/apiclient_cert.pem'; //商户证书公钥
3.2 配置微信支付参数
配置微信支付参数
$config = [
'merchant_id' => $merchantId,
'app_id' => $appId,
'key' => $key,
'mch_serial_no' => $mchSerialNo,
'private_key' => $privateKey,
'cert_chain' => $certChain,
];
4. 调用微信支付接口
使用配置好的微信支付参数,调用微信支付接口,实现小程序的支付功能。以下代码展示了如何进行预支付和下单操作:
4.1 预支付
构造预支付请求参数,调用微信支付接口,生成预支付ID
$wechatPay = new \WechatPay($config);
$params = [
'appid' => $appId,
'mchid' => $merchantId,
'description' => '商品描述',
'notify_url' => '支付成功回调接口',
'out_trade_no' => '商户订单号',
'amount' => [
'total' => '订单金额,单位为分',
],
'payer' => [
'openid' => '用户openid',
],
'scene_info' => [
'payer_client_ip' => '用户IP地址',
],
];
$response = $wechatPay->v3_post('/v3/pay/transactions/jsapi', json_encode($params));
生成预支付ID成功后,响应中会返回整个订单的JSON数据。
4.2 下单
获取预支付ID后,调用微信支付接口,完成小程序支付下单操作
$wechatPay = new \WechatPay($config);
$params = [
'appid' => $appId,
'partnerid' => $merchantId,
'prepayid' => '预支付ID',
'package' => 'Sign=WXPay',
'noncestr' => '随机字符串',
'timestamp' => time(),
];
$paySign = $wechatPay->get_pay_sign($params);
$result = [
'timeStamp' => '' . time() . '',
'nonceStr' => '随机字符串',
'package' => 'prepay_id=预支付ID',
'signType' => 'MD5',
'paySign' => $paySign,
];
echo json_encode($result);
下单成功后,响应中会返回各种订单信息,如:商户订单号、微信支付订单号、交易状态等。
5. 支付成功回调处理
小程序的支付成功回调接口需要获取支付成功后从微信支付服务器发来的XML流,解析出各个参数,记录订单信息,返回响应。以下代码展示了如何完成支付成功回调处理:
5.1 获取支付成功回调XML流
获取微信支付返回的XML流,解析出各个参数
$data = file_get_contents("php://input");
$params = \json_decode(\json_encode(simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
5.2 记录订单信息
获取订单信息,如:商户订单号、微信支付订单号、交易状态等;记录到数据库
$out_trade_no = $params['out_trade_no'];
$transaction_id = $params['transaction_id'];
$trade_state = $params['trade_state'];
// 记录订单信息
5.3 返回响应
向微信支付服务器返回响应,表示成功接收和处理了请求
header("Content-Type:application/xml");
echo " ";
6. 订单查询与退款
小程序开发中,订单查询与退款是常见的功能。以下代码展示了如何查询订单和退款,以及如何解析查询结果和退款结果:
6.1 订单查询
构造订单查询请求参数,调用微信支付接口,查询订单状态
$wechatPay = new \WechatPay($config);
$response = $wechatPay->v3_get('/v3/pay/transactions/out-trade-no/' . $out_trade_no);
$result = json_decode($response, true);
查询结果成功后,响应中会返回整个订单的JSON数据。
6.2 退款
构造退款请求参数,调用微信支付接口,完成退款操作
$wechatPay = new \WechatPay($config);
$params = [
'amount' => [
'refund' => '退款金额,单位为分',
],
'out_refund_no' => '商户退款单号',
];
$response = $wechatPay->v3_post('/v3/refund/domestic/refunds', json_encode($params));
退款成功后,响应中会返回各种退款信息,如:商户退款单号、微信支付退款单号、退款状态等。
综上,本文详细介绍了微信支付小程序v3的PHP完整后端代码,包括了微信支付SDK的下载、引入、配置,以及预支付和下单操作的调用方法,支付成功回调处理、订单查询、退款等常见操作的调用方法。本文中展示的代码只是示例代码,开发者可以根据自己的需求进行修改和优化。