You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里的具体实现步骤

  1. 确保使用正确的密钥
    测试环境和生产环境的key、salt是完全分开的,一定要用PayUMoney测试商户后台提供的测试密钥,别不小心用了生产环境的密钥。

  2. 引入哈希计算工具
    Angular里可以用crypto-js库来快速计算SHA512,先安装依赖:

    npm install crypto-js --save
    
  3. 编写哈希生成函数
    严格按照公式拼接字符串并计算哈希,示例代码如下:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:31:36