簡體   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