python 调用微信支付教程
时间: 2023-10-09 19:11:04 浏览: 378
使用Python调用微信本地ocr服务.zip
以下是 Python 调用微信支付的基本流程:
1. 创建订单:首先需要在微信支付后台创建订单并获取到订单号。
2. 生成签名:根据微信支付接口文档要求,需要对订单信息进行签名加密。
3. 统一下单:调用微信支付接口,将订单信息提交给微信支付后台,获取到预支付交易会话标识 prepay_id。
4. 生成支付参数:根据微信支付接口文档要求,生成支付参数并返回给前端。
5. 调起支付:前端使用生成的支付参数发起支付请求。
下面是一个简单的 Python 程序示例,用于调用微信支付:
```python
import requests
import hashlib
import time
import xml.etree.ElementTree as ET
# 微信支付接口地址
url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'
# 微信支付相关信息
appid = '微信公众号appid'
mch_id = '商户号'
key = '商户支付密钥'
body = '订单描述'
out_trade_no = '商户订单号'
total_fee = '订单金额,单位为分'
notify_url = '支付成功后的回调地址'
trade_type = 'JSAPI'
openid = '用户openid'
# 生成签名
timestamp = str(int(time.time()))
nonce_str = 'wechat_pay'
stringA = 'appid=' + appid + '&body=' + body + '&mch_id=' + mch_id + '&nonce_str=' + nonce_str + '¬ify_url=' + notify_url + '&openid=' + openid + '&out_trade_no=' + out_trade_no + '&total_fee=' + total_fee + '&trade_type=' + trade_type + '&key=' + key
sign = hashlib.md5(stringA.encode('utf-8')).hexdigest().upper()
# 生成支付参数
xml_data = '<xml>'
xml_data += '<appid>' + appid + '</appid>'
xml_data += '<body>' + body + '</body>'
xml_data += '<mch_id>' + mch_id + '</mch_id>'
xml_data += '<nonce_str>' + nonce_str + '</nonce_str>'
xml_data += '<notify_url>' + notify_url + '</notify_url>'
xml_data += '<openid>' + openid + '</openid>'
xml_data += '<out_trade_no>' + out_trade_no + '</out_trade_no>'
xml_data += '<total_fee>' + total_fee + '</total_fee>'
xml_data += '<trade_type>' + trade_type + '</trade_type>'
xml_data += '<sign>' + sign + '</sign>'
xml_data += '</xml>'
# 调用微信支付接口
response = requests.post(url, data=xml_data.encode('utf-8'))
response.encoding = 'utf-8'
# 解析返回结果
tree = ET.fromstring(response.text)
prepay_id = tree.find('prepay_id').text
# 生成支付参数
timestamp = str(int(time.time()))
nonce_str = 'wechat_pay'
stringA = 'appId=' + appid + '&nonceStr=' + nonce_str + '&package=prepay_id=' + prepay_id + '&signType=MD5' + '&timeStamp=' + timestamp + '&key=' + key
pay_sign = hashlib.md5(stringA.encode('utf-8')).hexdigest().upper()
pay_param = {
'appId': appid,
'timeStamp': timestamp,
'nonceStr': nonce_str,
'package': 'prepay_id=' + prepay_id,
'signType': 'MD5',
'paySign': pay_sign
}
# 返回支付参数
print(pay_param)
```
以上代码仅供参考,实际调用微信支付时还需要根据接口文档和具体业务需求进行调整。
阅读全文