【问题标题】:Angular and Stripe, Can't create Card token using $http, but can using CURLAngular 和 Stripe,无法使用 $http 创建卡片令牌,但可以使用 CURL
【发布时间】:2016-04-30 19:20:49
【问题描述】:

首先,如果这被认为是模糊的,请原谅我,这是我第一次在 Stack Exchange 上发帖。

希望这不是一个格式不正确的问题,我确实考虑过它,尽管它假定您熟悉 CURL、Stripe 和 Angular。

关于问题:

我正在尝试使用 Angular.js 的 $http 将 CURL 的结果重新创建到 Stripe API,但这样做时遇到了一些麻烦。

使用 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
  })

就我的理解而言,这是完全可能的。我只需要为所述卡创建一个令牌。时间不早了,这可能是一个完全显而易见的解决方案,我太累了。

【问题讨论】:

  • 打开浏览器的开发工具,点击网络标签。然后发送您的请求。然后在网络选项卡中查看请求的正文。它看起来像什么?
  • 哇,我已经很尴尬了,应该更具体一些。我在 ionic 中运行此代码,在模拟的 iPhone 5s - iOS 9.2 上启用了实时重新加载和控制台。代码本身只是有角度的,所以我想以这种方式提出问题。我想我会把它放到一个不同的角度项目中并快速检查一下。
  • @SamuelPolicar:请注意,出于 PCI 合规性的原因,您应该自己发出原始 HTTP 请求。您应该改用 Stripe Checkout 或 Stripe.js。

标签: angularjs stripe-payments


【解决方案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),
});

【讨论】:

  • 谢谢 JB,$httpParamSerializerJQLike 和数据键是缺失的。奇怪的是,Stripe 的某些 POST 请求使用 params 键使用 x-www-form-urlencoded 并且没有 $httpParamSerializerJQLike。这真的打乱了我的思路,更不用说为最后 10 个项目编写这个项目了。我终于可以睡觉了。
猜你喜欢
  • 2019-06-06
  • 2018-05-30
  • 1970-01-01
  • 2015-05-25
  • 2015-02-24
  • 2019-11-10
  • 2020-12-06
  • 2019-03-16
  • 2017-11-16
相关资源
最近更新 更多