“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’”
Posted
技术标签:
【中文标题】“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’”【英文标题】:"Uncaught TypeError: Cannot read property 'create' of undefined" while using stripe payment method Stripe.charges.create() in angularJS/NodeJS“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’” 【发布时间】:2017-02-09 17:30:47 【问题描述】:您好,我是 AngularJS 的新手,正在从事一个项目,我正在创建一个带有条纹的支付表单。我已经按照条纹网站中的描述创建了表单并创建了我的 JS 代码。我得到了真实的卡验证响应,但付款方式在控制台上给了我这个错误“Uncaught TypeError: Cannot read property 'create' of undefined”,
以下是我的 html 代码:
<div class="checkout_popup" id="checkout_popup">
<div class="col-md-12"><h3>Form</h3></div>
<form id="payment-form" method="post">
<div class="col-md-12"><input type="email" id="email" placeholder="Email" /></div>
<div class="col-md-12"><input type="text" id="card-number" data-stripe="number" value="4242424242424242" placeholder="Card Number (16 Digit)"/></div>
<div class="col-md-12"><input type="text" id="card-cvc" placeholder="cvc" data-stripe="cvc" value="123" /></div>
<div class="col-md-12"><input type="text" id="card-expiry-month" data-stripe="exp_month" value="12" placeholder="Month Expire" /></div>
<div class="col-md-12"><input type="text" id="card-expiry-year" data-stripe="exp_year" value="2017" placeholder="Year Expire" /></div>
<div class="col-md-12"><input type="button" id="pay-now" value="Pay Now" ng-click="submitstripe()" /></div>
</form>
</div>
这是 JS 代码:
.controller('UserAccountController', function($scope, $http, $state, $stateParams, $filter)
$scope.submitstripe = function()
console.log('ready stripe');
Stripe.card.createToken(
number: document.getElementById('card-number').value,
cvc: document.getElementById('card-cvc').value,
exp_month: document.getElementById('card-expiry-month').value,
exp_year: document.getElementById('card-expiry-year').value
, stripeResponseHandler);
return false;
;
)
function stripeResponseHandler(status, response)
if (response.error) // Problem!
console.log(response.error.message);
else // Token was created!
// Get the token ID:
var token = response.id;
// Insert the token into the form so it gets submitted to the server:
console.log('Credit card verified, your token is : '+token);
var email = document.getElementById('email').value;
var charge = Stripe.charges.create(
amount: 10, // Amount in cents
currency: "usd",
source: token,
description: "test charges"
, function(err, charge)
if (err && err.type === 'StripeCardError')
// The card has been declined
alert('Your card is not valid');
document.getElementById('card-number').value = '';
document.getElementById('card-cvc').value = '';
document.getElementById('card-expiry-month').value = '';
document.getElementById('card-expiry-year').value = '';
document.getElementById('checkout_popup').style.display = 'none';
alert('payment successfull');
);
【问题讨论】:
当 Stripe 或 Stripe.charges 未定义时,您会收到此错误。放置一个问题点并确保两个对象都已定义 @RaviTeja 但是这种方法是有效的 Stripe.card.createToken( ),这并不意味着已经定义了条带? 可能,是的。然后确保 strip.charges 也被定义。你可以通过console.log(Stripe)验证Stripe对象中是否有charges对象。 @RaviTeja 它在我 console.log(Stripe) 时打印函数 a() 什么?你能把调试器点放在var charges = Strip.
...线上看看它是否包含收费对象吗?
【参考方案1】:
您似乎正在尝试在客户端处理费用。但文档指出:
使用 Stripe 的 API 和您的服务器端代码来处理费用。
客户端库与 NodeJS 库不同。您正在尝试在不存在的客户端库上调用 stripe.charges
。这个逻辑应该在服务器端创建。
如果您检查客户端库here 的源代码,您会发现charges
对象不存在。
相反,它可以在 NodeJS 库中使用 here
【讨论】:
是的,我认为你是对的,我在我的角度控制器中创建了一个 $http.post() 方法,并在我的节点 app.js 中创建了一个 post 方法来处理发布数据。现在它没有向我显示错误。但是付款仍未到达我的条带帐户。我很近以上是关于“未捕获的类型错误:在 angularJS/NodeJS 中使用条带支付方法 Stripe.charges.create() 时无法读取未定义的属性‘创建’”的主要内容,如果未能解决你的问题,请参考以下文章