You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets通过Stripe API批量添加银行卡失败求助

批量添加Stripe银行卡异常问题修复

问题分析

核心问题是控制台输出了UrlFetchApp.Response对象的方法集合而非预期的JSON响应,同时代码存在性能冗余和请求配置不严谨的问题。

修复步骤及优化方案

1. 修正响应输出逻辑

原代码直接打印response对象,导致输出的是对象的方法列表,需改为调用getContentText()获取JSON格式的响应文本,与单卡成功逻辑保持一致。

2. 批量读取数据提升性能

循环内反复调用getRange()会大幅降低脚本执行效率,建议一次性读取所有目标数据到数组,再遍历数组处理。

3. 显式声明请求方法

虽然UrlFetchApp默认使用POST请求,但显式设置method: "POST"能让代码逻辑更清晰,避免潜在的请求方法错误。

修复后的完整代码

function StripeAddMultiCard(){
    var PaymentSSID = "********************";
    var WorkingSS = SpreadsheetApp.openById(PaymentSSID);
    var WorkingSheet = WorkingSS.getSheetByName("StripeToAdd");
    
    // 一次性读取所有目标数据行
    var CardsToAdd = WorkingSheet.getRange(1, 1).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() - 1;
    var allData = WorkingSheet.getRange(2, 1, CardsToAdd, 14).getValues();
    
    // 遍历数据数组处理每一条记录
    for (var i=0; i<allData.length; i++){
      var rowData = allData[i];
      var cardname = rowData[1]; // 第2列(索引从0开始)
      var cardno = rowData[2];   // 第3列
      var cardcvc = rowData[4];  // 第5列
      var custID = rowData[11];  // 第12列
      var cardexpmo = rowData[12]; // 第13列
      var cardexpyr = rowData[13]; // 第14列
      var url= "https://api.stripe.com/v1/customers/" + custID + "/sources";

      console.log("source[number]: " + cardno); 
      console.log("source[exp_month]: " + cardexpmo);
      console.log("source[exp_year]: " + cardexpyr);
      console.log("source[cvc]: " + cardcvc);
      console.log("source[name]: " + cardname);
      console.log("request url: " + url);
      
      var params = {
        method: "POST", // 显式声明POST请求
        headers: {Authorization: "Basic " + Utilities.base64Encode("sk_live_*********************:")},
        payload: {
          "source[object]": "card",
          "source[number]": cardno, 
          "source[exp_month]": cardexpmo,
          "source[exp_year]": cardexpyr,
          "source[name]": cardname,
          "source[cvc]": cardcvc
        },
        muteHttpExceptions: true
      };
      
      var response = UrlFetchApp.fetch(url, params);
      // 打印JSON格式的响应文本
      console.log(response.getContentText());
      Utilities.sleep(51);
   }
}

额外提示

  • 若需提取响应中的具体字段,可解析JSON后操作:
    const jsonResponse = JSON.parse(response.getContentText());
    console.log("已添加卡片ID: " + jsonResponse.id);
    
  • 调试阶段可暂时关闭muteHttpExceptions: true,直接查看请求错误信息;生产环境建议开启并添加错误捕获逻辑。

内容的提问来源于stack exchange,提问作者Adam of City Compost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:24:18