首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 如何接入微信/QQ 支付到网站

Python 如何接入微信/QQ 支付到网站

原创
作者头像
用户2695996
发布2025-07-11 21:30:17
发布2025-07-11 21:30:17
18800
代码可运行
举报
文章被收录于专栏:源码搭建源码搭建
运行总次数:0
代码可运行

📌 引言

随着互联网支付方式的普及,越来越多的在线平台选择接入第三方支付服务来提升用户体验和增加收入来源。微信支付和QQ钱包作为中国最流行的支付工具之一,为开发者提供了丰富的API接口,使得集成这些支付方式变得相对简单。

本文将详细介绍如何在基于Python的Web应用中接入微信支付和QQ支付,并通过一个示例展示从开发准备到实际调用支付接口的全过程。


🧰 技术栈要求

  • Python 3.6+
  • Flask 或 Django 框架
  • 微信开放平台账号(已认证)
  • QQ钱包商户号(如果需要支持QQ支付)
  • HTTPS 证书(必须)
  • Composer(用于安装 SDK)

🔗 接入流程概览

微信支付

步骤

内容

1

注册微信公众平台账号并申请微信支付权限

2

配置支付域名、回调地址等信息

3

安装微信官方SDK或使用第三方库

4

构建订单数据

5

调用微信JSAPI发起支付

6

处理支付结果回调通知

QQ钱包

步骤

内容

1

注册QQ钱包商户账号

2

配置支付域名、回调地址等信息

3

使用QQ钱包提供的API进行对接

注意:由于QQ钱包与微信支付同属于腾讯公司,很多逻辑和流程是相似的。因此,本教程将以微信支付为例,QQ钱包部分会简要说明差异点。


🛠 开发前准备

1️⃣ 获取微信支付相关参数

你需要从微信公众平台获取以下信息:

参数名

示例值

来源位置

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

回调地址

2️⃣ 安装依赖库

代码语言:javascript
代码运行次数:0
运行
复制
bash深色版本pip install wechatpy

wechatpy 是一个非常强大的微信支付SDK,它简化了与微信服务器交互的过程。


💻 核心代码实现

1️⃣ 配置微信支付参数(config.py)

代码语言:javascript
代码运行次数:0
运行
复制
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'
}

2️⃣ 创建支付页面(views.py)

代码语言:javascript
代码运行次数:0
运行
复制
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)

3️⃣ 支付结果异步通知处理(notify.py)

代码语言:javascript
代码运行次数:0
运行
复制
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>'

4️⃣ 前端调用支付(template.html)

代码语言:javascript
代码运行次数:0
运行
复制
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>

⚠️ 注意事项

  1. 安全性 确保所有支付请求都通过HTTPS加密传输,避免敏感信息泄露。
  2. 幂等性 每个订单号必须唯一,以防止重复支付。
  3. 回调处理 在处理支付结果回调时,务必对返回的数据进行签名验证,确保其来自微信服务器。
  4. 日志记录 对每次支付请求及其结果进行详细记录,便于后续排查问题。

📦 后续扩展建议

  • 多渠道支付 可以考虑同时支持多种支付方式,如支付宝、银联等,提高用户的支付灵活性。
  • 异常处理机制 增强系统的健壮性,例如在网络不稳定的情况下自动重试支付操作。
  • 财务报表 实现后台管理系统,方便管理员查看每日、每月的交易流水情况。

✅ 总结

本文详细介绍了如何在Python Web应用中集成微信支付和QQ支付,涵盖了从配置参数到发起支付请求再到处理支付结果回调的整个过程。通过上述步骤,你可以轻松地为你的网站添加微信支付功能,提供给用户更加便捷的支付体验。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📌 引言
  • 🧰 技术栈要求
  • 🔗 接入流程概览
    • 微信支付
    • QQ钱包
  • 🛠 开发前准备
    • 1️⃣ 获取微信支付相关参数
    • 2️⃣ 安装依赖库
  • 💻 核心代码实现
    • 1️⃣ 配置微信支付参数(config.py)
    • 2️⃣ 创建支付页面(views.py)
    • 3️⃣ 支付结果异步通知处理(notify.py)
    • 4️⃣ 前端调用支付(template.html)
  • ⚠️ 注意事项
  • 📦 后续扩展建议
  • ✅ 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档