对接 Web 微信扫码支付涉及到一些复杂的过程,其中包括注册商户、配置支付参数、生成订单、生成支付二维码等步骤。以下是一个大致的技术文档和示例代码,使用的是 Yii 框架:
一、准备工作
- 在微信支付商户平台上注册一个商户账号,并获取到【商户号】、【API密钥】、【回调URL】等关键信息。
- 在你的 Yii 项目中,创建一个用于处理微信支付的控制器,比如
WxPayController
。
二、配置支付参数
在你的 WxPayController
中,你可以设置以下支付参数:
public $apiKey = 'YOUR_API_KEY'; // API密钥
public $partner = 'YOUR_PARTNER_ID'; // 商户号
public $merchantUrl = 'YOUR_MERCHANT_URL'; // 商户支付接口URL
public $notifyUrl = 'YOUR_NOTIFY_URL'; // 接收微信支付结果通知的URL
public $returnUrl = 'YOUR_RETURN_URL'; // 用户支付后跳转的页面
public $tradeType = 'NATIVE'; // 交易类型,这里选择扫码支付
三、生成订单并生成支付二维码
在你的 WxPayController
中,你可以创建一个方法来处理生成订单和生成支付二维码的逻辑:
public function actionIndex()
{
$params = [
'body' => '订单描述', // 商品描述
'out_trade_no' => uniqid(), // 商户订单号
'total_fee' => 100, // 订单总金额(单位:分)
'spbill_create_ip' => Yii::$app->request->userIP, // 用户IP
'notify_url' => $this->notifyUrl, // 接收微信支付结果通知的URL
'trade_type' => $this->tradeType, // 交易类型,这里选择扫码支付
];
// 使用微信支付API生成订单
$result = WxPay::createOrder($params);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
// 获取二维码链接,发送给前端或者保存到文件系统中
$qrCodeUrl = WxPay::getQrCodeLink($result['out_trade_no']);
return $this->render('index', ['qrCodeUrl' => $qrCodeUrl]);
} else {
// 生成订单失败,处理错误信息
return $this->render('error', ['errorMsg' => $result['err_msg']]);
}
}
四、处理微信支付结果通知
你还需要创建一个方法来处理微信支付结果通知的逻辑:
public function actionNotify()
{
// 处理微信支付结果通知的逻辑,比如更新订单状态等操作。
$xmlData = file_get_contents('php://input');
$result = WxPay::handleNotify($xmlData, $this->notifyUrl);
if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {
// 处理成功的逻辑,比如更新订单状态为已支付等操作。
} else {
// 处理失败的逻辑,比如发送通知给用户等操作。
}
echo 'success'; // 返回给微信支付系统成功响应,这里必须返回success。
}