【发布时间】:2013-12-27 22:59:43
【问题描述】:
我直接使用 REST API(不使用库)访问条带 API,但令人惊讶的是,我找不到有关适当正文格式发布数据的文档。
Stripe 是否需要 JSON 或表单编码对?
【问题讨论】:
-
是的。您基本上必须查看 curl 示例并推断出正文格式为
x-www-form-urlencoded。
标签: stripe-payments
我直接使用 REST API(不使用库)访问条带 API,但令人惊讶的是,我找不到有关适当正文格式发布数据的文档。
Stripe 是否需要 JSON 或表单编码对?
【问题讨论】:
x-www-form-urlencoded。
标签: stripe-payments
您需要发布原始数据,例如键值对。 (无 Json)
例如 键1=值1&键2=值2
确保在标题中包含以下内容 Content-Type = application/x-www-form-urlencoded
【讨论】:
这是 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}` : "";
}
【讨论】:
表单编码对
docs for cURL 提供了很好的例子。他们只是通过命令行上的 cURL 通过-d 开关提供表单编码的键/值对。只要确保您使用您的测试密钥,就不会搞砸任何实时数据。然后,您可以随心所欲地玩耍。
返回的数据是JSON。
【讨论】:
以下是使用测试卡的 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。 请记住在您的密钥后保留 : 以免被要求输入密码。
【讨论】: