Stripe payments 条带POST操作的正文格式

Stripe payments 条带POST操作的正文格式,stripe-payments,Stripe Payments,我使用RESTAPI直接访问StripeAPI(不使用库),但令人惊讶的是,我找不到关于适当正文格式post数据的文档 Stripe需要JSON或表单编码对吗?表单编码对 报告提供了很好的例子。它们只是通过命令行上的cURL通过-d开关输入表单编码的键/值对。只要确保使用测试密钥,就不会弄乱任何实时数据。然后你可以随心所欲地玩 返回的数据是JSON 您需要发布原始数据,如键值对。(无Json) e、 g。 键1=值1和键2=值2 确保在标题中包含以下内容 Content Type=applica

我使用RESTAPI直接访问StripeAPI(不使用库),但令人惊讶的是,我找不到关于适当正文格式post数据的文档

Stripe需要JSON或表单编码对吗?

表单编码对

报告提供了很好的例子。它们只是通过命令行上的cURL通过
-d
开关输入表单编码的键/值对。只要确保使用测试密钥,就不会弄乱任何实时数据。然后你可以随心所欲地玩


返回的数据是
JSON

您需要发布原始数据,如键值对。(无Json)

e、 g。 键1=值1和键2=值2

确保在标题中包含以下内容
Content Type=application/x-www-form-urlencoded

下面是一个使用测试卡的示例:

curl https://api.stripe.com/v1/charges -u your_test_key: -d card[number]=4000056655665556 -d card[exp_month]=11 -d card[exp_year]=2020 -d amount=100 -d currency=eur -d description="Stripe cUrl charge test"
将\u测试\u密钥与条带测试密钥交换。
请记住:在您的密钥之后,不要被要求输入密码。

以下是Nodejs的curl代码示例 我正在研究一个类似的问题

正如您所知,我们不能为“post”方法发送JSON 它必须是URL编码的

这是stripe提供的样品

-u表示我们在标题中提供的授权
-d表示url的主体

节点js中的示例代码


const fetch = require("node-fetch");
const stripeKey = process.env.STRIPE_KEY;

async function getCheckoutID() {
  try {
    const endpoint = "https://api.stripe.com/v1/checkout/sessions";

    const query = objToQuery({
      success_url: "https://example.com/success",
      cancel_url: "https://example.com/cancel",
      "payment_method_types[]": "card",
      "line_items[][name]": "T-shirt",
      "line_items[][description]": "Comfortable cotton t-shirt",
      "line_items[][amount]": 1500,
      "line_items[][quantity]": 1,
      "line_items[][currency]": "usd"
    });

    // enpoint => "https://www.domin.com/api"
    // query => "?key=value&key1=value1"
    const URL = `${endpoint}${query}`;

    const fetchOpts = {
      method: "post",
      headers: {
        "Authorization": `Bearer ${stripeKey}`,
        "Content-Type": "application/x-www-form-urlencoded"
      }
    }
    const checkout = await getJSON(URL, fetchOpts);

    console.log("CHECKOUT OBJECT : " , checkout);

    return checkout;
  }
  catch(e) {
      console.error(e);
   }
}


// hepler functions

// instead of using fetch
// getJSON will make it readable code
async function getJSON(url, options) {
  const http = await fetch(url, options);
  if (!http.ok) {
    console.log(http);
    throw new Error("ERROR STATUS IS NOT OK :");
  }
  return http.json();
}

// convert JS object to url query
// {key:"value" , key1: "value1"} to "key=value&key1=value1"
function objToQuery(obj) {
  const query = Object.keys(obj).map( k => `${k}=${obj[k]}`).join("&");
  return query.length > 0 ? `?${query}` : "";
}


谢谢,但我对cURL不太熟悉,所以不清楚-d的意思。听起来你是说帖子总是用表单编码,而响应是JSON。但如果是这样的话。。。用户如何发布元数据元素,该元素将表示同时包含键/值对的子对象。。。我想您需要JSON来嵌套子对象。仅供参考,我刚刚注意到,格式编码格式是:metadata[key]=valueYes。基本上,您必须查看curl示例并推断主体格式为
x-www-form-urlencoded

const fetch = require("node-fetch");
const stripeKey = process.env.STRIPE_KEY;

async function getCheckoutID() {
  try {
    const endpoint = "https://api.stripe.com/v1/checkout/sessions";

    const query = objToQuery({
      success_url: "https://example.com/success",
      cancel_url: "https://example.com/cancel",
      "payment_method_types[]": "card",
      "line_items[][name]": "T-shirt",
      "line_items[][description]": "Comfortable cotton t-shirt",
      "line_items[][amount]": 1500,
      "line_items[][quantity]": 1,
      "line_items[][currency]": "usd"
    });

    // enpoint => "https://www.domin.com/api"
    // query => "?key=value&key1=value1"
    const URL = `${endpoint}${query}`;

    const fetchOpts = {
      method: "post",
      headers: {
        "Authorization": `Bearer ${stripeKey}`,
        "Content-Type": "application/x-www-form-urlencoded"
      }
    }
    const checkout = await getJSON(URL, fetchOpts);

    console.log("CHECKOUT OBJECT : " , checkout);

    return checkout;
  }
  catch(e) {
      console.error(e);
   }
}


// hepler functions

// instead of using fetch
// getJSON will make it readable code
async function getJSON(url, options) {
  const http = await fetch(url, options);
  if (!http.ok) {
    console.log(http);
    throw new Error("ERROR STATUS IS NOT OK :");
  }
  return http.json();
}

// convert JS object to url query
// {key:"value" , key1: "value1"} to "key=value&key1=value1"
function objToQuery(obj) {
  const query = Object.keys(obj).map( k => `${k}=${obj[k]}`).join("&");
  return query.length > 0 ? `?${query}` : "";
}