使用提取(非NPM)删除条带订阅项目

时间:2019-03-25 15:30:49

标签: javascript stripe-payments

尝试使用如下所示的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

1 个答案:

答案 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,
});