PAYATHON 2026

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。可以采用以下任一方式处理:

  1. 在 OPENMONEY 的生产 API 文档页面重新生成或下载 Node.js SDK。
  2. 使用生产文档提供的新版 require('api')('...') 标识。
  3. 通过 axios、fetch 等 HTTP 客户端直接调用生产接口。
  4. 联系 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 标识自行猜测。

备注:内容仅供参考。