异步通知生成签名过程说明
异步通知参数示例
标题 | 类型 | 描述 | 说明 |
---|---|---|---|
order_id | String | 订单号 | 易思汇订单号。 |
pay_result | Int | 支付结果 | 1支付成功,0失败 |
pay_amount | Float | 付款金额 | 浮点数,比如 10000.00。 |
pay_datetime | String | 付款时间 | 字符串类型,比如2017-10-12 10:00:00 |
extend_info | String | 扩展信息 | 后续预留使用。 |
sign | String | 签名 | 使用md5生成签名,详细流程请看异步通知生成签名过程说明 |
异步通知生成签名过程
先将参数(除sign字段外)按字母顺序排序(若首字母相同则比较第二个字母,以此类推),然后将排序后的参数拼接成一个以&符号分隔的字符串。
接着,将指定的盐值添加到该字符串的最前面,并使用MD5算法对结果字符串进行摘要计算。最后,将计算得到的MD5摘要并填充到sign
sign_params = {
"order_id": "ET00000000000000001",
"pay_result": 1,
"pay_amount": 10000.00,
"pay_datetime": "2017-10-10 10:00:00",
"extend_info": "",
}
salt = "xxx000mmm"
1. 排序并用&分割
extend_info=&order_id=ET00000000000000001&pay_amount=10000.00&pay_datetime=2017-10-10 10:00:00&pay_result=1
2. 将salt增加到字符串最前面
xxx000mmmextend_info=&order_id=ET00000000000000001&pay_amount=10000.00&pay_datetime=2017-10-10 10:00:00&pay_result=1
3.将字符串进行MD5摘要
假设得到的MD5为:d41d8cd98f00b204e9800998ecf8427e
最终得到的请求数据:
paylpad = {
"order_id": "ET00000000000000001",
"pay_result": 1,
"pay_amount": 10000.00,
"pay_datetime": "2017-10-10 10:00:00",
"extend_info": "",
"sign": "d41d8cd98f00b204e9800998ecf8427e"
}
生成签名代码示例
# python3
import hashlib
def generate_sign(sign_params: dict, salt=None) -> str:
if not salt:
salt = ""
md5_text = str(salt) + "&".join(
[f"{k}={v}" for k, v in sorted(sign_params.items())]
)
return hashlib.md5(bytes(md5_text, encoding="utf-8")).hexdigest()
Modified at 2024-06-14 06:02:19