请看下面的"ThinkPHP微信公众号支付接口完整攻略":
1. 前言
微信公众号支付,是指用户在微信公众号中完成整个支付的过程,微信公众号支付的好处是用户不需要离开微信的环境就可以完成支付,使用户跨入购买行动的门槛更低,也使商家更方便地与用户进行交互。
本攻略主要介绍如何在 ThinkPHP 框架中,快速使用微信公众号支付接口。
2. 准备工作
首先,我们需要一个微信公众号,并且需要开通微信支付。
然后,我们需要在 ThinkPHP 框架中,添加好 wechatpay
的第三方库。在本文中,我们假定这个第三方库已经添加完毕。
此外,我们还需要在微信公众平台上,下载支付证书,并将证书放置于服务器的指定目录中。
3. 使用过程
3.1 配置信息
在 ThinkPHP 的配置文件中,添加 wechatpay
相关的配置信息:
return [
'wechatpay' => [
'app_id' => 'YOUR_APP_ID', // 公众号的 app_id
'mch_id' => 'YOUR_MCH_ID', // 商户号
'key' => 'YOUR_KEY', // 商户支付密钥
'ssl_cert' => 'path/to/your/ssl_cert',
'ssl_key' => 'path/to/your/ssl_key',
],
];
注意:这里的
ssl_cert
和ssl_key
是指你在准备工作中下载的支付证书的路径。
3.2 发起支付请求
在准备好订单信息后,我们可以通过 wechatpay
的方法发起支付请求:
use wechatpay\WeChatPay;
$wechatpay = new WeChatPay(config('wechatpay'));
$outTradeNo = 'YOUR_ORDER_ID'; // 订单号
$totalFee = 1; // 订单总金额,单位为分
$url = $wechatpay->getUnifiedOrderUrl([
'body' => 'YOUR_PRODUCT_NAME',
'out_trade_no' => $outTradeNo,
'total_fee' => $totalFee,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => 'https://example.com/wechat/pay/notify',
'trade_type' => 'JSAPI',
'openid' => 'YOUR_OPENID',
]);
header('Location: ' . $url);
以上代码中,我们使用了 getUnifiedOrderUrl
方法,该方法返回发起支付请求的 URL 地址。最后,我们将请求重定向到这个 URL。
注意:在实际应用中,你需要将
YOUR_ORDER_ID
、1
、YOUR_PRODUCT_NAME
等信息替换为真实的订单信息。
3.3 接收支付通知
在用户完成支付后,微信服务器会向我们指定的 notify_url
发送支付通知。
在 ThinkPHP 中,我们可以使用 Request
类来接收支付通知:
use think\Request;
$request = Request::instance();
$xml = file_get_contents('php://input');
$wechatpay = new WeChatPay(config('wechatpay'));
$notify = $wechatpay->getNotify($xml);
if ($notify->result_code == 'SUCCESS' && $notify->return_code == 'SUCCESS') {
// 支付成功之后的操作,比如更新订单状态等
}
以上代码中,我们使用了 getNotify
方法来解析支付通知传来的 XML 数据,并生成一个 notify
对象,该对象封装了解析后的支付通知信息。
在接收到支付通知后,我们可以通过判断 notify->result_code
和 notify->return_code
是否都为 'SUCCESS'
,来判断支付是否成功。如果支付成功,就可以进行一些后续操作了,比如更新订单状态等。
4. 示例说明
为了更好地演示如何使用 wechatpay
,下面提供两个示例:
4.1 JSAPI 支付
假定我们有一个场景,用户需要在微信公众号内完成购买,那么我们就可以使用 JSAPI 支付。
首先,我们需要获取用户的 openid:
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
wx.config({
debug: false,
appId: 'YOUR_APP_ID',
timestamp: <?php echo time(); ?>,
nonceStr: 'YOUR_NONCE_STR',
signature: 'YOUR_SIGNATURE',
jsApiList: [
'chooseWXPay',
]
});
wx.ready(function () {
wx.chooseWXPay({
timestamp: <?php echo time(); ?>,
nonceStr: 'YOUR_NONCE_STR',
package: 'prepay_id=PREPAY_ID',
signType: 'MD5',
paySign: 'YOUR_PAY_SIGN',
success: function (res) {
// 支付成功之后的操作
},
fail: function (res) {
// 支付失败之后的操作
}
});
});
</script>
在用户授权之后,我们可以通过 getOpenId
方法获取用户的 openid:
use wechatpay\WeChatPay;
$wechatpay = new WeChatPay(config('wechatpay'));
$code = $_GET['code'];
$accessToken = $wechatpay->getAccessToken($code);
$openid = $accessToken->openid;
最后,我们需要发起支付请求:
use wechatpay\WeChatPay;
$wechatpay = new WeChatPay(config('wechatpay'));
$outTradeNo = 'YOUR_ORDER_ID'; // 订单号
$totalFee = 1; // 订单总金额,单位为分
$url = $wechatpay->getUnifiedOrderUrl([
'body' => 'YOUR_PRODUCT_NAME',
'out_trade_no' => $outTradeNo,
'total_fee' => $totalFee,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => 'https://example.com/wechat/pay/notify',
'trade_type' => 'JSAPI',
'openid' => $openid,
]);
header('Location: ' . $url);
4.2 刷卡支付
假定我们有一个场景,用户需要在商家门店完成购买,那么我们就可以使用刷卡支付。
首先,我们需要获取用户的刷卡信息:
$wechatpay = new WeChatPay(config('wechatpay'));
$authCode = 'YOUR_AUTH_CODE'; // 用户的条码或者二维码信息
$outTradeNo = 'YOUR_ORDER_ID'; // 订单号
$totalFee = 1; // 订单总金额,单位为分
$result = $wechatpay->microPay([
'body' => 'YOUR_PRODUCT_NAME',
'out_trade_no' => $outTradeNo,
'total_fee' => $totalFee,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'auth_code' => $authCode,
]);
if ($result->result_code == 'SUCCESS' && $result->return_code == 'SUCCESS') {
// 支付成功之后的操作,比如更新订单状态等
}
以上代码中,我们调用了 microPay
方法,该方法返回一个 result
对象,该对象封装了刷卡支付的结果。
如果支付成功,就可以进行一些后续操作了,比如更新订单状态等。
5. 结语
至此,我们已经介绍了如何在 ThinkPHP 框架中,快速使用微信公众号支付接口。希望这个攻略能够帮助到你。如有疑问,欢迎在评论区留言。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Thinkphp微信公众号支付接口 - Python技术站