【问题标题】:How curl maps onto Google App Script URLFetchAppcurl 如何映射到 Google App 脚本 URLFetchApp
【发布时间】:2018-12-18 03:11:07
【问题描述】:

我希望在 Google Apps 脚本中实现 Stripe,它带有用于与第三方通信的 URLFetch 功能。但是,我对 Stripe 使用的 curl 格式如何映射到 URLFetch 感到困惑。

这是他们文档中的 Stripe 调用示例:

curl https://api.stripe.com/v1/charges \
-u testtoken123: \
-H "Idempotency-Key: testkey" \
-d amount=2000 \
-d currency=usd \
-d description="Charge for jenny.rosen@example.com" \
-d source=tok_mastercard

URLFetchApp 文档在这里:https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app

curl 调用中的标志是否直接映射到 URLFetch 中的参数?

【问题讨论】:

  • 我能问你的问题吗? 1. 您确认您的卷曲样本是否正常工作? 2. 你能提供你目前的剧本吗?我认为这些信息将帮助用户思考您的解决方案。
  • 大部分属性将转到UrlFetchApp.fetch 中的Options 参数:您可以将-u 作为authorization header-H 作为通常的标头对,-d 作为payload .

标签: javascript google-apps-script stripe-payments


【解决方案1】:

以下是可用于在 Google Apps 脚本中调用 Stripe API 的帮助函数示例。

function getAuthHeader(){
  var apiKey = "STRIPE_API_KEY__CONSIDER_TO_GENERATE_A_KEY_WITH_LIMITED_SCOPE";
  var authHeader = 'Basic ' +Utilities.base64Encode(apiKey);
  return {
    headers: {Authorization: authHeader}
   }
}

function goFetch(url){
  var reponse; 
  try{
    reponse = JSON.parse(UrlFetchApp.fetch(url,getAuthHeader()).getContentText());
  }catch(err){
    Logger.log(err);
  }
  return reponse;
}

使用示例,列出费用:

function listCharges(lim){
  var url = 'https://api.stripe.com/v1/charges?'+limit=lim;
  return goFetch(url);
}
Logger.log(listCharges(10));

在您的示例中,您正在使用curl 发出发布请求。来自 curl 手册:

-d,--数据 (HTTP) 将 POST 请求中的指定数据发送到 HTTP 服务器,就像浏览器在用户填写 HTML 表单并按下提交时所做的一样 按钮。这将导致 curl 使用 content-type application/x-www-form-urlencoded 将数据传递给服务器。与 -F、--form 比较。

UrlFetchApp reference manual 中,您可以找到以下内容:

// Make a POST request with form data.
var resumeBlob = Utilities.newBlob('Hire me!', 'text/plain', 'resume.txt');
var formData = {
  'name': 'Bob Smith',
  'email': 'bob@example.com',
  'resume': resumeBlob
};
// Because payload is a JavaScript object, it will be interpreted as
// as form data. (No need to specify contentType; it will automatically
// default to either 'application/x-www-form-urlencoded'
// or 'multipart/form-data')
var options = {
  'method' : 'post',
  'payload' : formData
};
UrlFetchApp.fetch('https://httpbin.org/post', options);

所以goPost 函数应该是这样的:

function goPost(url,data){
   var options = {
   'method' : 'post',
   'payload' : data,
   'headers': getAuthHeader()['headers']
   };
   var response; 
   try{
     response = JSON.parse(UrlFetchApp.fetch(url,options).getContentText());
   }catch(err){
    Logger.log(err);
   }
   return response;
 }

示例用法:

var data = {
  amount: 2000,
  currency: 'usd',
  source: 'tok_amex',
  description: 'Charge for jenny.rosen@example.com'
}
var result = goPost('https://api.stripe.com/v1/charges',data);
Logger.log(result);

【讨论】:

    猜你喜欢
    • 2020-08-31
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多