Angular5集成PayUMoney支付网关遇哈希计算错误求助
解决Angular 5集成PayUMoney时哈希计算错误的问题
我之前在Angular项目里集成PayUMoney支付网关时,也刚好踩过这个哈希计算的大坑,给你梳理下关键的修正步骤和注意事项,帮你快速解决问题:
先明确完整的哈希计算公式
你提到的公式没写完,PayUMoney要求的完整SHA512哈希公式是:
sha512(key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5||||||salt)
重点注意:
- 参数顺序绝对不能乱,必须严格按照这个顺序拼接
- 即使你不用
udf6到udf10这些自定义参数,也要保留对应的竖线|占位符,不能直接跳过(也就是最后会有6个连续的竖线再接salt)
Angular里的具体实现步骤
确保使用正确的密钥
测试环境和生产环境的key、salt是完全分开的,一定要用PayUMoney测试商户后台提供的测试密钥,别不小心用了生产环境的密钥。引入哈希计算工具
Angular里可以用crypto-js库来快速计算SHA512,先安装依赖:npm install crypto-js --save编写哈希生成函数
严格按照公式拼接字符串并计算哈希,示例代码如下:import * as CryptoJS from 'crypto-js'; // 生成PayUMoney所需的哈希值 generatePayuHash( key: string, txnid: string, amount: string, productinfo: string, firstname: string, email: string, salt: string ): string { // 严格按照公式顺序拼接,空参数保留竖线占位符 const hashString = `${key}|${txnid}|${amount}|${productinfo}|${firstname}|${email}||||||||||${salt}`; // 计算SHA512并转为十六进制字符串 return CryptoJS.SHA512(hashString).toString(CryptoJS.enc.Hex); }
容易踩坑的细节
- 参数格式校验:
amount必须是纯数字格式(不能带逗号或货币符号),productinfo如果是JSON格式,要确保拼接的是原始字符串(不要额外转义) - 哈希大小写:SHA512的结果是十六进制字符串,PayUMoney对大小写不敏感,但建议统一用小写,避免不必要的问题
- 表单字段匹配:确保你计算出的哈希值,和表单里提交的
hash字段完全一致,没有多余的空格或换行
内容的提问来源于stack exchange,提问作者Bhagvat Lande
相关产品推荐
相关产品推荐

