Estoy tratando de crear un producto en Stripe (usando Next.js + Node) con metadatos del siguiente formato:
metadata: {categories: ['foo', 'bar']}
pero parece que no puedo solucionar los valores de solo cadena en los metadatos.
La creación de un producto en el tablero de instrumentos con corchetes en el resultado del valor de los metadatos, cuando se recupera:
categories: "['foo', 'bar']"
Intentando crear con Node:
const new_product = await stripe.products.create({ name: 'new product', metadata: {categories: ['foo', 'bar']} })resultó en:
Error: Invalid value type: {:"0"=>"foo", :"1"=>"bar"} must be a string
Esto confirma que el valor debe ser una cadena. Los documentos no estaban claros en cuanto a la asignación de tipo específico:
Puede especificar hasta 50 claves, con nombres de clave de hasta 40 caracteres y valores de hasta 500 caracteres.
Pero supongo que estoy atascado con valores de cadena en los metadatos.
¿Cuál es la mejor solución para esto?
Sé que puedo recorrer un objeto siempre que sus claves sean índices, pero también querré más claves y valores de metadatos. La delimitación de cuerdas usando split suena como un dolor. Estoy seguro de que hay más formas de usar los objetos JS de manera efectiva, pero estoy tratando de ser lo más simple posible, ya que los que no son desarrolladores también querrán crear productos que sigan este arquetipo.
Gracias por cualquier ayuda.
Stripe almacena estos datos como una sola cadena y AFAIK no hay forma de evitarlo.
Sin embargo, cuando se usa una biblioteca de Stripe como la de Node.js , convierte la cadena en un objeto que puede atravesar. Creé un producto con las mismas categorías que el código que compartió y pude acceder a la propiedad .categories usando la notación de puntos.
const getProduct = async (id) => { console.log("Fetching product to evaluate metadata"); const product = await stripe.products.retrieve(id) const meta = product.metadata // console.log(meta); console.log(meta.categories); } node test.js Fetching product to evaluate metadata ["foo", "bar"]