繁体   English   中英

在 Google Apps 脚本中使用 Stripe API 订阅失败

[英]Subscription failed using Stripe API in Google Apps Script

我正在尝试使用Google Apps Script & Stripe制作一个插件,用户可以在其中订阅一个项目作为年度订阅。 每次我从 Stripe checkout 购买订阅时,我都会收到这样的错误,

{
  "error": {
   "code": "parameter_unknown",
   "doc_url": "https://stripe.com/docs/error-codes/parameter-unknown",
   "message": "Received unknown parameter: @45b5a607",
   "param": "@45b5a607",
   "type": "invalid_request_error"
  }
}

当我检查 Stripe Dashboard 中的日志时,我得到了这样的 POST 正文,

{
  "items": "[Ljava.lang.Object",
  "@45b5a607": null,
  "customer": "cus_Dix0eSYM5qP0kx"
}

这是我在 Google Apps Script 中的代码,

var headers = {
    "Authorization" : "Basic " + Utilities.base64Encode(USERNAME + ':' + PASSWORD)
};

var customer = {
  'email': customerEmail,
  'source': token
};

var optCreate = {
  'method' : 'post',
  "headers" : headers,
  'contentType': 'application/x-www-form-urlencoded',
  'payload' : customer,
  'muteHttpExceptions' : true
};

var createCustomer = UrlFetchApp.fetch(urlCreate, optCreate);
var respCreate = JSON.parse(createCustomer.getContentText());
var customerId = respCreate.id;
if (customerId == null) { return "Error"; }

var data = {
  "customer" : customerId,
  "items" : [
    {
      "plan" : "plan_Diuw7CdAGcSrhm"
    }
  ]
};

var options = {
  'method' : 'post',
  "headers" : headers,
  'contentType': 'application/x-www-form-urlencoded',
  'payload' : data,
  'muteHttpExceptions' : true
};

var response = UrlFetchApp.fetch(url, options);
var resp = JSON.parse(response.getContentText());
Logger.log(resp);

我想我的data JSON 对象一定是做错了什么。 items字段无法正常工作,这就是 POST body 很奇怪的原因。 这里的正确方法是什么?

您需要对有效负载进行字符串化。

var options = {
  'method' : 'post',
  "headers" : headers,
  'contentType': 'application/x-www-form-urlencoded',
  'payload' : JSON.stringify(data),
  'muteHttpExceptions' : true
};

看起来您正在发布 JSON 数据,但 Stripe 的 API 不接受 JSON — 您需要使用表单编码。 即您的代码需要将data设置为这种格式:

items[0][plan]=plan_CvVNfwZ4pYubYg&customer=cus_Diygqj4wAq6L9T

为此,您可以参考 Stripe 的 API 文档中的cURL 示例 通常,您应该使用官方库来简化 API 请求,但 Apps Script 可能无法做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM