预付支付,提供一个代码
时间: 2024-10-09 14:03:17 浏览: 22
预付支付通常是在电子商务环境中常见的场景,用户先支付部分款项,后续再按照约定完成全部交易。这里我将给出一个简化的Python示例,使用的是微信支付的扫码支付API,注意实际项目中你需要替换具体的商户信息和参数:
```python
import requests
# 商户信息
mch_id = 'your_mch_id'
api_key = 'your_api_key'
notify_url = 'your_notify_url' # 支付结果回调地址
# 用户支付请求数据
amount = 100 # 金额单位:分
body = '商品描述'
out_trade_no = 'order_' + str(int(time.time())) # 订单编号
product_id = 'your_product_id'
# 构建统一下单请求
data = {
"appid": "your_appid", # 微信公众号ID
"mch_id": mch_id,
"nonce_str": generate_nonce_str(), # 随机字符串,保证每次请求唯一
"body": body,
"out_trade_no": out_trade_no,
"total_fee": amount,
"spbill_create_ip": '用户IP', # 用户的真实IP
"product_id": product_id,
"scene_info": {"code": "USER_SCENE_H5"} # H5场景
}
# 统一下单请求
url = f'https://api.mch.weixin.qq.com/pay/unifiedorder'
sign = sign_string(data, api_key)
headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=data, headers=headers, params={'sign': sign})
if response.status_code == 200:
result = response.json()
if result['return_code'] == 'SUCCESS':
prepay_id = result['prepay_id']
# 打印预付二维码链接或者生成二维码供用户扫描
print(f"用户扫描以下二维码进行支付:{result['qr_code']}")
else:
print(f"下单失败,错误信息:{response.text}")
def generate_nonce_str():
import random
import string
return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(32))
def sign_string(data, key):
from hashlib import sha256
data.update({"key": key})
string_to_sign = '&'.join(['='.join(item) for item in sorted(data.items())])
hash_object = sha256(string_to_sign.encode('utf-8'))
sign = hash_object.hexdigest()
return sign
```
阅读全文