2015-01-22 1 views
0

Я использую модуль Code Cloud Cloud Parse, чтобы попытаться зарядить карту, которую я собрал в своем приложении iOS. Я использую руководство с сайта синтаксического анализа: http://parse.com/docs/cloud_modules_guide#stripeParse Cloud Code Stripe Module Charges.Create Not Working и Now Deploy Not Working

Вот моя версия в облаке/main.js:

var Stripe = require('stripe'); 
Stripe.initialize('MY_STRIPE_TEST_SECRET_KEY'); 

Parse.Cloud.define("purchase", function(request, response) { 
    Stripe.Charges.create({ 
      amount: 100, 
      currency: "usd", 
      card: request.params.cardToken 
    },{ 
      success: function(httpResponse) 
      { 
        response.success("Purchase made!"); 
      }, 

      error: function(httpResponse) 
      { 
        response.error(httpResponse); 
      } 
    }); 
}); 

Глядя на журналы ошибок облако код, я могу видеть, что функция облака покупка была запущена с пользователем полосы и с «cardToken» в качестве входных данных.
Ошибка:

Failed with: {"name" : "card_error"} 

Но я не думаю, что это помогает мне много, потому что это самый распространенный тип ошибки в документации полоской.

Другой способ я попытался исправить это через возиться с «parseVersion» в файле конфигурации/global.json, так как я ссылки на статью разбора вопросов с тем, что я думал, что идентичная проблема: http://www.parse.com/questions/stripe-integration-not-working

Они сказали, что изменение «parseVersion» до «1.2.5» было ключевым и сработало. В то время он работал на меня какое-то время, я бы до сих пор получить тот же код ошибки:

Error: {"name" : "card_error"} (Code: 141, Version: 1.2.20) 

Я попытался изменить его 1.2.20 (как в моем коде ошибки) и 1.3.3 (которая является самым на сегодняшний день версия синтаксического разбора Javascript SDK) и 1.6.1 (который является наиболее актуальной версии IOS SDK Разбор)

Теперь я получаю некоторые сумасшедшие ошибки Python, что я не очень понимаю:

Traceback (most recent call last): 
File"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main 
"__main__", fname, loader, pkg_name) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code 
    exec code in run_globals 
File "/usr/local/bin/parse/__main__.py", line 6, in <module> 
File "/usr/local/bin/parse/main.py", line 682, in main 
File "/usr/local/bin/parse/main.py", line 170, in handle_deploy 
File "/usr/local/bin/parse/parse.py", line 156, in __init__ 
File "/usr/local/bin/parse/parse.py", line 164, in load_state 
File "/usr/local/bin/parse/config_handler.py", line 125, in get_keys_for_app 
File "/usr/local/bin/parse/config_handler.py", line 100, in get_info_for_apps 
File "/usr/local/bin/parse/config_handler.py", line 112, in get_app_info_for_file 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 290, in load 
**kw) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
return _default_decoder.decode(s) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode 
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode 
obj, end = self.scan_once(s, idx) 
ValueError: Expecting , delimiter: line 12 column 20 (char 312) 

Теперь, даже когда я меняю версию на «1.2.5», я получаю ту же ошибку Python и не могу даже Используйте еще одну версию, чтобы продолжить поиск и устранение неисправностей. Я действительно застрял и был бы очень благодарен за помощь.

Вот функция сохранения я называю, когда пользователь впервые вводит данные в разборе и, надеюсь, первая покупка сделана так:

- (IBAction)save:(id)sender 
{ 
PTKCard* card = self.paymentView.card; 

STPCard* stpcard = [[STPCard alloc] init]; 

stpcard.number = card.number; 
stpcard.expMonth = card.expMonth; 
stpcard.expYear = card.expYear; 
stpcard.cvc = card.cvc; 

[Stripe createTokenWithCard:stpcard completion:^(STPToken *token, NSError *error) 
{ 
    if (error) 
    { 
     NSLog(@"creating token error: %@", error); 

    } else 
    { 
     NSArray *objectsArray = [NSArray arrayWithObjects:token.tokenId, nil]; 
     NSArray *keysArray = [NSArray arrayWithObjects:@"cardToken", nil]; 

     NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objectsArray forKeys:keysArray]; 

     // create a PFObject called "Order" for my own records 
     PFObject *order = [PFObject objectWithClassName:@"Order"]; 
     order[@"itemName"] = self.restaurant[@"name"]; 
     order[@"name"] = self.currentUser.username; 
     order[@"email"] = self.currentUser.email; 
     order[@"address"] = self.currentUser[@"address"]; 
     order[@"price"] = self.total; 

     // save the order to Parse 
     [order saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) 
     { 
      NSLog(@"saved Order"); 

      // call cloud function 
      [PFCloud callFunctionInBackground:@"purchase" withParameters:dictionary block:^(id object, NSError *error) 
      { 
       // if there is no errors 
       if(error == nil) 
       { 
        [[[UIAlertView alloc] initWithTitle:@"It Worked!" 
               message:@"It charged the card with no error!" 
               delegate:nil 
             cancelButtonTitle:@"Ok" 
             otherButtonTitles: nil] show]; 

        NSLog(@"%@", object); 

       } else [[[UIAlertView alloc] initWithTitle:@"Error" 
                message:@"The purchase did not work, your card will not be charged" 
                delegate:self 
              cancelButtonTitle:@"Ok" 
              otherButtonTitles: nil] show]; 
      }]; 

     }]; 
    } 
}]; 
} 

ответ

0

Я не уверен, если это имеет значение, но я создаю клиента сначала, а затем использовать токен карты:

Parse.Cloud.define("charge", function(request, response) { 
    Stripe.Customers.create({ 
    card: request.params.token, 
    description: request.params.description 
    },{ 
    success: function(results) { 
     response.success(results); 
    }, 
    error: function(httpResponse) { 
     response.error(httpResponse); 
    } 
    }).then(function(customer){ 
    return Stripe.Charges.create({ 
     amount: request.params.amount, // in cents 
     currency: request.params.currency, 
     customer: customer.id 
    },{ 
    success: function(results) { 
     response.success(results); 
    }, 
    error: function(httpResponse) { 
     response.error(httpResponse); 
    } 
    }); 
    }); 
}); 

Кроме того, может быть, что-то не так с токеном? Не могли бы вы вставить код, который вызывает код облака?

+0

Хорошо, теперь основная проблема: я не могу развернуть какие-либо новые версии облачного кода из-за этой ошибки python. Я изменил код, но я не могу его развернуть. –

+0

Что происходит, когда вы выполняете «синтаксическое обновление»? –

+0

В нем говорится, что он обновляется до последней версии. Затем я снова попробовал разборку разбора и дал ту же ошибку. –

-1

Я не уверен, что это может помочь, но вы можете просмотреть сообщение об ошибке, отправив сообщение об ошибке в ответ.

var Stripe = require('stripe'); 
Stripe.initialize('MY_STRIPE_TEST_SECRET_KEY'); 
Parse.Cloud.define("purchase", function(request, response) { 
    Stripe.Charges.create({ 
      amount: 100, 
      currency: "usd", 
      card: request.params.cardToken 
    },{ 
      success: function(httpResponse) 
      { 
        response.success("Purchase made!"); 
      }, 

      error: function(httpResponse) 
      { 
        response.error(httpResponse.message); 
      } 
    }); 
}); 

Образец httpResponse.message: «Срок действия вашей карты истек». и т. д.

+0

Лучше всего использовать код, который документирован полосой, это не отвечает на вопрос. srry – jeveloper