PayPal REST API v2/checkout/orders 批准后不会重定向回来
PayPal REST API v2/checkout/orders does not redirect back after approval
我以前从未使用过 PayPal,它在这里并不流行,我对订单和付款的方式感到困惑。谁能给我解释一下?我已经阅读了文档,但我仍然感到困惑。
To complete payer approval, use the approve link to redirect the
payer. The API caller has 3 hours (default setting, this which can be
changed by your account manager to 24/48/72 hours to accommodate your
use case) from the time the order is created, to redirect your payer.
Once redirected, the API caller has 3 hours for the payer to approve
the order and either authorize or capture the order.
我根据示例在沙箱环境中为此 API 创建了一个有效的 PHP curl 调用
https://developer.paypal.com/docs/api/orders/v2/#orders_create
我之前创建的APIs是这样工作的:
- 向第三方支付发送请求
- 获取包含结帐的响应link
- 将客户重定向到 link
- 客户完成付款
- 第 3 方将包含订单和付款详细信息的请求发送到我服务器上的 file/path
- 我的服务器收到请求并在我的数据库中更新订单status/payment
- 第 3 方将客户重定向到我的网页
使用 PayPal,到目前为止我得到的是:
- 将包含订单详细信息的请求发送至 /v2/checkout/orders
- 获取包含各种 links
的响应
- 将我的客户重定向到 rel:approve 结帐 link
- 登录到我的沙盒客户帐户并使用 PayPal 余额付款,点击继续
- 显示一条弹出消息:我们将您送回 xxx 的测试商店以完成此次购买
- 弹出消息已关闭,我仍位于图片中显示的带有“继续”按钮的同一付款页面
- Send request containing order detail to /v2/checkout/orders
- Get a response containing links
- Redirect my customer to approve link
步骤 (3) 是一种旧的集成方法,适用于使用旧的基于重定向的流程的网站。集成 PayPal 的首选方式是不使用重定向。完全没有。您的网站仍然在后台加载。执行以下操作:
关注 Set up standard payments guide and make 2 routes on your server, one for 'Create Order' and one for 'Capture Order', documented here。两条路线都应该 return 只有 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id
,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即 在 将您的 return JSON 转发给前端呼叫者之前。
将这 2 条路线与前端批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
如果出于某种奇怪且无法解释的原因,您坚持使用具有完整页面重定向的旧流程而不是我上面刚刚描述的方法,则您必须在订单创建请求中包含 redirect_url
,因此订单获得批准后,PayPal 有 return 的地方。当 return 发生时,立即通过 API 调用捕获订单并向客户显示 success/failure 结果。如果您想在捕获之前进行中间的订单审核步骤,您可以这样做,但您必须 还 编辑您的初始订单创建请求,以将 PayPal 最后一个按钮的措辞从“立即付款”更改为" 到 "继续",以便用户单击与下一步对应的内容。 application_context.user_action
需要 continue
才能进行此更改。
捕获订单将 return 一个 v2/payments 对象,该对象是具有自己的 ID 的已完成交易,用于记帐和退款目的。 (订单ID仅在付款人审核时使用,其他不重要)
我也遇到了这个问题,最后通过文档找到了解决方法。
您必须在您的请求中添加 application_context.return_url。
附件是PHP中的示例:
$postData = [
"intent" => "CAPTURE",
"purchase_units" => $purchase_units,
"application_context" => [
"return_url" => "",
"cancel_url" => "",
],
];
您可以通过添加应用程序上下文选项对 PayPal 支付页面进行大量自定义,有关可能的自定义的完整列表,您可以查看官方文档 Application Context Documentation
我以前从未使用过 PayPal,它在这里并不流行,我对订单和付款的方式感到困惑。谁能给我解释一下?我已经阅读了文档,但我仍然感到困惑。
To complete payer approval, use the approve link to redirect the payer. The API caller has 3 hours (default setting, this which can be changed by your account manager to 24/48/72 hours to accommodate your use case) from the time the order is created, to redirect your payer. Once redirected, the API caller has 3 hours for the payer to approve the order and either authorize or capture the order.
我根据示例在沙箱环境中为此 API 创建了一个有效的 PHP curl 调用 https://developer.paypal.com/docs/api/orders/v2/#orders_create
我之前创建的APIs是这样工作的:
- 向第三方支付发送请求
- 获取包含结帐的响应link
- 将客户重定向到 link
- 客户完成付款
- 第 3 方将包含订单和付款详细信息的请求发送到我服务器上的 file/path
- 我的服务器收到请求并在我的数据库中更新订单status/payment
- 第 3 方将客户重定向到我的网页
使用 PayPal,到目前为止我得到的是:
- 将包含订单详细信息的请求发送至 /v2/checkout/orders
- 获取包含各种 links 的响应
- 将我的客户重定向到 rel:approve 结帐 link
- 登录到我的沙盒客户帐户并使用 PayPal 余额付款,点击继续
- 显示一条弹出消息:我们将您送回 xxx 的测试商店以完成此次购买
- 弹出消息已关闭,我仍位于图片中显示的带有“继续”按钮的同一付款页面
- Send request containing order detail to /v2/checkout/orders
- Get a response containing links
- Redirect my customer to approve link
步骤 (3) 是一种旧的集成方法,适用于使用旧的基于重定向的流程的网站。集成 PayPal 的首选方式是不使用重定向。完全没有。您的网站仍然在后台加载。执行以下操作:
关注 Set up standard payments guide and make 2 routes on your server, one for 'Create Order' and one for 'Capture Order', documented here。两条路线都应该 return 只有 JSON 数据(没有 HTML 或文本)。在第二条路线中,当捕获 API 成功时,您应该将其生成的付款详细信息存储在您的数据库中(特别是 purchase_units[0].payments.captures[0].id
,这是 PayPal 交易 ID)并执行任何必要的业务逻辑(例如发送确认电子邮件或预订产品)立即 在 将您的 return JSON 转发给前端呼叫者之前。
将这 2 条路线与前端批准流程配对:https://developer.paypal.com/demo/checkout/#/pattern/server
如果出于某种奇怪且无法解释的原因,您坚持使用具有完整页面重定向的旧流程而不是我上面刚刚描述的方法,则您必须在订单创建请求中包含 redirect_url
,因此订单获得批准后,PayPal 有 return 的地方。当 return 发生时,立即通过 API 调用捕获订单并向客户显示 success/failure 结果。如果您想在捕获之前进行中间的订单审核步骤,您可以这样做,但您必须 还 编辑您的初始订单创建请求,以将 PayPal 最后一个按钮的措辞从“立即付款”更改为" 到 "继续",以便用户单击与下一步对应的内容。 application_context.user_action
需要 continue
才能进行此更改。
捕获订单将 return 一个 v2/payments 对象,该对象是具有自己的 ID 的已完成交易,用于记帐和退款目的。 (订单ID仅在付款人审核时使用,其他不重要)
我也遇到了这个问题,最后通过文档找到了解决方法。
您必须在您的请求中添加 application_context.return_url。
附件是PHP中的示例:
$postData = [
"intent" => "CAPTURE",
"purchase_units" => $purchase_units,
"application_context" => [
"return_url" => "",
"cancel_url" => "",
],
];
您可以通过添加应用程序上下文选项对 PayPal 支付页面进行大量自定义,有关可能的自定义的完整列表,您可以查看官方文档 Application Context Documentation