随着互联网支付方式的普及,越来越多的在线平台选择接入第三方支付服务来提升用户体验和增加收入来源。微信支付和QQ钱包作为中国最流行的支付工具之一,为开发者提供了丰富的API接口,使得集成这些支付方式变得相对简单。
本文将详细介绍如何在基于Python的Web应用中接入微信支付和QQ支付,并通过一个示例展示从开发准备到实际调用支付接口的全过程。
步骤 | 内容 |
---|---|
1 | 注册微信公众平台账号并申请微信支付权限 |
2 | 配置支付域名、回调地址等信息 |
3 | 安装微信官方SDK或使用第三方库 |
4 | 构建订单数据 |
5 | 调用微信JSAPI发起支付 |
6 | 处理支付结果回调通知 |
步骤 | 内容 |
---|---|
1 | 注册QQ钱包商户账号 |
2 | 配置支付域名、回调地址等信息 |
3 | 使用QQ钱包提供的API进行对接 |
注意:由于QQ钱包与微信支付同属于腾讯公司,很多逻辑和流程是相似的。因此,本教程将以微信支付为例,QQ钱包部分会简要说明差异点。
你需要从微信公众平台获取以下信息:
参数名 | 示例值 | 来源位置 |
---|---|---|
APPID | wx8888888888888888 | 公众号设置 |
MCH_ID | 1900000101 | 微信商户平台 |
API_KEY | 8K8264ILTKCH16CQ2502SI8ZNMTM67VSU | 商户平台 API 密钥配置 |
CERT_PATH | /path/to/apiclient_cert.pem | 商户平台下载 |
KEY_PATH | /path/to/apiclient_key.pem | 商户平台下载 |
NOTIFY_URL | https://yourdomain.com/wechat/notify | 回调地址 |
bash深色版本pip install wechatpy
wechatpy
是一个非常强大的微信支付SDK,它简化了与微信服务器交互的过程。
python深色版本# config.py
WECHAT_PAY_CONFIG = {
'APPID': 'wx8888888888888888',
'MCH_ID': '1900000101',
'KEY': '8K8264ILTKCH16CQ2502SI8ZNMTM67VSU',
'NOTIFY_URL': 'https://www.020taijiyy.com/wechat/notify', # 回调地址
'CERT_PATH': '/path/to/apiclient_cert.pem',
'KEY_PATH': '/path/to/apiclient_key.pem'
}
python深色版本from flask import Flask, request, jsonify, render_template
from wechatpy.pay import WeChatPay
from wechatpy.pay.api import JsAPI
from config import WECHAT_PAY_CONFIG
app = Flask(__name__)
@app.route('/pay', methods=['POST'])
def pay():
user_openid = request.form.get('openid') # 用户 openid
out_trade_no = 'ORDER' + str(int(time.time())) # 订单号
total_fee = 100 # 单位分(即1元)
wechat_pay = WeChatPay(
appid=WECHAT_PAY_CONFIG['APPID'],
api_key=WECHAT_PAY_CONFIG['KEY'],
mch_id=WECHAT_PAY_CONFIG['MCH_ID'],
notify_url=WECHAT_PAY_CONFIG['NOTIFY_URL']
)
js_api = JsAPI(wechat_pay)
params = {
'body': '直播礼物购买',
'out_trade_no': out_trade_no,
'total_fee': total_fee,
'spbill_create_ip': request.remote_addr,
'trade_type': 'JSAPI',
'openid': user_openid
}
prepay_data = js_api.get_jsapi_params(params)
return jsonify(prepay_data)
if __name__ == '__main__':
app.run(debug=True)
python深色版本from wechatpy.pay import WeChatPay
from wechatpy.pay.api import Notify
@app.route('/wechat/notify', methods=['POST'])
def wechat_notify():
xml_data = request.data.decode('utf-8')
wechat_pay = WeChatPay(
appid=WECHAT_PAY_CONFIG['APPID'],
api_key=WECHAT_PAY_CONFIG['KEY'],
mch_id=WECHAT_PAY_CONFIG['MCH_ID']
)
notify = Notify(wechat_pay)
result = notify.parse_data(xml_data)
if result['return_code'] == 'SUCCESS':
# 处理成功支付逻辑
order_id = result['out_trade_no']
transaction_id = result['transaction_id']
# 更新数据库订单状态
print(f"Payment successful for order {order_id} with transaction ID {transaction_id}")
return '<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>'
else:
return '<xml><return_code><![CDATA[FAIL]]></return_code></xml>'
html深色版本<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>支付页面</title>
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
</head>
<body>
<button id="payButton">立即支付</button>
<script>
document.getElementById('payButton').addEventListener('click', function() {
fetch('/pay', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
'openid': 'USER_OPENID' // 替换为实际用户openid
})
}).then(response => response.json())
.then(data => {
if (typeof WeixinJSBridge === "undefined") {
alert("请在微信客户端内打开");
} else {
WeixinJSBridge.invoke(
'getBrandWCPayRequest', data,
function(res) {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
alert('支付成功');
} else {
alert('支付失败');
}
}
);
}
});
});
</script>
</body>
</html>
本文详细介绍了如何在Python Web应用中集成微信支付和QQ支付,涵盖了从配置参数到发起支付请求再到处理支付结果回调的整个过程。通过上述步骤,你可以轻松地为你的网站添加微信支付功能,提供给用户更加便捷的支付体验。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。