微信支付的开发流程分为以下几步:
-
注册微信商户号: 在微信支付平台注册商户号,需要提供一些基本信息,如公司信息、联系人信息等。注册后,商户号会得到一个唯一标识的APPID和APPSECRET,同时需要进行身份认证。
-
配置支付参数: 登录微信支付平台,在“开发配置”中配置支付相关参数,包括支付密钥、支付通知接口等。同时需要设置支付的回调通知地址,当用户支付成功时,微信会向该地址发送一个HTTP POST请求,通知商户支付结果。
-
调用统一下单接口: 商户在自己系统中开发调用微信支付下单的接口,该接口需要向微信支付系统提交一些订单信息,并传递商户号和带签名的支付参数。微信支付系统会对接收到的参数进行校验和签名,验证通过后,返回一个交易会话ID,即prepay_id。
-
生成支付二维码: 商户根据prepay_id生成所需的支付二维码,展示给用户扫描支付。
-
用户支付并回调通知: 用户扫描支付二维码后,在微信客户端完成支付。当支付成功时,微信会向商户设置的支付回调通知地址发送HTTP POST请求,通知商户支付结果。
-
查询支付状态: 商户可以通过调用微信支付的支付查询接口,查询支付结果,同时可以进行退款操作。
下面是两条实现微信支付的示例:
示例一:
假设商户已经完成了前三步,我们需要调用微信支付的下单接口,获取prepay_id:
// 注:php代码示例
// 组装请求数据,请求参数文档详见 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
$data = [
'appid' => $appid,
'mch_id' => $mch_id,
'nonce_str' => $nonce_str,
'body' => $body,
'out_trade_no' => $out_trade_no,
'total_fee' => $total_fee,
'spbill_create_ip' => $spbill_create_ip,
'notify_url' => $notify_url,
'trade_type' => 'NATIVE'
];
$data['sign'] = $this->makeSign($data, $pay_key); // 给请求加上签名
$xml = $this->toXml($data);
// 发送支付请求,请求参数以xml格式传递,响应数据也以xml格式返回
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$response = $this->postXmlCurl($xml, $url);
成功获取到prepay_id后,就可以生成支付二维码了:
// 注:php代码示例
// 用prepay_id生成二维码
$code_url = $response['code_url'];
$qrCode = new \Endroid\QrCode\QrCode($code_url);
header('Content-Type: ' . $qrCode->getContentType());
echo $qrCode->writeString();
示例二:
当用户完成支付并回调通知时,微信支付会向商户设置的notify_url发送一个HTTP POST请求,通知商户支付结果。商户需要验证请求的签名、处理请求的业务逻辑,并给微信支付发送响应消息(必需)。
// 注:php代码示例
// 通知请求示例数据(请求回调的xml格式数据)详见 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&index=8
$xml = file_get_contents('php://input');
$data = $this->fromXml($xml);
// 验证请求的签名
if ($this->checkSign($data, $pay_key)) {
// 处理请求业务逻辑
file_put_contents('/tmp/pay.log', json_encode($data), FILE_APPEND);
// 将处理结果发送给微信支付
$result = [
'return_code' => 'SUCCESS',
'return_msg' => 'OK'
];
$xml = $this->toXml($result);
echo $xml;
} else {
// 签名验证失败,通知微信支付,请求失败
$result = [
'return_code' => 'FAIL',
'return_msg' => 'Invalid sign'
];
$xml = $this->toXml($result);
echo $xml;
}
以上是微信支付的开发流程及两个示例,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信支付的开发流程详解 - Python技术站