尝试在JavaScript客户端从PHP服务器捕获托管PayPalCheckoutSdk.Orders.OrdersCreateRequest错误

尝试在JavaScript客户端从PHP服务器捕获托管PayPalCheckoutSdk.Orders.OrdersCreateRequest错误,javascript,paypal,promise,fetch,Javascript,Paypal,Promise,Fetch,我想通过以下方式设置PayPal标准支付: 来自PayPal的JavaScript SDK 以及处理从PHP后端创建和捕获订单 我使用了这些示例,代码经过了一些修改。我从服务器接收到orderId,并在客户端继续处理(显示付款弹出窗口,…) 现在我想处理CreateOrder在服务器端失败的情况。在本例中,我返回一个HTTP错误代码:头('HTTP/1.1500 xxxxxx') 在客户端,不可能进行无错误处理。我总是在控制台中收到一个错误:“创建订单错误”或/和“单击启动付款拒绝” 我尝试

我想通过以下方式设置PayPal标准支付:

  • 来自PayPal的JavaScript SDK
  • 以及处理从PHP后端创建和捕获订单
我使用了这些示例,代码经过了一些修改。我从服务器接收到
orderId
,并在客户端继续处理(显示付款弹出窗口,…)

现在我想处理CreateOrder在服务器端失败的情况。在本例中,我返回一个HTTP错误代码:
头('HTTP/1.1500 xxxxxx')

在客户端,不可能进行无错误处理。我总是在控制台中收到一个错误:“创建订单错误”或/和“单击启动付款拒绝”

我尝试在promise上使用catch函数,或者返回promise.reject('xxx'),但没有任何效果


您有解决方案吗?

如果服务器上的createOrder出现故障,只需不发回
id
(或者
orderId
,如果您正在命名密钥)值即可。没有
id
会导致足够的错误,尽管您也可以发回单独的、描述错误情况的附加键,例如从PayPal API发回整个JSON对象(如果您愿意),以供参考。它将在“网络”选项卡中可见,并有助于调试。您不需要发回HTTP 500,根据错误的类型,HTTP 500可能不合适(4xx可能更合适),并且与XMLHttpRequest或.ajax()不同,fetch无论如何都会忽略这些状态,除非您显式检查
状态。ok


在尝试捕获后,您确实需要更加关注错误处理的是
onApprove
函数,因为这会产生业务逻辑后果。下面是最好的JS示例演示:谢谢你的回答。如果我没有返回orderID(或空值),我会在浏览器控制台中出错:
单击“启动”\u“付款”\u拒绝:{err:“期望传递订单id…”
我知道onApprove对于业务规则更为重要,但我希望使订单创建比示例中的订单创建更健壮(例如,如果我的服务器无法访问PayPal)。我使用HTTP 500只是为了测试;-)关于yout链接,如果您使用未知url(例如)修改获取url,您将在控制台中出错!!!“未处理错误”、“未捕获错误”、“创建订单错误”、“单击启动付款拒绝”。。。我想捕获这些错误并向用户显示一条消息(例如,服务不可用)。有一个
onError
功能:我已经测试了这个onError,但它只捕获来自fetch的错误,而不是来自fetch的错误buttons@JB64-我们遇到了很多相同的问题。贝宝的文档不是很好。由于iframe的可用范围有限,我们决定只调用alert(),让用户知道我们在联系Paypal时遇到了问题,并将错误记录在后端以便稍后进行调查。这是我们目前想出的最好的办法。