Angular和Stripe,无法使用$ http创建Card令牌,但可以使用CURL

时间:2016-04-30 10:55:02

标签: angularjs stripe-payments

首先,请原谅我,如果这被认为是模糊的,这是我第一次发布到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
  })

据我所知,这是完全可能的。我只需要为所述卡创建一个令牌。现在已经很晚了,这可能是一个非常明显的解决方案而且我太累了。

1 个答案:

答案 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),
});