尝试使用如下所示的Fetch方法删除条带订阅项目
export async function update(subItemId, data) {
const apiKey = "sk_test_XXXXXXXXX";
const response = await fetch("https://api.stripe.com/v1/subscription_items/" + subItemId, {
method: 'post',
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": "Bearer " + apiKey
},
body: encodeBody(data)
});
if (response.status >= 200 && response.status < 300) {
const ret = await response.json();
let alphastatus = 'approved';
return {ret, "alphastatus": alphastatus};
}
let res = await response.json();
let alphastatus = 'declined';
return {res, "alphastatus": alphastatus};
}
function encodeBody(data){
let encoded = "";
for (let [k, v] of Object.entries(data)) {
encoded = encoded.concat(k,"=", encodeURI(v), "&");
return encoded;
}
}
我尝试传递参数'deleted:true',但是它返回一条错误消息,提示无法识别'deleted'参数。
当前,我正在尝试从页面发送以下参数:
let data = {
"deleted": true,
"prorate": "false"
};
update(subItemId, data)
我尝试按照文档进行操作,但是我不明白如何像下面这样传递DELETE
curl https://api.stripe.com/v1/subscription_items/si_ElRqBpvFaZlfnq \
-u sk_test_XXXXXXXXXXXX: \
-X DELETE
答案 0 :(得分:0)
我建议使用stripe-node库-因为您应该使用Node在后端服务器上编写此代码。您永远都不应运行这种从前端(例如浏览器)访问订阅API并在该环境中使用访存的代码,因为这意味着您的Stripe秘密密钥将被暴露和泄露。
await stripe.subscriptionItems.del(
subItemId,
{
prorate : false
}
);
https://stripe.com/docs/api/subscription_items/delete?lang=node
另一种方法(更接近原始代码)是这样的:
let planToRemove = "plan_EauxYB7fNpQtLn"
let items = subscription.items.data;
items = items.filter(item => item.plan.id == planToRemove)
.map(item => { return {id: item.id, deleted:true} })
await stripe.subscriptions.update(subscription.id, {
items : items,
prorate : false,
});