You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Express/Node.js集成PhonePe网页支付网关时返回404错误求助

Express/Node.js集成PhonePe网页支付网关时返回404错误求助

嗨,我之前帮朋友排查过类似的PhonePe支付接口404问题,给你梳理几个大概率的坑点,你可以逐一核对:

1. 环境API端点不匹配(最常见原因)

PhonePe的测试环境和生产环境的API地址是完全分开的!如果你用的是测试商户ID/密钥,却调用了生产环境的接口,就会直接返回404。

你当前的MERCHANT_BASE_URL是生产环境的:

const MERCHANT_BASE_URL = "https://api.phonepe.com/apis/hermes/pg/v1/pay"

请替换为测试沙箱环境的地址:

const MERCHANT_BASE_URL = "https://api-preprod.phonepe.com/apis/pg-sandbox/pg/v1/pay"

同时要确保你的MERCHANT_IDMERCHANT_KEY也是测试环境的(测试和生产的密钥不通用)。

2. 校验和生成的细节检查

你生成校验和的规则是对的,但要注意几个细节:

  • 确认MERCHANT_KEY没有多余的空格、换行符,可以打印出来看看是否和商户后台复制的完全一致;
  • 拼接校验字符串时,要确保没有遗漏或多加字符,比如在代码里临时打印拼接后的字符串,确认格式正确:
const string = payload + '/pg/v1/pay' + MERCHANT_KEY;
console.log("校验拼接字符串:", string); // 检查这个字符串是否符合要求
const sha256 = crypto.createHash('sha256').update(string).digest('hex');

3. 请求数据格式验证

虽然你的请求结构看起来没问题,但可以做两个小检查:

  • 确认payload是正确的Base64编码:可以把payload解码回JSON,看看是否和原始的paymentPayload完全一致;
  • 检查paymentPayload里的amount字段是数字类型(PhonePe要求用最小货币单位,比如2000代表20卢比,这个你是对的),不要写成字符串。

4. 额外小提示

  • 确保你的服务器可以正常访问PhonePe的API,没有被防火墙或代理拦截;
  • 如果你是在本地测试回调URL,需要用ngrok之类的工具把本地端口暴露到公网,不过这个是回调阶段的问题,和当前的404无关,但可以提前准备好。

先优先更换测试环境的API地址试试,这应该是大部分人遇到404的核心原因!

备注:内容来源于stack exchange,提问作者Aftab Ahmed

火山引擎 最新活动