PayPal REST API v2/checkout/orders 付款审批后无法跳转回站点问题咨询
问题原因与修复方案
跳转卡住的核心原因
你创建PayPal订单时未正确配置application_context下的return_url参数,PayPal没有获取到支付完成后的跳转目标地址,因此点击Continue后无法触发跳转,只能停留在当前支付页面。
PayPal支付流程和你此前接入的第三方支付的差异
你此前接触的支付流程是接口默认自动处理跳转、自动推送回调,PayPal的标准流程有两处核心不同:
- 跳转地址需要你在创建订单时主动传入,除了支付完成后的
return_url,还需要传入用户取消支付时的cancel_url,两个地址都需要是公网可访问的地址 - 支付授权完成后不会自动完成资金到账,你需要在用户跳转回你的
return_url后,主动调用订单捕获接口完成资金清算,否则订单只会停留在授权状态,资金不会实际结算到你的商户账户 - 回调采用Webhook机制,你需要在PayPal商户后台自行配置需要监听的支付事件、以及回调接收地址,配置完成后PayPal会将支付状态变更推送到你指定的地址,和你此前使用的回调逻辑功能一致。
具体修复步骤
- 调整你创建订单的请求参数,在
purchase_units同级增加application_context配置,参考结构如下:
{ "intent": "CAPTURE", "purchase_units": [ // 你的原有订单商品、金额配置 ], "application_context": { "return_url": "https://你的站点域名/支付完成处理路由", "cancel_url": "https://你的站点域名/支付取消返回路由", "shipping_preference": "NO_SHIPPING" // 若你的业务不需要收集用户物流地址可添加该配置,减少支付步骤 } }
- 本地沙箱测试时如果使用的是本地服务地址,需要先通过内网穿透工具将本地端口暴露到公网,确保PayPal可以正常跳转访问你的服务地址
- 在
return_url对应的服务端逻辑中,获取跳转携带的token(即PayPal订单ID)和PayerID参数,调用订单捕获接口完成资金结算,再更新你本地的订单状态即可
内容的提问来源于stack exchange,提问作者v1n_vampire
相关产品推荐
相关产品推荐

