微信支付服务器预支付订单代码
时间: 2023-10-16 20:10:45 浏览: 84
以下是微信支付服务器预支付订单的代码示例:
```python
import requests
from hashlib import md5
import xml.etree.ElementTree as ET
# 微信支付参数
appid = '你的appid'
mch_id = '你的商户号'
key = '你的API秘钥'
notify_url = '支付结果通知地址'
# 生成签名函数
def create_sign(params):
# 将参数按照ASCII码从小到大排序
params = sorted(params.items(), key=lambda x:x[0])
# 拼接成字符串
raw_str = '&'.join(['{}={}'.format(k, v) for k, v in params])
# 加上API秘钥
raw_str += '&key={}'.format(key)
# 计算MD5值并转换为大写
sign = md5(raw_str.encode('utf-8')).hexdigest().upper()
return sign
# 生成预支付订单函数
def create_prepay_order(openid, out_trade_no, total_fee):
# 构造请求参数
params = {
'appid': appid,
'mch_id': mch_id,
'nonce_str': '随机字符串',
'body': '商品描述',
'out_trade_no': out_trade_no,
'total_fee': total_fee,
'spbill_create_ip': '调用支付接口的机器IP',
'notify_url': notify_url,
'trade_type': 'JSAPI',
'openid': openid
}
# 生成签名
sign = create_sign(params)
params['sign'] = sign
# 将请求参数转换为XML格式
xml_data = '<xml>' + ''.join(['<{}>{}</{}>'.format(k, v, k) for k, v in params.items()]) + '</xml>'
# 发送请求
response = requests.post('https://api.mch.weixin.qq.com/pay/unifiedorder', data=xml_data.encode('utf-8'))
# 解析响应结果
root = ET.fromstring(response.content)
if root.find('return_code').text == 'SUCCESS' and root.find('result_code').text == 'SUCCESS':
# 预支付订单生成成功,返回JS API调用参数
prepay_id = root.find('prepay_id').text
params = {
'appId': appid,
'timeStamp': str(int(time.time())),
'nonceStr': '随机字符串',
'package': 'prepay_id={}'.format(prepay_id),
'signType': 'MD5'
}
sign = create_sign(params)
params['paySign'] = sign
return params
else:
# 预支付订单生成失败,返回错误信息
err_msg = root.find('return_msg').text
return {'err_msg': err_msg}
```
其中,`create_sign`函数用于生成签名,`create_prepay_order`函数用于生成预支付订单并返回JS API调用参数,`openid`为用户的openid,`out_trade_no`为商户订单号,`total_fee`为订单金额(单位为分)。需要注意的是,`notify_url`为支付结果通知地址,需要在商户后台进行配置。
阅读全文