【问题标题】:Apps script: SumUp api requests giving error 400应用程序脚本:SumUp api 请求给出错误 400
【发布时间】:2022-06-24 15:24:33
【问题描述】:

我正在将在线支付集成到网络应用中。为此,我使用了 SumUp API。它需要简单的http请求。这是我正在使用的文档的一部分:https://developer.sumup.com/docs/single-payment/

我对 API 访问令牌的初始请求工作正常。但是在创建结帐资源时会出现问题。我检查了很多次,我的 JSON 似乎是正确的。这些值也都很好。但是,当我运行代码时,SumUp 服务器会返回:

Request failed for https://api.sumup.com returned code 400. Truncated server response: {"error":"Unexpected token a in JSON at position 0"}

这是我的代码:

var pay_headers = {
  "Authorization": `Bearer ${access_token}`,
  "Content-Type": "application/json"
};

var pay_details = {
  "checkout_reference": "SH8Q0B5C", //random string of letters and numbers
  "amount":10,
  "currency":"GBP",
  "pay_to_email": "docuser@sumup.com",
  "description":"Sample one-time payment"
};

var pay_options = {
  "method": "post",
  "headers": pay_headers,
  "payload": pay_details
};

var pay_response = UrlFetchApp.fetch("https://api.sumup.com/v0.1/checkouts",pay_options).getContentText();

这有什么问题吗?我将不胜感激任何帮助,因为这是一个有问题的问题。谢谢

【问题讨论】:

    标签: json google-apps-script sumup-payments


    【解决方案1】:

    当我看到您提供的文档时,示例 curl 如下。 Ref

    curl -X POST \
      https://api.sumup.com/v0.1/checkouts \
      -H 'Authorization: Bearer 565e2d19cef68203170ddadb952141326d14e03f4ccbd46daa079c26c910a864' \
      -H 'Content-Type: application/json' \
      -d '{
            "checkout_reference": "CO746453",
            "amount": 10,
            "currency": "EUR",
            "pay_to_email": "docuser@sumup.com",
            "description": "Sample one-time payment"
          }'
    

    如果此 curl 命令转换为 Google Apps 脚本,如何修改您的脚本如下?

    发件人:

    "payload": pay_details
    

    收件人:

    "payload": JSON.stringify(pay_details)
    

    注意:

    • 当上述修改反映到你的脚本时,出现错误时,能否提供错误信息?

    补充:

    当上述修改反映到您的脚本时,请求与示例 curl 命令相同。根据您的以下回复,

    问题在于脚本中的前一个 API 请求(获取访问令牌的那个)有效负载可以在不使用 stringify 的情况下正常工作。我确实尝试过这个有效载荷,但它给了我一个 403 禁止。以下是错误消息:异常:https://api.sumup.com 的请求失败,返回代码 403。截断的服务器响应:{"error_message":"request_not_allowed","error_code":"FORBIDDEN","status_code":403}。这个错误也可以通过删除请求的其他各个部分来复制,所以我不确定使用 stringify 是否有益......

    如果您的访问令牌和您的请求正文是有效值,来自状态代码的403,我担心在您的情况下,可能无法完成来自 Google 方面的访问。

    参考:

    【讨论】:

    • 感谢您的回答。问题在于脚本中的前一个 API 请求(获取访问令牌的那个)有效负载可以在不使用 stringify 的情况下正常工作。我确实尝试过这个有效载荷,但它给了我一个 403 禁止。这是错误消息:Exception: Request failed for https://api.sumup.com returned code 403. Truncated server response: {"error_message":"request_not_allowed","error_code":"FORBIDDEN","status_code":403}。也可以通过删除请求的其他各个部分来复制此错误,因此我不确定使用 stringify 是否有益...
    • @Gamaray 感谢您的回复。在你的情况下,我第一次知道状态码的403。如果您的访问令牌和您的请求正文是有效值,来自状态码的403,我担心在您的情况下,可能无法完成来自 Google 方面的访问。
    • 我明白了。感谢您的帮助,如果不可能,我不想浪费时间。我将在应用程序脚本之外尝试。如果它在那里工作,那么我会勾选你的答案。我怀疑它会在查看参数时一切看起来都很好。再次感谢。
    • @Gamaray 感谢您的回复。在您的情况下,我建议您使用除 Google Apps 脚本之外的其他脚本。例如,使用 Javascript 怎么样?如果您在电子表格上手动运行脚本,则可以在电子表格上的对话框中使用 Javascript 来实现您的目标。在这种情况下,这个错误可能可以被删除。这个怎么样?
    • 谢谢,我会试一试。我将尝试将 XMLHttpRequest 与 javascript 一起使用,看看是否能给我带来更好的结果。
    【解决方案2】:

    此处的最终 403 错误是由于 Sumup API 上的要求记录不充分。基本上,您必须请求您的帐户(无论是测试帐户还是实时帐户)被授予 API 支付部分的范围。 如果您没有这个,您可以获得访问令牌,但在创建结帐时会收到 403 错误。 节省一些时间并遵循以下步骤:(我没有) https://github.com/sumup/sumup-ecom-php-sdk/issues/24

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 2017-01-22
      • 2020-10-28
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多