Python 实现微信 H5 支付的简单指南

随着移动互联网的发展,线上支付越来越普及,尤其是春节、双十一等购物季,很多商家会选择微信支付作为其支付方式之一。本文将介绍如何使用 Python 实现微信 H5 支付,帮助开发者更好地理解和实现这一功能。

微信 H5 支付的工作原理

微信 H5 支付允许用户在移动端通过浏览器快速完成支付,通常步骤包括:

  1. 用户在 H5 页面选择商品并提交订单。
  2. 服务器生成预支付订单,调用微信支付的接口。
  3. 接收微信返回的预支付信息。
  4. 在 H5 页面通过 JavaScript 调用微信支付的 JS SDK,完成支付。

环境准备

在开始之前,你需要准备以下环境:

  • Python 3.x
  • Flask 框架(或其他 Web 框架)
  • 微信支付商户账号,获取相关的支付信息

安装所需库

使用 pip 安装 Flask和请求库:

pip install Flask requests xmltodict

示例代码

这里是一个简单的 Flask 应用,演示如何实现微信 H5 支付的基本流程。

from flask import Flask, request, jsonify
import requests
import xmltodict
import hashlib
import random
import time

app = Flask(__name__)

# 微信支付参数
APP_ID = 'your_app_id'
MCH_ID = 'your_merchant_id'
API_KEY = 'your_api_key'
NOTIFY_URL = 'your_notify_url'  # 支付回调通知地址

def get_sign(params):
    # 对参数进行签名
    params_str = '&'.join(f"{k}={v}" for k, v in sorted(params.items()))
    params_str += '&key=' + API_KEY
    return hashlib.md5(params_str.encode('utf-8')).hexdigest().upper()

@app.route('/create_order', methods=['POST'])
def create_order():
    order_id = str(random.randint(100000, 999999))  # 示例订单号
    params = {
        "appid": APP_ID,
        "mch_id": MCH_ID,
        "nonce_str": str(random.randint(100000, 999999)),
        "body": "商品描述",
        "out_trade_no": order_id,
        "total_fee": 1,  # 订单金额,单位:分
        "spbill_create_ip": request.remote_addr,
        "notify_url": NOTIFY_URL,
        "trade_type": "MWEB",  # H5支付
    }

    # 生成签名
    params['sign'] = get_sign(params)

    # 转换为XML格式
    xml_data = f"<xml>{''.join(f'<{k}>{v}</{k}>' for k, v in params.items())}</xml>"
    
    # 发送请求到微信支付
    response = requests.post(' data=xml_data.encode('utf-8'))
    response_dict = xmltodict.parse(response.text)

    if response_dict['xml']['return_code'] == 'SUCCESS':
        return jsonify({'mweb_url': response_dict['xml']['mweb_url']})
    else:
        return jsonify({'error': response_dict['xml']['return_msg']}), 400

if __name__ == '__main__':
    app.run(debug=True)

H5 页面支付

在前端 H5 页面中,你可以使用返回的 mweb_url 进行支付跳转,具体 JavaScript 代码可能如下所示:

fetch('/create_order', { method: 'POST' })
  .then(response => response.json())
  .then(data => {
      window.location.href = data.mweb_url; // 跳转到支付页面
  });

支付流程示意图

下面是整个支付流程的示意图:

journey
    title 微信 H5 支付流程
    section 用户下单
      用户选择商品: 5: 用户
      提交订单: 5: 用户
    section 服务器处理
      生成预支付订单: 5: 服务器
      返回预支付信息: 5: 服务器
    section 用户支付
      跳转H5支付界面: 5: 用户
      微信支付完成: 5: 用户

结语

通过以上简单示例,你能快速上手使用 Python 实现微信 H5 支付。在实际应用中,你也可以根据业务需求进行更多的定制和优化。希望这篇文章能为你提供一些帮助,让你的项目快速集成支付功能!