Payex payment integration 最终付款页面返回错误
支付小周
结论
Access_MissingAccessProperties 与付款页面或 XML 解析无关,表示 PayEx 拒绝当前商户调用该方法。错误信息已经说明原因:
Merchant does not have access to the method.
一般需要联系 PayEx,为商户账户开通相应的支付产品或 API 方法权限。同时检查商户凭据、运行环境和接口地址是否匹配。
可能原因
常见原因有:
- 商户协议中没有启用
MPFinalize.php最终调用的支付方法。 accountNumber、商户编号或其他身份凭据有误。- 测试环境使用了生产凭据,或生产环境使用了测试凭据。
- 支付产品已经开通,但最终确认、捕获或完成交易的方法没有单独授权。
- PayEx 后台配置尚未生效,或权限开通在另一个商户账户上。
请求已经到达 PayEx,因此应先排查账户权限,不必先修改 SimpleXMLElement 的处理逻辑。
解决步骤
1. 确认实际调用的方法
打开 MPFinalize.php,找到向 PayEx 发起最终请求的位置,并记录:
- API 方法名称
- 请求地址
accountNumber或商户编号- 当前使用的是测试环境还是生产环境
权限通常与具体方法或支付产品有关。只向 PayEx 提供 PHP 文件名,通常不足以定位问题。
2. 检查环境和凭据是否配套
确认以下配置来自同一环境:
$accountNumber = 'YOUR_ACCOUNT_NUMBER';
$encryptionKey = 'YOUR_ENCRYPTION_KEY';
$endpoint = 'PAYEX_ENDPOINT_FOR_THE_SAME_ENVIRONMENT';
不要混用测试和生产配置。测试账户、测试密钥和测试接口地址必须配套使用。
还要检查配置文件或环境变量是否在部署时被覆盖,特别是最终付款页面与前序页面使用不同配置文件的情况。
3. 联系 PayEx 开通权限
如果凭据和环境都正确,请联系 PayEx 商户支持或账户负责人,确认:
- 当前商户是否有权调用该 API 方法;
- 对应的支付产品是否已加入商户协议;
- 权限是否配置到了正确的测试或生产账户;
- 最终确认、完成或捕获交易是否需要额外授权。
提交问题时,可以附上:
- 错误代码:
Access_MissingAccessProperties - 返回描述:
Merchant does not have access to the method. - PayEx 返回的请求 ID:
2dd334b571cb4e809a5d13c3bc7a51dd - 返回时间:
2018-04-09 05:53:28 - 实际调用的 API 方法和环境
PayEx 可以根据请求 ID 在服务端日志中查找这次调用。
建议的错误处理
不要把整个 SimpleXMLElement 直接输出给最终用户。可以识别状态码,并将诊断信息写入日志:
<?php
$response = simplexml_load_string($responseXml);
$statusCode = (string) $response->status->code;
$description = (string) $response->status->description;
$requestId = (string) $response->header->id;
if ($statusCode === 'Access_MissingAccessProperties') {
error_log(sprintf(
'PayEx access denied: requestId=%s, code=%s, description=%s',
$requestId,
$statusCode,
$description
));
exit('当前支付方式尚未开通,请联系商户客服。');
}
将 $responseXml 替换为项目中实际收到的 PayEx XML 响应。日志里不要记录完整密钥、签名、银行卡信息或其他敏感数据。
注意事项
- 重复提交同一请求通常无法解决权限问题,还可能带来重复交易风险。
- 不要修改返回的 XML、跳过状态检查或伪造成功结果来绕过错误。
- 权限开通后,应先在对应的测试环境中重新执行完整支付流程,再切换到生产环境。
- 同一凭据可以调用其他 PayEx 方法,并不代表它也有权调用当前方法。具体授权范围仍需由 PayEx 确认。
备注:内容仅供参考。
