Estoy tratando de obtener todos los datos de carga de la api de banda. De forma predeterminada, Stripe no permite obtener más de 100 datos y tengo miles de datos allí. Hay un campo en la franja llamado has_more , que proporciona información sobre si hay más datos a través de su valor verdadero/falso. Ahora. Estoy tratando de automatizar el proceso en el nodo js para que, en primer lugar, una llamada API para obtener 100 datos, luego verifique si has_more es verdadero. Si es verdadero, tomará la identificación del último objeto en los datos y comenzará a obtener datos después de esa identificación y seguirá haciéndolo hasta que has_more devuelva falso.
He hecho esto hasta ahora, que obtiene solo los primeros 100 datos. ¿Alguien puede dar alguna idea sobre el siguiente proceso?
async function getData() { const data = await axios.get( `${URL}?created%5Bgte%5D=${created}&created%5Blte%5D=${createdEnd}&limit=${limit}`, { headers: { Authorization: `Bearer ${bearer}`, "Stripe-Account": `${stripe_account}`, }, } ); return data; }Lo haría:
async function getData(startingAfter) { let url = `${URL}?created%5Bgte%5D=${created}&created%5Blte%5D=${createdEnd}&limit=${limit}` // if they pass in a startingAfter param, use it if (typeof startingAfter !== 'undefined') { url += `&starting_after=${startingAfter}` } const data = await axios.get(url , { headers: { Authorization: `Bearer ${bearer}`, "Stripe-Account": `${stripe_account}`, }, } ); // if there is more, add the additional items to this list, and // then set hasMore to false (since we fetched them all) if (data.hasMore) { const more = await getData(data[data.length - 1].id); data.data.push(...more.data) data.hasMore = false; } return data; } Esto obtendrá los primeros 100 elementos, verá que tiene más y luego llamará a getData(100) (bueno, getData('ch_whatever_the_id_is_for_#_100') ), que obtendrá los siguientes 100 elementos, luego llamará a getData(200) , etc. etc. etc., y luego su llamada inicial terminará con la lista completa.
Debe instalar la biblioteca oficial de stripe-node y usar la paginación automática incorporada de la biblioteca.
https://stripe.com/docs/api/pagination/auto?lang=node
¿También estás usando axios en la interfaz? No puede hacer eso, ya que eso significaría que está exponiendo su clave API de Stripe secreta en la interfaz, los cargos de lista son una llamada API de backend (por lo que debería poder instalar y usar stripe-node https://github.com /stripe/stripe-node )