我的筹码: 前端:反应, react-stripe module 后端:带有Express 4.x的nodejs
我一直关注https://stripe.com/docs/charges
上的示例继承我的前端代码,在用户点击" Pay"
之后触发该代码 onToken(token){
console.log("Token " , token);
$.post('/apicall', token, function(result){
console.log(result);
})
}
这是我的服务器代码,它接收数据并应该处理测试付款:
router.post('/payment/barf-complete', function(req, response, next){
console.log(req.body);
var stripeToken = req.body;
var charge = stripe.charges.create({
amount: 1990, // amount in cents, again
currency: "eur",
source: stripeToken,
description: "Example charge"
}, function(err, charge) {
if (err && err.type === 'StripeCardError') {
// The card has been declined
console.log(err);
}
});
});
我不得不将var stripeToken = request.body.stripeToken;
更改为var stripeToken = request.body;
,因为第一个变量声明一直未定义。
现在的问题是,在前端付款完成后,我的服务器上一直出现以下错误:
rawType: 'card_error',
code: 'invalid_number',
param: 'number',
message: 'The card object must have a value for \'number\'.',
我以前从未使用过付款系统,文档也没有为我提供任何有用的信息 - / /
我可能错过了哪些想法?
编辑下面是request.body:
的console.log{ id: 'tok_123456789',
object: 'token',
'card[id]': 'card_123456789',
'card[object]': 'card',
'card[address_city]': '',
'card[address_country]': '',
'card[address_line1]': '',
'card[address_line1_check]': '',
'card[address_line2]': '',
'card[address_state]': '',
'card[address_zip]': '',
'card[address_zip_check]': '',
'card[brand]': 'Visa',
'card[country]': 'US',
'card[cvc_check]': 'pass',
'card[dynamic_last4]': '',
'card[exp_month]': '1',
'card[exp_year]': '2017',
'card[funding]': 'credit',
'card[last4]': '4242',
'card[name]': 'noa@mail.com',
'card[tokenization_method]': '',
client_ip: '12334567',
created: '1457075159',
email: 'noa@mail.com',
livemode: 'false',
type: 'card',
used: 'false' }
答案 0 :(得分:1)
req.body
是整个令牌对象,但Stripe只需要令牌对象的id
,因此将源设置为req.body.id
应该修复它。