0

I'm trying to integrate payment in my app.

Here is the cloud code for 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);
  });
});

Everything seems working fine :

-Stripe telling me payment is ok in their backend and no error .

But even if Parse Dashboard implement the order
StripePaymentID still null and this error raising :

TypeError: Cannot read property 'id' of undefined

So i don't understand what's not working , if you can help , i would be gratefull.

disclique
  • 11
  • 1
  • 1
  • Hey! Could you please confirm the exactly line where you're checking this message? Sometimes it may be a problem related to the version of Stripe used. – nataliec Apr 26 '18 at 14:11

1 Answers1

0

I recommend you update your Stripe Version. Just need to upload a file, with the name: "package.json" and insert the content like the structure below:

{
    "dependencies": {
        "stripe": "^5.8.0"
}
nataliec
  • 502
  • 4
  • 14