node.js / axios AUTHENTICATION_FAILURE 与 PayPal 订阅 API

Posted

技术标签:

【中文标题】node.js / axios AUTHENTICATION_FAILURE 与 PayPal 订阅 API【英文标题】:node.js / axios AUTHENTICATION_FAILURE with PayPal Subscriptions API 【发布时间】:2020-08-16 20:24:39 【问题描述】:

我正在使用 Axios 激活 PayPal 订阅,因为 NODE SDK 不支持订阅激活。为此,我创建了这个生成PayPal 访问令牌的方法:

let getAccessToken = async () => 
    return await axios(options).then((response) => 
        return response.data.access_token
    );

选项包含以下详细信息:

const options = 
    method: 'post',
    headers: 
        'Content-Type': 'application/x-www-form-urlencoded',
        'Access-Control-Allow-Credentials': true
    ,
    data: qs.stringify(data),
    auth: 
        username: PAYPAL_CLIENT_ID,
        password: PAYPAL_CLIENT_SECRET
    ,
    url: 'https://api.sandbox.paypal.com/v1/oauth2/token'

这工作正常,但我在激活订阅时遇到了一些问题,这是处理此问题的方法:

let activateSubscription = async (accessToken, subscriptionId) => 

    return await axios.post(
        `$baseURL/v1/billing/subscriptions/$subscriptionId/activate`,
        
            headers: 
                "Authorization": `Bearer $accessToken`,
                "Content-Type": 'application/json'
            
        ).then((data) => 
            return true;
        )
        .catch((error) => 
            console.log(error.response.data);
            return false;
        );

基本上我通过了生成的accessTokensubscriptionId,但我得到了这样的响应:


  name: 'AUTHENTICATION_FAILURE',
  message: 'Authentication failed due to invalid authentication credentials or a missing Authorization header.',
  links: [
    
      href: 'https://developer.paypal.com/docs/api/overview/#error',
      rel: 'information_link'
    
  ]

我怀疑是生成的令牌不正确,所以我在邮递员中尝试了发送此请求:

host/v1/billing/subscriptions/I-7D10FGKVNMD0/activate

返回的内容是204,根据文档所说的here,这是可以的。

请求似乎正确,我做错了什么?

【问题讨论】:

您将其发送到什么 baseURL 以及您要返回什么 HTTP 标头 还有你是怎么得到I-7D10FGKVNMD0的呢?如果它来自具有正常创建设置的智能支付按钮,它将已经处于活动状态 @PrestonPHX 你可以在这里看到完整的回复:pastebin.com/325HgQwM 还有baseUrl 也是这样的:https://api.sandbox.paypal.com/v1/billing/subscriptions/I-FLXLWEUS2UXD/activate @PrestonPHX 智能支付按钮自动激活订阅,但我在application_context 中设置了user_action: "CONTINUE",,因为我需要在我的服务器端执行一些额外的检查。所以订阅状态是APPROVED。订阅参考 I-7D10FGKVNMD0 由智能支付按钮中可用的 createSubscription 方法返回:developer.paypal.com/docs/subscriptions/integrate/… 【参考方案1】:

您设置的标题错误。从粘贴箱:

data: '"headers":"Authorization":"Bearer A21AAEj_0lJjny7Hc1aL7l5irIxOqOjyW_pSfT2WC9APAQFXHTYzKL0womW1mZvS6mKWsWMytMc6H6NIMPMnOK7zhzHKHsSAw","Content-Type":"application/json"', headers: Accept: 'application/json, text/plain, */*', 'Content-Type': 'application/json;charset=utf-8', 'User-Agent': 'axios/0.19.2', 'Content-Length': 170 ,

因此,PayPal 实际上并没有获取您的 Authorization 标头

【讨论】:

我对@9​​87654322@ 函数做同样的事情,axios 接受headers 对象,并且我传递了相同的标题。我应该在axios.post 函数中更改哪些内容? .post(url, data, options),您的选项将作为数据发送 所以我改为:axios.post( $baseURL/v1/billing/subscriptions/$subscriptionId/activate, , headers: "Authorization": Bearer $accessToken, "Content-Type": 'application/json' 但得到了:The requested action could not be performed, semantically incorrect, or failed business validation. 已激活,但激活时我不应该收到错误 没错,你不应该这样做。我想知道它是如何神秘地激活的 8-)

以上是关于node.js / axios AUTHENTICATION_FAILURE 与 PayPal 订阅 API的主要内容,如果未能解决你的问题,请参考以下文章

反应 js:axios 向 node.js api 发布请求

使用 AXIOS (Node.js) 在请求之间保留 cookie

Node.js / Axios 不会连接到 localhost

yb课堂 基于浏览器和node.js的http客户端Axios 《三十四》

DarkSky API - 未处理的拒绝错误 - ReactJS / Axios / Node.js

Node.js、Vue.js 和 Passport.js。 .isAuthenticated() 总是返回 false? Axios 标头可能吗?