Где хранить токены доступа API (Paypal) на стороне сервера (node.js) - PullRequest
0 голосов
/ 27 июня 2019

Я использую API PayPal для настройки оплаты подписки на моем сайте. Я знаю, что есть SDK узла PayPal, но, к сожалению, они не обновили его соответствующим образом и устарели, когда дело доходит до подписок.

Мне удалось получить токен доступа и использовать его для выполнения вызовов и т. Д., Однако нет смысла получать токен доступа каждый раз, когда я вызываю их API. Какой самый идеальный способ хранения самого токена доступа, времени истечения токена и времени создания токена. Время истечения и время создания токена будут использоваться для проверки того, не истек ли токен, прежде чем пытаться получить новый.

Я создал приведенный ниже js-файл, который будет использоваться через await paypal.getToken ()

async function getToken(){
  return new Promise((resolve, reject) => {
    if(//Token expired) {

      request.post({
        uri: "https://api.sandbox.paypal.com/v1/oauth2/token",
        headers: {
          "Accept": "application/json",
          "Accept-Language": "en_US",
          "content-type": "application/x-www-form-urlencoded"
        },
        auth: {
          'user': clientID,
          'pass': clientSecret,
        },
        form: {
          "grant_type": "client_credentials"
        }
      }, function(error, response, body) {
        if(error)
        reject(new Error(error))
        else {

          //Set global variable or whats best option with the access token that was obtained  - JSON.parse(body).access_token
          //Set global variable or whats best option with the expiry time - SON.parse(body).expires_in
          //Set global vairable or whats best option with the current time in MS - Date.now()
          resolve(JSON.parse(body).access_token);
        }
      });
    }else {
      // resolve(config.paypal_access_token); //Retrieve access_token from global vairable or whats best option
    }
  });

}

module.exports.getToken = getToken;

1 Ответ

0 голосов
/ 27 июня 2019

Я думаю, что лучший способ хранить токен в БД, а также в хранилище данных, таком как Redis.Это моя идея от всей души

  1. Сохранить токен, время генерации, срок действия в БД.Также в кеше.
  2. Создайте промежуточное ПО для добавления токена в каждый запрос.
  3. Если, скажем, сервер Redis перезапустился, вы потеряете кеш, а затем получите данные из БД.если истек срок действия, повторите аутентификацию.
...