ColdFusion 中的 Square Checkout API - 'order.total_money.amount' 必须大于 1

问题描述

我正在尝试使用 Square API 构建结帐。我收到以下错误

'order.total_money.amount' 必须大于 1。

我正在发送:

<cfset stFields = {
    "idempotency_key": "*******-258a-402e-abb5-fee8e3d16884","redirect_url": "https://graftondecafundraising.org/SquareOrderComplete.cfm","order": {
      "total_money":{
      "amount": 900},"idempotency_key": "******-258a-402e-abb5-fee8e3d16884","order": {
        "location_id": "******C7F3RZ1S5","customer_id": "customer_id","reference_id": "reference_id"
      }
    },"ask_for_shipping_address": false,"merchant_support_email": "merchant+support@website.com","pre_populate_buyer_email": "example@email.com"
  }
>

JSON 回复显示

enter image description here

预先感谢您的任何建议!

解决方法

问题出在 CF2016 中,当序列化 JSON 时,CF 没有将金额作为整数发送,即使您将其包装为 INT(#value#)。在 CF2018 和 CF2021 中,序列化 JSON 将值创建为整数,Square 很高兴。我们在 2016 年、2018 年和 2021 年测试了完全相同的代码。它在 2016 年失败,但在较新版本中运行良好。

,

这发生在很多支付 API 中,金额以美分为单位,而不是美元。

https://developer.squareup.com/reference/square/objects/Money

金额 - 整数

货币金额,以货币表示的货币的最小面额表示。例如,当货币为美元时,金额以美分为单位。货币金额可以是正数或负数。请参阅特定字段说明以确定特定情况下标志的含义。

不记得以前的公司集成了哪个 API,但发送 amount: 0 触发了全额退款。当涉及到钱时,确实需要阅读文档。