返回

微信支付v3-Native下单API从零开始详细解读

前端

  1. 微信支付v3 Native下单API概述

微信支付v3 Native下单API是微信支付提供的用于生成预支付交易单的API。该API可让您在Native环境下发起微信支付,支持扫码支付、JSAPI支付和APP支付等多种支付方式。

2. API参数详解

微信支付v3 Native下单API的请求参数包括以下几个部分:

  • 商户号(mchid): 您在微信支付平台的商户号。
  • 子商户号(sub_mchid): 如果您使用子商户模式,则需要提供子商户号。
  • 商户订单号(out_trade_no): 您系统生成的订单号,需要保证唯一性。
  • 交易类型(trade_type): 支付方式,如NATIVE。
  • 总金额(total_amount): 支付金额,单位为分。
  • 商品(body): 商品或服务的。
  • 附加数据(attach): 附加数据,在支付成功通知中返回。
  • 终端IP(spbill_create_ip): 支付用户端的IP地址。
  • 回调地址(notify_url): 支付成功后,微信支付平台会将支付结果通知到该地址。
  • 自定义参数(sub_appid): 自定义参数,在支付成功通知中返回。
  • 加密数据(encrypted_data): 用RSA算法加密的订单信息。

3. 签名流程

为了确保数据的安全性,微信支付v3 Native下单API要求对请求参数进行签名。签名流程如下:

  1. 将请求参数按照字典顺序排列。
  2. 将请求参数的键值对用“=”连接,用“&”分隔。
  3. 将签名字符串中所有的中文URL编码。
  4. 将签名字符串与商户私钥拼接成如下字符串:key=key&data=data。
  5. 使用SHA256算法对上述字符串进行签名,并转换为十六进制字符串。

4. API封装

您可以使用第三方库或自行编写代码来封装微信支付v3 Native下单API。这里提供了一个使用Python实现的API封装示例:

import requests
import hashlib
import time

# 定义商户号、子商户号、商户私钥等参数
mchid = "your_mchid"
sub_mchid = "your_sub_mchid"
private_key = "your_private_key"

# 定义请求参数
params = {
    "mchid": mchid,
    "sub_mchid": sub_mchid,
    "out_trade_no": "your_out_trade_no",
    "trade_type": "NATIVE",
    "total_amount": 1,
    "body": "your_body",
    "attach": "your_attach",
    "spbill_create_ip": "your_spbill_create_ip",
    "notify_url": "your_notify_url",
    "sub_appid": "your_sub_appid",
}

# 对请求参数进行签名
timestamp = str(int(time.time()))
nonce_str = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 32))
sign_str = '&'.join(['{}={}'.format(k, v) for k, v in sorted(params.items())])
sign_str = sign_str + '&key=' + private_key
sign = hashlib.sha256(sign_str.encode('utf-8')).hexdigest().upper()
params['sign'] = sign
params['timestamp'] = timestamp
params['nonce_str'] = nonce_str

# 发送请求
response = requests.post('https://api.mch.weixin.qq.com/v3/pay/transactions/native', data=params)

# 解析响应结果
result = response.json()

5. 结语

本文为您详细解读了微信支付v3 Native下单API,包括API概述、API参数详解、签名流程和API封装。希望您能通过本文掌握API的使用方法,并将其集成到您的项目中。如果您有任何疑问,请随时与我们联系。