You need to enable JavaScript to run this app. 集成Billdesk支付网关时出现Invalid merchant details (ERRP004)错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

集成Billdesk支付网关时出现Invalid merchant details (ERRP004)错误如何解决

Billdesk UAT报错ERRP004(Invalid merchant details)原因及解决方案(Node.js/Express环境)

抱歉,我们目前无法处理您的请求 - Invalid merchant details (ERRP004)

常见触发原因

  • 商户基础信息配置错误:UAT环境和生产环境的merchant_id、secret_key、currency、return_url参数不匹配,Billdesk UAT环境会强制校验所有注册时报备的字段,哪怕差一个字符都会触发该报错
  • 管道分隔消息的字段顺序/缺失错误:即便字段内容正确,和官方文档要求的字段顺序不一致、多传/漏传必填字段,都会被判定为商户信息无效
  • HMACSHA256校验和生成逻辑错误:密钥编码格式、消息拼接顺序、哈希输出的大小写/编码格式(比如要求hex却输出了base64)不匹配,会导致Billdesk侧解析消息时判定身份无效
  • EJS表单提交的参数格式错误:msg字段未做URL编码、表单提交的action地址错用生产地址而非UAT地址、请求头的Content-Type不符合Billdesk要求
  • UAT环境IP白名单未配置:Billdesk UAT环境会校验请求来源IP,未提前报备的服务器IP发起的请求会直接返回该错误

对应解决方案

  • 核对基础配置:单独拎出所有商户配置常量,和Billdesk对接人提供的UAT参数逐一对比,注意secret_key区分大小写,UAT的return_url必须和报备的完全一致,包括路径、参数、http/https协议头
  • 校验管道分隔消息格式:按照官方文档的字段顺序写死拼接逻辑,不要用对象遍历拼接避免顺序错乱,示例代码如下:
// 严格按照官方文档顺序拼接,不要随意调整字段顺序
const msgFields = [
  merchantId,
  customerId,
  txnAmount,
  orderId,
  currency,
  returnUrl,
  // 剩余必填字段按官方文档要求顺序补充
];
const rawMsg = msgFields.join('|');
  • 修正HMACSHA256生成逻辑:Node.js环境下使用内置crypto模块生成校验和,确保密钥和消息都用utf-8编码,输出hex格式字符串后再追加到消息末尾,示例代码:
const crypto = require('crypto');
const checksum = crypto.createHmac('sha256', Buffer.from(secretKey, 'utf8'))
  .update(Buffer.from(rawMsg, 'utf8'))
  .digest('hex')
  .toLowerCase(); // 可根据Billdesk要求调整为toUpperCase()
const finalMsg = `${rawMsg}|${checksum}`;
  • 修正EJS表单提交逻辑:提交前对msg参数做URL编码,表单action明确写UAT地址,确保表单自动提交逻辑无异常,示例EJS代码:
<form method="post" action="<%= billdeskUatUrl %>" id="billdeskForm">
  <input type="hidden" name="msg" value="<%= encodeURIComponent(finalMsg) %>">
</form>
<script>
  window.onload = () => document.getElementById('billdeskForm').submit();
</script>
  • 确认IP白名单:将你UAT环境服务器的出口IP提供给Billdesk对接人,确认已加入白名单后再发起测试

内容的提问来源于stack exchange,提问作者Roh1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 19:36:02