已开通App支付,调起时为何提示商户合作协议已到期?
结论
这个提示通常不是 App 支付调用代码或签名有误,而是本次交易关联商户的支付合作协议已经到期、终止或暂时不可用。
后台显示“已开通 App 支付”,并不代表对应的商户协议仍然有效。请登录支付平台商户后台核对协议状态,按照页面提示续签或重新签约。协议恢复生效后,再重新发起支付。
常见原因
常见情况包括:
- App 支付产品已经开通,但商户合作协议已超过有效期,尚未续签。
- 商户主体、应用或签约产品发生变更,原协议不再适用于当前交易。
- 请求使用了错误的
app_id、商户号或签约账号,实际关联的是另一份已到期的协议。 - 服务商代商户调用时,传入的商户身份与签约主体不一致。
- 协议刚刚完成续签,平台状态还没有同步到支付链路。
“产品已开通”和“协议有效”是两个不同的状态,应以本次交易实际关联商户的协议状态为准。
处理步骤
1. 确认本次请求使用的商户身份
检查服务端创建支付订单时使用的以下信息:
app_id- 商户号或商户账号
- App 支付产品
- 服务商模式下的实际收款商户
- 当前运行环境,例如正式环境或沙箱环境
重点确认线上配置是否误用了其他应用或历史商户账号。
2. 检查合作协议状态
登录对应支付平台的商户后台,在签约产品、协议管理或产品中心查看 App 支付协议是否有效。
如果协议显示为已到期、已失效、已终止或待续签,请按照后台提示完成续签或重新签约。部分情况下还需要补充主体资料或重新审核。
3. 核对应用与签约主体的关联关系
确认当前 app_id 属于已签约的商户主体,而且该应用已经绑定有效的 App 支付能力。如果近期迁移过应用、变更过主体或重新签约,应重点检查生产环境是否仍在使用旧配置。
4. 等待状态同步后重新测试
续签或重新签约完成后,协议状态可能不会立即同步到所有支付链路。请等到后台明确显示协议已经生效,再重新创建支付订单。
不要反复使用续签前生成的订单参数进行测试。建议重新创建业务订单,并生成新的支付请求。
5. 仍未恢复时联系平台客服
如果后台显示协议有效,但支付时仍然提示协议到期,请向支付平台技术支持提供:
app_id- 商户号
- 支付请求时间
- 平台返回的错误码和完整错误信息
- 支付订单号或请求流水号
- 协议状态页面截图
不要提交应用私钥、商户密钥或完整的签名材料。
代码处理示例
协议到期不能通过修改客户端参数解决。服务端应记录支付平台返回的错误信息,将这类错误归为商户配置异常,并阻止客户端无限重试。
下面是一个通用的 Java 处理示例,具体字段以所用支付 SDK 的实际返回结构为准:
PaymentResult result = paymentService.createAppPayment(order);
if (!result.isSuccess()) {
log.error(
"Create app payment failed, appId={}, merchantId={}, orderNo={}, code={}, message={}",
appId,
merchantId,
order.getOrderNo(),
result.getCode(),
result.getMessage()
);
if (result.getMessage() != null
&& result.getMessage().contains("商户合作协议已到期")) {
throw new MerchantAgreementException(
"商户支付协议当前不可用,请联系商户管理员处理"
);
}
throw new PaymentException("创建支付订单失败");
}
客户端收到这类业务错误后,应停止继续调起支付:
async function startPayment(orderNo) {
const response = await createPaymentOrder(orderNo);
if (!response.success) {
if (response.code === "MERCHANT_AGREEMENT_INVALID") {
showMessage("当前支付服务暂不可用,请联系商户处理");
return;
}
showMessage(response.message || "支付发起失败,请稍后重试");
return;
}
invokeAppPayment(response.orderString);
}
MERCHANT_AGREEMENT_INVALID 只是业务系统内部定义的示例错误码,并不是支付平台的固定错误码。实际处理时应优先判断平台返回的明确错误码,不宜长期依赖错误文案匹配。
注意事项
- 重新生成签名、升级客户端 SDK 或重新安装 App,通常无法解决协议到期问题。
- 除了确认“App 支付已开通”,还要检查对应的合作协议是否有效。
- 在多商户、多应用或服务商模式下,需要逐一核对本次请求实际关联的商户主体。
- 不建议向普通用户完整展示支付平台返回的原始错误详情,但服务端必须保留错误码、请求时间和订单号,以便排查。
- 如果商户后台没有续签入口,可能需要重新申请产品或联系平台处理,具体操作以后台提示为准。
备注:内容仅供参考。
