node.js / ax ios AUTHENTICATION_FAILURE с API подписок PayPal - PullRequest
1 голос
/ 02 мая 2020

Я использую Ax ios для активации подписки 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;
        });
}

По сути, я передаю сгенерированные accessToken и subscriptionId, но в качестве ответа получаю следующее:

{
  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, что нормально в соответствии с тем, что делают c говорит здесь .

Запрос кажется правильным, что я делаю не так?

1 Ответ

1 голос
/ 02 мая 2020

Вы неправильно устанавливаете заголовки. Из пастбина:

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 фактически не получает ваш заголовок авторизации

...