创建订单
请求地址:http://orderapi.liangtouyang.com/api/orders/pay
请求名 | 类型 | 参考值 | 备注 | |
appid | String | 100010000 | 后台应用中心获取 | |
type | int | 0 | 0:微信支付 1:支付宝支付 | |
out_trade_no | string | Y1234567989 | 用户订单号 | |
money | string | 1.00 | 付款金额,注意必须是标准的金额格式如1.00 1.01 | |
notify_url | string | 可填可不填 不填则用后台应用内设置的为准 | ||
device | int | 1 | 1:电脑 2:手机 填写的类型会利于接口的返回类型 | |
sign | string | 32位的MD5加密字符串 |
|
生成签名
import hashlib
def generate_sign(params, secret_key):
# 移除 'sign' 参数
params.pop('sign', None)
# 按键名排序
sorted_params = sorted(params.items())
# 拼接字符串
param_string = '&'.join(f'{key}={value}' for key, value in sorted_params)
# 在拼接的字符串后面加上密钥
param_string += secret_key
# 计算MD5签名
signature = hashlib.md5(param_string.encode('utf-8')).hexdigest()
return signature
# 示例数据
params = {
'appid': '100010000',
'type': 0,
'out_trade_no': 'Y1234567989',
'money': '1.00',
'notify_url': '',
'device': 1
}
secret_key = 'your_secret_key_here'
# 生成签名
sign = generate_sign(params, secret_key)
print(sign)
查询订单
请求地址:http://orderapi.liangtouyang.com/api/orders/query
请求名 | 类型 | 参考值 | 备注 | |
appid | string | 100010000 | 后台应用处获取 | |
out_trade_no | string | Y123456789 | 用户自己订单号 (二选一) | |
trade_no | string | R201400000000000000 | 平台订单号(二选一) |
查询订单 无需sign计算
验证回调签名
import hashlib
import urllib.parse
import json
def verify_callback_signature(data, secret_key):
# 提取签名
signature = data.pop('sign', None)
# 排序参数
sorted_data = sorted(data.items())
# 拼接字符串
param_string = '&'.join(f'{key}={value}' for key, value in sorted_data)
# 在拼接的字符串后面加上密钥
param_string += secret_key
# 计算MD5签名
computed_signature = hashlib.md5(param_string.encode('utf-8')).hexdigest()
# 验证签名
return signature == computed_signature
# 假设获取到的回调数据
url_data = 'data=%7B%22appid%22%3A100100001%2C%22time%22%3A1713760397%2C%22amount%22%3A%221.100%22%2C%22status%22%3A1%2C%22out_trade_no%22%3A%22y1713760297%22%2C%22trade_no%22%3A%22R240422123135450090%22%2C%22sign%22%3A%22a7762b869a349409616ed4cbc5018dae%22%7D'
data = json.loads(urllib.parse.unquote(url_data.split('=')[1]))
secret_key = 'your_secret_key_here'
# 验证签名
is_valid = verify_callback_signature(data, secret_key)
if is_valid:
print('签名验证通过')
else:
print('签名验证失败')
进件地址:两头羊支付