Bambora支付网关返回Passcode authentication failure报错排查
Bambora /v1/profiles接口报Passcode authentication failure错误修复方案
错误根因
该报错为鉴权失败导致,常见触发原因有3个:
- 鉴权头格式错误:Bambora受保护接口(创建支付档案、发起支付等)不支持
Passcode <密钥>的鉴权格式,必须使用标准Basic Auth格式 - 密钥或请求透传异常:Bambora后台不同功能模块的API密钥是独立生成的,若使用了交易支付、退款等其他模块的密钥调用支付档案(Profiles)接口,会直接返回13号鉴权错误;公共CORS代理默认会过滤
Authorization这类敏感请求头,你加在请求里的鉴权信息根本没有透传给Bambora服务器 - 架构逻辑违规:把商户级私密API密钥硬编码在前端代码直接调用敏感接口,本身就违反Bambora的安全规范,不仅容易触发鉴权异常,还会导致密钥泄露,造成账户资金损失
分步修复方案
- 修正鉴权逻辑
正确的鉴权头生成规则如下:
- 登录Bambora商户后台,拿到你的商户ID(Merchant ID),单独生成支付档案(Profiles)模块专属的API访问密钥
- 将字符串
${你的商户ID}:${Profiles模块密钥}做Base64编码 - 请求头中
Authorization字段值格式为Basic ${Base64编码后的字符串},禁止使用Passcode前缀
参考实现(以下代码必须运行在服务端,禁止写在前端代码中):
const merchantId = "你的Bambora商户ID"; const profilesApiPasscode = "Profiles模块专属API密钥"; // 生成鉴权凭证 const authCredential = Buffer.from(`${merchantId}:${profilesApiPasscode}`).toString("base64"); // 后续请求头中使用 Authorization: `Basic ${authCredential}`
- 调整接口调用架构,废弃前端直连敏感接口的逻辑
- 卡片令牌化(你写的
getData1逻辑)属于公开前端接口,可以保留在前端运行,拿到卡片token后,不要在前端直接调用Bambora的/v1/profiles接口,只把token传给你自己的服务端接口 - 由你的服务端组装正确的鉴权头,直接请求
https://api.na.bambora.com/v1/profiles接口,服务端请求不存在浏览器跨域限制,不需要拼接cors-anywhere代理地址 - 服务端拿到Bambora返回的支付档案ID后,再返回给前端做后续业务处理
- 调试阶段验证密钥有效性
密钥配置完成后,先用接口调试工具直接发请求到Bambora官方接口地址,带上正确的Basic Auth头,确认接口能正常返回结果,排除密钥拼写错误、权限不匹配问题。
注意:请求头中不需要加Access-Control-Allow-Origin: "true",该字段是服务端返回的响应头,请求方携带该字段无任何作用,反而可能被代理或网关拦截。
内容的提问来源于stack exchange,提问作者Aditya Dixit
相关产品推荐
相关产品推荐

