开发者问题收集

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

2018-10-04
309

我正在尝试使用 Google Apps ScriptStripe 制作一个插件,用户可以按年订阅某个商品。每次我从 Stripe 结账处购买订阅时,都会收到这样的错误,

{
  "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 仪表板中检查日志时,我得到了这样的 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 正文奇怪的原因。这里正确的方法是什么?

2个回答

您需要将有效载荷字符串化。

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

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

487359221

您可以参考 卷曲示例 在Stripe的API文档中。通常,您应该使用 官方库 来简化提出API请求的简化,但对于应用程序脚本可能是不可能的。

karllekko
2018-10-04