paypal-checkout-sdk ^1.0版本完成支付时return_url未触发问题
以下是针对该问题的排查和解决步骤:
确认return_url为绝对HTTPS URL
PayPal要求return_url和cancel_url必须是完整的绝对URL(包含HTTPS协议和完整域名),相对路径会导致PayPal无法正常触发跳转。将代码中的route()替换为url()->route()确保生成绝对URL:'redirect_urls' => [ 'cancel_url' => url()->route('web.payment.cancel', $payment->payableIdentifier()), 'return_url' => url()->route('web.payment.approve', $payment->payableIdentifier()), ]生产环境必须使用HTTPS,沙箱环境建议也使用HTTPS避免兼容性问题。
关闭return_url路由的CSRF验证
后端框架的CSRF防护可能会拦截PayPal的跳转请求(PayPal的请求不会携带你的应用CSRF令牌),导致请求被静默拒绝。以Laravel为例,在app/Http/Middleware/VerifyCsrfToken.php中排除相关路由:protected $except = [ 'payment/approve/*', 'payment/cancel/*', ];检查订单创建后的重定向方式
创建订单后,必须通过后端302重定向跳转到PayPal的approval_url,而非前端JS跳转,否则会丢失PayPal会话,导致后续无法触发return_url。示例代码:$orderResult = $paypalClient->execute($order); $approvalUrl = collect($orderResult->result->links)->firstWhere('rel', 'approve')->href; return redirect()->to($approvalUrl);验证application_context配置
确保application_context中的user_action设置为PAY_NOW(你已配置),该参数会让用户在PayPal页面直接完成支付后触发跳转,避免进入额外的确认步骤。同时确认shipping_preference设置符合业务场景,无冲突逻辑。排查沙箱/生产环境账号状态
如果使用沙箱环境,检查测试商家和买家账号是否正常,无限制或异常状态;生产环境则确认账号已完成认证,无风控限制。
内容的提问来源于stack exchange,提问作者Donat Ferati

