Stripe и back4app: невозможно прочитать свойство 'id' из неопределенного - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь интегрировать платеж в свое приложение.

Вот код облака для Back4app:

var Stripe = require("stripe")(
  "TestSecretKeyOk"
);

Parse.Cloud.define("purchaseItem", function(request, response) {
  var item, order;
  Parse.Promise.as().then(function() {

    var itemQuery = new Parse.Query('Item');
    itemQuery.equalTo('ItemName', request.params.itemName);
    return itemQuery.first(null,{useMasterKey: true}).then(null, function(error) {
      return Parse.Promise.error('Sorry, this item is no longer available.');
    });

  },{useMasterKey: true}).then(function(result) {
    if (!result) {
      return Parse.Promise.error('Sorry, this item is no longer available.');
    } else if (result.get('quantityAvailable') <= 0) { 
      return Parse.Promise.error('Sorry, this item is out of stock.');
    }
    item = result;
    item.increment('quantityAvailable', -1);
    return item.save(null,{useMasterKey: true}).then(null, function(error) {
      console.log('Decrementing quantity failed. Error: ' + error);
      return Parse.Promise.error('An error has occurred. Your credit card was not charged.');
    });

  },{useMasterKey: true}).then(function(result) {
    if (item.get('quantityAvailable') < 0) { // can be 0 if we took the last
      return Parse.Promise.error('Sorry, this item is out of stock.');}
  	order = new Parse.Object("Order");
  	order.set('name', "azeaze"); //You can pass the client data from request.params at the begining
    order.set('email', "a@gmail.com");
    order.set('address', "NA");
    order.set('zip', "99999");
    order.set('city_state', "CA");
    order.set('item', item.get('ItemName'));
    order.set('fulfilled', false);
    order.set('charged', false);
	return order.save(null,{useMasterKey:true}).then(null, function(error) {
      return Parse.Promise.error('An error has occurred. Your credit card was not charged.');
    });

  },{useMasterKey:true}).then(function(order) {
	return Stripe.charges.create({
	  amount: item.get('price')*100, // It needs to convert to cents
	  currency: "usd",
	  source: request.params.cardToken,
	  description: "Charge for dominwong4@gmail.com"
	}, function(err, charge) {
	  // asynchronously called
	  console.log(charge.id);
	});

  },{useMasterKey:true}).then(function(purchase) {
    order.set('stripePaymentId', purchase.id);
    order.set('charged', true);
    order.save(null,{useMasterKey:true});
	
	
  },{useMasterKey:true}).then(function() { 
  	//your email logic
  },{useMasterKey:true}).then(function() {
    response.success('Success');
  }, function(error) {
    response.error('erreur trouvé ' + error);
  });
});

Кажется, все работает нормально:

- Стрип говорит мне, что оплата в их бэкэнде в порядке, и нет ошибок.

Но даже если Parse Dashboard реализует заказ
StripePaymentID все еще нулевой, и эта ошибка вызывает:

TypeError: Cannot read property 'id' of undefined

Так что я не понимаю, что не работает, если вы можете помочь, я был бы благодарен.

1 Ответ

0 голосов
/ 27 апреля 2018

Я рекомендую вам обновить версию Stripe. Просто нужно загрузить файл с именем: "package.json" и вставить содержимое, как показано ниже:

{
    "dependencies": {
        "stripe": "^5.8.0"
}
...