【问题标题】:Body format for Stripe POST operationsStripe POST 操作的正文格式
【发布时间】:2013-12-27 22:59:43
【问题描述】:

我直接使用 REST API(不使用库)访问条带 API,但令人惊讶的是,我找不到有关适当正文格式发布数据的文档。

Stripe 是否需要 JSON 或表单编码对?

【问题讨论】:

  • 是的。您基本上必须查看 curl 示例并推断出正文格式为x-www-form-urlencoded

标签: stripe-payments


【解决方案1】:

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

例如 键1=值1&键2=值2

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

【讨论】:

    【解决方案2】:

    这是 Nodejs 的 curl 代码示例 我正在解决类似的问题

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

    这是stripe提供的示例 https://stripe.com/docs/api/checkout/sessions/create

    curl https://api.stripe.com/v1/checkout/sessions \
    >   -u stripe_key_here: \
    >   -d success_url="https://example.com/success" \
    >   -d cancel_url="https://example.com/cancel" \
    >   -d "payment_method_types[]=card" \
    >   -d "line_items[][name]=T-shirt" \
    >   -d "line_items[][description]=Comfortable cotton t-shirt" \
    >   -d "line_items[][amount]=1500" \
    >   -d "line_items[][currency]=usd" \
    >   -d "line_items[][quantity]=2"
    

    -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}` : "";
    }
    
    

    【讨论】:

      【解决方案3】:

      表单编码对

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

      返回的数据是JSON

      【讨论】:

      • 谢谢,但我不熟悉 cURL,所以不清楚 -d 的意思。听起来您是在说 POST 始终是形式编码的,响应是 JSON。但如果是这样的话......用户如何发布元数据元素,它代表一个子对象也包含键/值对......我认为你需要 JSON 来嵌套一个子对象。跨度>
      • 仅供参考,我刚刚在stripe.com/blog 上注意到表单编码格式为:metadata[key]=value
      【解决方案4】:

      以下是使用测试卡的 cURL 收费示例:

      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"
      

      用您的条带测试密钥交换 your_test_key。 请记住在您的密钥后保留 : 以免被要求输入密码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2018-04-27
        相关资源
        最近更新 更多