【发布时间】:2014-06-03 02:45:21
【问题描述】:
我正在尝试使用 Stripe HTTP API 发布一张新卡,并且我认为我按照文档做得对。我正在使用 cake 的 HttpSocket 直接发出请求,并且通过此处显示的输出,我认为格式正确。但我仍然收到错误:(。
Array
(
[method] => POST
[uri] => https://api.stripe.com/v1/customers/cus_49G6yn5Bj5tKkD/cards
[auth] => Array
(
[method] => Basic
[user] => <my-secret>
[pass] =>
)
[body] => Array
(
[card] => Array
(
[number] => 4242424242424242
[exp_month] => 05
[exp_year] => 2014
[name] => Card Holder
)
)
)
看到到期月份是一个 2 位数的数字,如果您查看原始请求,它已按原样发送: 这是原始请求:
POST /v1/customers/cus_49G6yn5Bj5tKkD/cards HTTP/1.1
Host: api.stripe.com
Connection: close
User-Agent: CakePHP
Authorization: Basic <my-authorization-code>
Content-Type: application/x-www-form-urlencoded
Content-Length: 109
card%5Bnumber%5D=4242424242424242&card%5Bexp_month%5D=05&card%5Bexp_year%5D=2014&card%5Bname%5D=Card+Holder
这是回应:
{
"error": {
"message": "Your card's expiration month is invalid.",
"type": "card_error",
"param": "exp_month",
"code": "invalid_expiry_month"
}
}
【问题讨论】:
-
API 可能会根据数字说日期无效,而不是格式错误。我相信有一种算法可以将数字与到期日期相关联,如果该检查失败,则到期日期无效。
-
在 API 文档的示例中,到期月份不是用零填充的。尝试只删除“0”。
-
@slim 我第一次收到错误时,数字不是零填充的。那是当我读到(原文来自 api doc)“exp_month:需要代表卡到期月份的两位数。”。我也注意到了这个例子,但我意识到这是一个“响应示例”,所以我认为它不适用于请求。
-
@DaveSwersky 如果是这种情况,我一直无法找到我需要使用的确切测试数据。在文档中,他们只提供卡号和卡类型。我会继续寻找。