Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse + Stripe iOS main.js

I'm really struggling getting Parse + Stripe to work in my project. At this point, I want the simplest working version that allows me to charge the user.

The closest thing I've found to an answer is the following: Simplest Example I've Found

When I use the corrected code from the link above, with my secret I get the following Error:

  Input: {"token":"tok_16kNOcIPNR1PIJsTyhvwTFJ9"}
  Result: TypeError: Object [object Object] has no method 'isString'
at request (stripe.js:49:25)
at post (stripe.js:117:12)
at Object.module.exports.Charges.create (stripe.js:157:16)
at main.js:19:31

Please help =**( this is so frustrating.

------------- UPDATE ----------------

A few other posts had similar errors and it looks like the most recent version of Parse Cloud code is to blame: 1.6.0. Revert to version 1.5.0 by using the following command line prompt in the console view:

parse jssdk 1.5.0

Now, unfortunately I still get the following error (but I think this is due to my cloud code main.js file now. I'll keep this thread updated when I finally figure out how to complete the cloud code file.

Error Domain=Parse Code=141 "success/error was not called" UserInfo=0x1740e5700 {code=141, temporary=0, error=success/error was not called, NSLocalizedDescription=success/error was not called}
like image 288
Ibdakine Avatar asked Sep 12 '15 23:09

Ibdakine


2 Answers

Finally. OK so here is the most basic code that WORKS for using Parse + Stripe.

iOS Code

- (IBAction)save:(id)sender {
STPCard *card = [[STPCard alloc] init];
card.number = self.paymentTextField.cardNumber;
card.expMonth = self.paymentTextField.expirationMonth;
card.expYear = self.paymentTextField.expirationYear;
card.cvc = self.paymentTextField.cvc;

NSLog(@"%@, %@", self.paymentTextField.cvc, self.paymentTextField.cardNumber);
[[STPAPIClient sharedClient] createTokenWithCard:card
                                      completion:^(STPToken *token, NSError *error) {
                                          if (error) {
                                              NSLog(@"up here");
                                              NSLog(@"error - %@", error);
                                          } else {
                                           //[self createBackendChargeWithToken:token];
                                              NSLog(@"down here");
                                                NSString *myVal = token.tokenId;


                                              NSLog(@"%@",token);
                                              [PFCloud callFunctionInBackground:@"hello" withParameters:@{@"token":myVal}
                                                                          block:^(NSString *result, NSError *error) {
                                                                              if (!error) {
                                                                                  NSLog(@"from Cloud Code Res: %@",result);
                                                                              }
                                                                              else
                                                                              {
                                                                                  NSLog(@"from Cloud Code: %@",error);
                                                                              }

                                                                          }];
                                          }
                                      }];
}

And then the main.js code:

var Stripe = require('stripe');
Stripe.initialize('sk_test_********'); //replace *** with your key values


Parse.Cloud.define(“hello”, function(request, response) {

var stripeToken = request.params.token;

 var charge = Stripe.Charges.create({
 amount: 1000, // express dollars in cents 
 currency: 'usd',
 card: stripeToken
 }).then(null, function(error) {
 console.log('Charging with stripe failed. Error: ' + error);
 }).then(function() {
   // And we're done!
   response.success('Success');

   });
   });

Now again, this ONLY WORKS if you REVERT YOUR CLOUD CODE to Version 1.5.0 (as other have helped me with). Hope this helps someone else also.

like image 118
Ibdakine Avatar answered Oct 23 '22 05:10

Ibdakine


Just to be a little bit more explicit from above:

cd into your cloud code directory and run parse jssdk 1.5.0 and parse deploy.

like image 35
Luis B Avatar answered Oct 23 '22 05:10

Luis B