Braintree Python调用sale接口开启submit_for_settlement报AuthorizationError
核心原因
该报错本质是你当前使用的API凭证或者沙箱配置,不支持创建交易时直接提交结算的操作权限,和交易本身的参数合法性无关(这也是你移除submit_for_settlement参数后交易可以正常创建的原因)。
排查与解决步骤
- 校验API角色权限:登录Braintree沙箱后台,进入「Settings > Users and Roles」页面,找到当前调用接口使用的API密钥对应的角色,确认该角色已勾选Transaction: Submit for Settlement权限。多数沙箱默认的开发角色未开通该权限,即使你登录的账户是管理员身份,API密钥的权限是独立分配的。
- 检查沙箱结算配置:进入「Settings > Processing」页面,在结算设置板块确认开启了「允许交易创建时直接提交结算」的开关,同时确认你使用的商户账户(对应代码里的
merchant_account_id)没有设置自动结算的金额阈值、支付方式限制。 - 临时兼容方案(适合权限调整后依旧报错的沙箱环境):Braintree沙箱本身存在一定的功能校验bug,你可以拆分交易流程为两步实现相同的直接结算效果,该方式的权限校验逻辑和直接传参略有不同,绝大多数场景下可以绕过报错,代码示例如下:
# 第一步:创建仅授权的交易 sale_result = self.braintree_client.transaction.sale( { "amount": charge["amount"], "payment_method_token": "token_stored", "merchant_account_id": merchant_id, } ) if sale_result.is_success: # 第二步:立即调用结算接口完成结算 settle_result = self.braintree_client.transaction.submit_for_settlement( sale_result.transaction.id, charge["amount"] )
- 确认支付方式合法性:如果你使用的
payment_method_token是自定义生成的测试令牌,建议替换为Braintree官方沙箱测试卡生成的合法令牌,部分自定义模拟支付方式不支持直接结算操作。
内容的提问来源于stack exchange,提问作者g66 Gopanear
相关产品推荐
相关产品推荐

