如何在UPI DeepLink URI中生成sign参数值
如何生成UPI DeepLink URI中的sign参数值
我来帮你拆解UPI DeepLink里sign参数的生成逻辑,这部分完全遵循UPI官方的签名规范,步骤清晰且有明确的规则约束:
核心前提
首先要明确:sign参数是用来验证DeepLink合法性的签名,必须由收款方(商户)的后端服务器生成——绝对不能在客户端生成,否则会导致私钥泄露,带来严重的安全风险。
具体生成步骤
拼接待签名的原始字符串
UPI规范要求必须按照固定的参数顺序拼接,顺序为:pa→pn→am→cu→tn。每个参数格式为key=value,参数之间用&连接,注意不要包含sign参数本身。
举个实际例子:
假设参数值为:- pa=jane@axisbank
- pn=Jane Smith
- am=299.99
- cu=INR
- tn=Payment for Laptop Repair
那么待签名的原始字符串就是:
pa=jane@axisbank&pn=Jane Smith&am=299.99&cu=INR&tn=Payment for Laptop Repair注意:参数值要保留原始格式(比如
pn里的空格不需要转义),顺序绝对不能错——UPI支付应用验证签名时会严格按这个顺序重新拼接,顺序错误会直接导致验证失败。使用商户私钥进行签名
用你在UPI支付服务商处注册获得的RSA私钥,通过SHA-256withRSA算法对上述原始字符串进行签名。这一步必须在后端服务器执行,私钥要严格保密,绝不允许暴露在客户端代码中。将签名结果转为Base64编码
签名后得到的是二进制数据,需要将其转换为Base64编码的字符串,这个字符串就是最终的sign参数值。
完整示例
把生成的sign值加入DeepLink后,最终的URI会是这样:
upi://pay?pa=jane@axisbank&pn=Jane Smith&am=299.99&cu=INR&tn=Payment for Laptop Repair&sign=abc123XYZ...(这里是Base64编码后的签名)
关键注意事项
- 必须严格遵守参数顺序,这是签名验证通过的核心前提。
- 所有参数值要和实际传递的完全一致,不能有额外的空格、转义错误。
- 签名操作必须在后端完成,私钥绝对不能明文存储或在客户端使用。
- 如果你使用的是第三方UPI支付SDK,部分SDK会提供封装好的签名接口,直接调用即可,但底层逻辑还是遵循上述步骤。
内容的提问来源于stack exchange,提问作者Rahul Mishra
相关产品推荐
相关产品推荐

