最终付款完成问题的状态 401

Posted

技术标签:

【中文标题】最终付款完成问题的状态 401【英文标题】:Status 401 on final payment completion issue 【发布时间】:2014-08-21 04:40:12 【问题描述】:

当我执行 Paypal 付款时,我在付款的最后阶段收到错误消息。据我所知,它是正确的,我没有错误,但这就是它返回的内容:

"body":"","headers":"Content-Type":"application/json","Date":"2014 年 6 月 30 日星期一 18:10:56 GMT","Content-Length":" 0","PROXY_SERVER_INFO":"host=slcsbjava1.slc.paypal.com;threadId=911","Paypal-Debug-Id":"b190b1adb3748","服务器":"Apache-Coyote/1.1","状态“:401

这是我正在使用的代码:

execute = XHR.send('POST', 'https://api.sandbox.paypal.com/v1/payments/payment/' + ppid[0].paymentid + '/execute', 

"header": 
  "Authorization": "Bearer " + auth,
  "Content-Type" : "application/json"
,

"parameters": 
  "payer_id": pid


);

console.log(execute);

我看不到 Paypal 调试的含义,我已经查过了,但大多数情况下我看到的是 php 问题,而不是 JS 和 cURL。

我在一篇文章中看到了将 REST API 与 Classic 混淆的帖子,但我已从 Paypal 的交互式指南中获取说明:https://devtools-paypal.com/guide/pay_paypal/curl?interactive=OFF&env=sandbox

谁能帮我解决这个问题?

更新

通过调试发现

auth
是空的,所以我修复了它,现在得到一个新错误,它是:
 错误:"message":"com.mongodb.BasicDBList 不能转换为 java.util.Map","code":"0" (@ 8 : 45) -> var innerResult = GlobalXHRInner.send(方法、url、GlobalJSON.stri

此错误会根据我发送最终标头和参数的方式而有所不同:

var newauth = "Bearer " + ppid[0].auth;

var info = "headers": ["Authorization": "'+newauth+'", "Content-Type" : "application/json"], "parameters": ["payer_id": "'+pid+'"];

console.log(info);

execute = XHR.send('POST', 'https://api.sandbox.paypal.com/v1/payments/payment/' + ppid[0].paymentid + '/execute', info );

console.log(execute);

response.success(execute);

如果我改变:

var info = "headers": ["Authorization": "'+newauth+'", "Content-Type" : "application/json"], "parameters": ["payer_id": "' +pid+'"];

对此:

var info = '"headers": ["Authorization": "'+newauth+'", "Content-Type" : "application/json"], "parameters": ["payer_id": " '+pid+'"]';

通过添加引号,我得到一个无效对象错误,我已使用 json 验证器检查并通过了该错误。当我按照指南进行操作时,这些错误真的让我很困惑:(

【问题讨论】:

【参考方案1】:

根据 PayPal 文档,此错误消息意味着:

身份验证错误 HTTP 状态码:401

身份验证错误通常是由与访问令牌相关的问题引起的:

确保包含访问令牌且正确无误。 确保访问令牌未过期。 PayPal Developer API Call Information

以下是来自PayPal Developer Access Token 的有关访问令牌的更多信息:

当您进行 API 调用时,通过使用以下语法(如 OAuth 2.0 协议中定义)在“授权”标头中添加访问令牌来发出请求:

Authorization: tokenType accessToken

示例:Authorization: Bearer EEwJ6tF9x5...4599F 访问令牌有效期和过期

PayPal 颁发的访问令牌可用于访问所有 REST API 端点。这些令牌具有有限的生命周期,您必须编写代码来检测访问令牌何时过期。您可以通过跟踪令牌请求响应中返回的“expires_in”值(该值以秒表示)或处理来自 API 的错误响应 (401 Unauthorized) 来做到这一点检测到过期令牌时的端点。

【讨论】:

谢谢,我在调试后发现它是空的 auth 变量,因为它只是给我一个我更新的新错误,因为我不确定它是否是问题的一部分如果我改变一件事,我会得到一个不同的错误,这显然仍然有效?

以上是关于最终付款完成问题的状态 401的主要内容,如果未能解决你的问题,请参考以下文章

Paypal IPN - 检查付款状态是不是已完成?

在magento中完成付款后的“涉嫌欺诈”状态?

PayPal EC 付款完成后,woocommerce 中的订单状态如何更改? [关闭]

当付款通过PayPal进入时,如何阻止magento将付款状态设置为“已完成”

使用时效性商品处理 Paypal 付款状态“已完成-资金-持有”

PayPal REST API 未执行付款。无法将付款对象的状态从“已创建”更改为“已批准”或“已完成”