首先,请原谅我,如果这被认为是模糊的,这是我第一次发布到Stack Exchange。
希望这不是一个形成不良的问题,我确实给了它一些思考,尽管它假设熟悉CURL,Stripe和Angular。
问题:
我正在尝试使用Angular.js的$ http为Stripe API重新创建CURL的结果,并且在执行此操作时遇到了一些麻烦。
使用CURL,我可以按如下方式创建卡片令牌:
curl -X POST https://api.stripe.com/v1/tokens \
-u MY_TEST_KEY: \
-d "card[number]"=4242424242424242 \
-d "card[exp_month]"=12 \
-d "card[exp_year]"=2017 \
-d "card[cvc]"=123
这给了我“tok_blahblahbcryptnonsense”
之类的东西但是,我似乎无法将此CURL转换为Angular $ http函数,并且我返回状态代码400,并显示消息“您必须传递完整的卡片详细信息才能创建令牌。”
$http({
method: 'POST',
url: 'https://api.stripe.com/v1/tokens',
headers: {
'content-type': 'application/json',
'Authorization': 'Bearer MY_TEST_KEY'
},
params: {
card: {
"number": '4242424242424242', // I have tried this as
// an integer and string
// Stripe docs say string
"exp_month": 12,
"exp_year": 2017,
"cvc": '123' // I have tried this as
// an integer and string
// Stripe docs don't specify but I think string
}
}
}).then(function(success){
console.log('success ', success)
}, function(error){
console.log('error ', error) // gets here, this is where the message is
})
据我所知,这是完全可能的。我只需要为所述卡创建一个令牌。现在已经很晚了,这可能是一个非常明显的解决方案而且我太累了。
答案 0 :(得分:1)
也许Stripe API也接受JSON,但是你在curl命令中发送的不是JSON。这是表单数据。
此外,params
用于传递查询字符串中的数据。您希望在POST正文中使用此数据。
正确的代码应该是:
var myData = {
card: {
"number": '4242424242424242',
"exp_month": 12,
"exp_year": 2017,
"cvc": '123'
}
};
$http({
method: 'POST',
url: 'https://api.stripe.com/v1/tokens',
headers: {
'Authorization': 'Bearer MY_TEST_KEY',
'Content-Type': 'application/x-www-form-urlencoded'
},
data: $httpParamSerializerJQLike(myData),
});