三角洲行动卡盟对接自动发卡系统 API 开发实战:签名算法、异步 Webhook 回调与防重放实现
一、 发卡商户端与支付网关的通信协议设计
在数字化交易中,发卡系统与支付通道之间的通信必须基于 HTTPS 协议,且每个请求必须携带三个防伪核心参数:时间戳(timestamp)、随机字符串(nonce)以及请求签名(signature)。任何未带有效签名的请求直接被网关丢弃。
二、 Python 实现 HMAC-SHA256 签名与验签核心代码
商户接口对接标准代码示例:
import hmac, hashlib, time, uuid
def generate_signature(params: dict, secret_key: str) -> str:
# 1. 参数按字典序升序排序
sorted_keys = sorted(params.keys())
query_string = "&".join([f"{k}={params[k]}" for k in sorted_keys if params[k] != ""])
# 2. 计算 HMAC-SHA256 签名
sig = hmac.new(secret_key.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest()
return sig
# 模拟订单支付回调参数
payload = {
"order_id": "DF202609071030",
"amount": "99.00",
"timestamp": str(int(time.time())),
"nonce": uuid.uuid4().hex
}
sign = generate_signature(payload, "SecretKey_33qk_Matrix")
print(f"[API] 订单验签生成值: {sign}")
三、 Webhook 异步回调处理与幂等性保障
网关通知存在多次重试特性。商户在接收到 Webhook 后,必须先判断数据库中该订单是否已处理(Status == 'PAID'),若已处理则直接向网关响应 `SUCCESS`,避免同一订单多次触发向客户发送多张卡密。