如何解决PayPal捕获订单时出现的PAYEE_NOT_CONSENTED错误?
PayPal订单支付至第三方账户问题解答
一、设置payee字段的正确性
针对你的业务场景(患者付款至医生个人账户而非医院账户),设置payee字段的思路是正确的,这个字段的作用就是指定收款的目标账户,完全匹配你需要将款项直接打给医生的需求。
二、PAYEE_NOT_CONSENTED错误的解决方法
出现这个错误的核心原因是:发起API请求的REST应用所属账户(医院/平台账户)未获得目标收款账户(医生账户)的授权,无法直接将款项划转至该账户。具体解决步骤如下:
完成医生账户的认证流程
沙箱测试账户也需完成必要认证:进入PayPal开发者后台的沙箱账户管理页面,找到对应医生的测试账户,确认已完成邮箱验证、身份信息填写等认证步骤。获取医生账户的授权权限
引导医生通过OAuth授权流程,向你的REST应用授予收款相关权限(如payments:write、payee:*)。授权完成后,你会获得针对该医生账户的专属访问令牌,后续创建订单时使用此令牌,即可正常指定该账户为收款方。改用Payouts API(替代方案)
若业务逻辑是先收患者款项至平台账户,再转账给医生,更适合使用PayPal的Payouts API:- 用平台账户令牌创建订单并捕获患者付款,款项先进入平台账户;
- 调用Payouts API,将款项从平台账户转账至医生的PayPal账户。
这种方式无需医生提前授权,但需确保你的平台账户已开通Payouts功能权限。
沙箱环境关联检查
测试时确认:你的REST应用对应的client_id/client_secret所属账户,与医生的测试账户是否属于同一开发者账户下的关联账户。若为跨开发者账户的测试账户,需完成双方的关联授权设置。
附你提供的创建订单代码:
$response = self::$guzzleClient->post( "/v2/checkout/orders", [ 'headers' => [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'Authorization' => "Bearer $accessToken" ], 'json' => [ 'intent' => 'CAPTURE', 'purchase_units' => [ [ 'amount' => [ 'value' => 100, 'currency_code' => 'EUR', ], 'payee' => [ 'email_address' => "test@example.com" ] ] ], 'payment_source' => [ "paypal" => [ "experience_context" => [ "payment_method_preference" => "IMMEDIATE_PAYMENT_REQUIRED", "payment_method_selected" => "PAYPAL", "locale" => "de-DE", "landing_page" => "LOGIN", "shipping_preference" => "SET_PROVIDED_ADDRESS", "user_action" => "PAY_NOW", "return_url" => "https://www.paypal.com", "cancel_url" => "https://www.paypal.com" ] ] ] ] ] );
内容的提问来源于stack exchange,提问作者devstar2422
相关产品推荐
相关产品推荐

