【问题标题】:Try to catch a managed PayPalCheckoutSdk.Orders.OrdersCreateRequest error from PHP server in the JavaScript client side尝试从 JavaScript 客户端的 PHP 服务器捕获托管的 PayPalCheckoutSdk.Orders.OrdersCreateRequest 错误
【发布时间】:2021-02-18 08:55:59
【问题描述】:

我想设置 PayPal 标准付款方式:

我使用示例,代码经过一些修改即可工作。我从服务器收到orderId 并在客户端继续处理(显示支付弹出窗口,...)

现在我想处理 CreateOrder 在服务器端失败的情况。在这种情况下,我发回一个 HTTP 错误代码:header('HTTP/1.1 500 xxxxxx')

在客户端,不可能有无错误的处理。我总是在控制台中收到错误:'create_order_error' 或/和'click_initiate_payment_reject'。

我尝试过在 promise 上使用 catch 函数,或者返回 Promise.reject('xxx'),但对此没有任何作用。

你有解决办法吗?

【问题讨论】:

    标签: javascript paypal promise fetch


    【解决方案1】:

    如果服务器上的 createOrder 失败,请不要发回 id(或 orderId,如果您正在命名您的密钥)值。没有id 会导致足够的错误,尽管您也可以发送回单独的附加键来描述错误情况,例如从 PayPal API 发送回整个 JSON 对象(如果您愿意to) 仅供参考。它将在“网络”选项卡中可见并有助于调试。您不需要发回 HTTP 500,这可能不合适,具体取决于错误的类型(4xx 可能更合适),并且 - 与 XMLHttpRequest 或 .ajax() 不同 - fetch 无论如何都会忽略此类状态,除非你明确检查status.ok

    在尝试捕获之后,您确实需要更多关注错误处理的地方是onApprove 函数,因为这会产生业务逻辑后果。这是最好的 JS 示例演示:https://developer.paypal.com/demo/checkout/#/pattern/server

    【讨论】:

    • 感谢您的回答。如果我不返回 orderID(或空值),我会在浏览器控制台中出现错误:click_initiate_payment_reject : {err: "Expected an order id to be passed ..."} 我知道 onApprove 对业务规则更重要,但我想让订单创建比在样本(例如,如果我的服务器无法访问 PayPal)。我使用 HTTP 500 只是为了测试 ;-)
    • 关于你的链接,如果你用未知的url(例如)修改了fetch url,你会在控制台出错!!! "unhandled_error", "Uncaught Error", "create_order_error", "click_initiate_payment_reject", ... 我想捕捉这些错误并向用户显示一条消息(例如服务不可用)
    • 我已经测试过这个 onError 但它只捕获来自 fetch 的错误,而不是来自按钮的错误
    • @JB64 - 我们遇到了很多相同的问题。 Paypal 的文档并不是那么好。由于 iframe 的可用范围有限,我们决定只调用 alert() 以让用户知道我们在访问 Paypal 时遇到了问题,我们将错误记录在后端以供稍后调查。这是我们目前想出的最好的。
    猜你喜欢
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多