【问题标题】:POST REFUND returned error 400 since Feb ~10th [closed]自 2 月 ~10 日以来,POST REFUND 返回错误 400 [关闭]
【发布时间】:2015-03-08 10:33:22
【问题描述】:

我有一个脚本处理一些退款付款,这些付款从大约2月10日。服务器响应 Content-Type is not supported ... 即使我的标头 Content-Type 看起来确实正确

相同的代码在该日期之前工作,这让我相信服务器端发生了一些变化,但我最近在 square-connect API 更改日志中没有注意到任何可以解释这个问题的内容。

任何帮助将不胜感激:) 谢谢

请参阅下面的 JSON 请求和响应。

{"method":"POST",
  "headers":
    {"Authorization":"Bearer [mypersonalid]",
     "Accept":"application/json",
     "Content-Type":"application/json"},
     "payload":
       {"payment_id":"[paymentid]",
        "type":"FULL",
        "reason":"reason"
       }
    }"
}


{"type":"bad_request",
 "message":"The Content-Type of this request is not supported. 
            Supported     type(s): application/json"
}

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为 SO 不是 Square 客户支持门户。请直接联系 Square。
  • 感谢您的提问。您使用哪种语言/平台向 Connect API 发送请求?
  • @StephenBarlow Javascript/Google 应用脚本。我正在使用 UrlFetchApp.fetch 方法进行发布,该方法采用我描述的 url 和参数。由于我使用的个人令牌 id URL 是connect.squareup.com/v1/me/refunds
  • 感谢您的澄清。请参阅下面特洛伊的回答。

标签: square-connect


【解决方案1】:

由于您使用的是 Google App Script,看来您必须使用特殊的 contentType 参数 (docs here) 设置 Content-Type 标头。这样,Google Apps 脚本就知道将负载序列化为 JSON 而不是多部分表单数据。如果您只是将其指定为标头,Google 将覆盖它。

【讨论】:

    【解决方案2】:

    非常感谢您的 cmets。解决了!

    我已在参数中添加了 contentType,但它不起作用,但我开始收到一个新错误,提示“错误的 json 对象”。 Si,我刚刚搜索了一下,发现“有效负载”对象的实际编码需要是“字符串化”。请参阅 user1021710 的回答:https://stackoverflow.com/a/18851043/4615977(“带有 JSON 有效负载的 Google Apps 脚本 UrlFetchApp”)

    所以在这种情况下,contentType 是必要的,然后是有效负载的编码。 Google 显然在 2 月中旬左右更改了他们自己的 API,因为代码相同并且可以正常工作。

    谢谢大家!!!

    使用谷歌应用脚​​本发布退款请求的基本代码示例:

    var headers = {
      "Authorization" : autorization,
      "Accept": 'application/json',
      "Content-Type": "application/json",
    };
    
    var payload = {
       "payment_id" : paymentid,
       "type" : type,  
       "reason" : reason,
    };
    
    var params = {
      "contentType": "application/json",
      "headers" : headers,
      "method" : "post",
      "payload" : JSON.stringify(payload),
    };
    
    var url = "https://connect.squareup.com/v1/me/refunds";
    paymentsFetch = UrlFetchApp.fetch(url, params);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 1970-01-01
      • 2014-01-15
      相关资源
      最近更新 更多