Формат массива для вызова API подписки на несколько планов Stripe

#javascript #arrays #stripe-payments #velo

#javascript #массивы #stripe-платежи #velo

Вопрос:

Я пытаюсь отправить запрос на подписку на несколько планов в Stripe API. Однако у меня есть массив, подобный этому

 0: {"plan":"plan_EaDE7UnYYcicOj","quantity":"2"}
1: {"plan":"plan_EbOzfXj7R9hcdz","quantity":"2"}
  

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

 curl https://api.stripe.com/v1/subscriptions 
  -u sk_test_XXXXXXXXXXXXXXXXXX: 
  -d customer=cus_4fdAW5ftNQow1a 
  -d items[0][plan]=plan_CBXbz9i7AIOTzr 
  -d items[0][quantity]=2
  -d items[1][plan]=plan_IFuCu48Snc02bc 
  -d items[1][quantity]=2
  

Я использую метод выборки, подобный приведенному ниже

 const response = await fetch("https://api.stripe.com/v1/subscriptions", {
    method: 'post',
    headers: {
      "Content-Type": "application/x-www-form-urlencoded",
      "Authorization": "Bearer "   apiKey
    },
    body: encodeBody(customerId, items) //problem here
  });
  

Я пытался закодировать массив в надлежащий формат, но каждый раз, когда я получаю [Object Object] и идентификатор клиента объединяются из-за encode.concat

     function encodeBody(customerId, items){
      let encoded = "";

      for (let [k, v] of Object.entries(items)) {
      encoded = encoded.concat(k,"=", encodeURI(v), "amp;");
      }
      encoded = encoded.concat("customer", encodeURI(customerId));
      return encoded;
    }
  

Я новичок в использовании функции кодирования, поэтому я не понимаю, что делать.

Ответ №1:

Вы хотите, чтобы ваша строка запроса items была в этом формате:

items[0][plan]=plan_CBXbz9i7AIOTzramp;items[1][plan]=plan_IFuCu48Snc02bcamp;items[1][quantity]=2

Чтобы сделать это, вы хотите выполнить итерацию как по plans , так и по свойствам для каждого plan . Вы можете достичь этого с помощью этой реализации encodeBody() (использует ES6, поскольку я вижу, что вы уже используете const выше):

 function encodeBody(customerId, items) {
  let encoded = '';

  for (let i = 0; i < items.length; i  ) {
    const item = items[i];

    for (pair of Object.entries(item)) {
      console.log(pair);
      encoded  = `items[${i}][${pair[0]}]=${pair[1]}amp;`;
    }
  }

  encoded  = `customer=${customerId}`;

  return encoded;
}
  

Комментарии:

1. БОЛЬШОЕ ВАМ СПАСИБО!!