OPENMONEY payment gateway 生产环境 SDK 如何配置?
支付阿杰
明确结论
@bank-open/v1#1mld74kq6w4cej 是 api 包加载的 API 定义标识,不一定是专门用于 sandbox 的 SDK。将环境从 sandbox 切换到 OPENMONEY production 时,通常不需要猜测或自行替换 require('api') 中的标识,而要同时调整以下配置:
- API Base URL:改为 OPENMONEY 后台或官方文档提供的生产地址
- 认证信息:换成生产环境生成的 token、Access Key 或 Secret
- 商户配置:确认生产账户、域名、回调地址和支付方式均已启用
生产地址和凭证应以当前 OPENMONEY 商户后台或官方文档为准。仅凭这段 SDK 标识无法确定具体的生产 URL,sandbox 凭证也不应直接用于生产环境。
推荐配置方式
如果生成的 SDK 支持 server(),可以用它明确设置生产环境的 Base URL:
const sdk = require('api')('@bank-open/v1#1mld74kq6w4cej');
sdk.server(process.env.OPENMONEY_BASE_URL);
sdk.auth(process.env.OPENMONEY_PRODUCTION_TOKEN);
const result = await sdk.generateToken({
amount: parseFloat(order_amount),
udf: {
membershipCustomer_id,
customer_id,
order_id,
},
contact_number: customerData?.mobile || '9999999999',
email_id: customerData?.email || 'aaa@gmail.com',
currency: currencyFormat ? currencyFormat.toString() : 'INR',
mtx: transactionId.toString(),
});
可以通过环境变量区分不同的部署环境:
OPENMONEY_BASE_URL=<OPENMONEY 官方提供的生产 API Base URL>
OPENMONEY_PRODUCTION_TOKEN=<生产环境 token>
不要把未经确认的生产 URL 直接写入代码。OPENMONEY 的接口域名、认证方式或开放平台配置可能发生调整,应从生产商户后台复制准确配置。
如果 SDK 不支持 server()
部分由 API 文档自动生成的 SDK 会将服务器地址写入 API 定义。如果执行以下代码时报错,或者请求仍然发往 sandbox:
sdk.server(process.env.OPENMONEY_BASE_URL);
那么当前 API 定义可能只包含 sandbox server。可以采用以下任一方式处理:
- 在 OPENMONEY 的生产 API 文档页面重新生成或下载 Node.js SDK。
- 使用生产文档提供的新版
require('api')('...')标识。 - 通过
axios、fetch等 HTTP 客户端直接调用生产接口。 - 联系 OPENMONEY 技术支持,确认当前生产 API 定义和 Base URL。
不要自行修改 #1mld74kq6w4cej。这类字符串通常是 API 定义的版本或修订标识,没有可供手工推导的 sandbox 和 production 命名规则。
使用 HTTP 客户端的替代示例
如果没有可用的生产 SDK,或者 SDK 无法切换服务器,可以直接调用生产端点。以下代码只展示配置结构,具体路径和认证请求头仍须以 OPENMONEY 官方生产文档为准:
const axios = require('axios');
const client = axios.create({
baseURL: process.env.OPENMONEY_BASE_URL,
timeout: 15000,
headers: {
Authorization: `Bearer ${process.env.OPENMONEY_PRODUCTION_TOKEN}`,
'Content-Type': 'application/json',
},
});
const response = await client.post(
'<generateToken 的生产接口路径>',
{
amount: parseFloat(order_amount),
udf: {
membershipCustomer_id,
customer_id,
order_id,
},
contact_number: customerData?.mobile || '9999999999',
email_id: customerData?.email || 'aaa@gmail.com',
currency: currencyFormat ? currencyFormat.toString() : 'INR',
mtx: transactionId.toString(),
}
);
const result = response.data;
Authorization 不一定采用 Bearer 格式。如果 OPENMONEY 要求使用其他请求头、签名方式或多个密钥,应按其生产文档进行调整。
上线前注意事项
- sandbox token 和 production token 通常不能混用。
- 确认
generateToken请求最终发往生产域名,而不是 sandbox 域名。 mtx应保持唯一,以免因交易号重复而被拒绝。- 金额字段必须符合接口要求。需要精确计算金额时,不要直接依赖 JavaScript 浮点运算。
- 生产环境中不建议使用
"9999999999"、"aaa@gmail.com"等占位数据,除非接口明确允许。 - token、Secret 等凭证应保存在环境变量或密钥管理服务中,不能提交到代码仓库。
- 上线前还要配置并验证生产回调地址、Webhook 签名、域名白名单和 HTTPS 证书。
- 如果生产文档提供了新的 SDK 标识,请使用文档中的完整字符串,不要根据 sandbox 标识自行猜测。
备注:内容仅供参考。
