Хобрук: Ваш путь к мастерству в программировании

Сохранение идентификатора клиента Stripe в бэкэнде Parse

Я пытаюсь сохранить идентификатор клиента в бэкэнде Parse для пользователей моего приложения.

Что может быть не так со следующим кодом:

    var Stripe = require("stripe");
    Stripe.initialize('sk_test_----------');

    Parse.Cloud.define("saveStripeCustomerId", function (request, response) {
    Stripe.Customers.create(
{ card: request.params.token
    }, {
                success: function(httpResponse) {
                        response.success("Purchase made!");


                var Usr = Parse.User.current();
                            Usr.set("StripeCustomerId",request.params.objectId );
                            Usr.save(null, {
                                success: function(newUsr) {
                                // Execute any logic that should take place after the object is saved.
                               alert('New object created with objectId: ' + newUsr.id);

                                },
                                error: function(newUsr, error) {
                                // Execute any logic that should take place if the save fails.
                                // error is a Parse.Error with an error code and message.
                                alert('Failed to create new customer , with error code: ' + error.message);
                                }

                            });

                },
                error: function(httpResponse) {
                        response.error("Error ...oh no");
                }
        });
});

Код IOS:

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

    NSLog(@"Card last4: %@", card.last4);
    NSLog(@"Card expiry: %lu/%lu", (unsigned long)card.expMonth, (unsigned long)card.expYear);
    NSLog(@"Card cvc: %@", card.cvc);

    [[NSUserDefaults standardUserDefaults] setValue:card.last4 forKey:@"card.last4"];
    [self.navigationController popViewControllerAnimated:YES];

    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) {

            //[self handleError:error];


        } else {
            //[self createBackendChargeWithToken:token];


            [PFCloud callFunctionInBackground:@"saveStripeCustomerId"
                               withParameters:[NSDictionary dictionaryWithObjectsAndKeys:token.tokenId, @"token", nil]
                                        block:^(id object, NSError *error) {

                                            if(error == nil)
                                            {
                                                [[[UIAlertView alloc] initWithTitle:@"Stripe Customer Id saved!"
                                                                            message:@"Your stripe cust id has been saved!"
                                                                           delegate:nil
                                                                  cancelButtonTitle:@"Ok"
                                                                  otherButtonTitles:nil, nil] show];
                                            }
                                        }];

        }
    }];   
}

@end

с помощью этого кода я могу создать клиента в Stripe. Однако он не сохраняет его в Parse User Table.

Parse Cloud Log:
I2014-11-21T15:55:10.887Z] v46: Ran cloud function saveStripeCustomerId for user GBkeqCcOcU with:
  Input: {"token":"tok_-----------"}
  Result: Purchase made!

Что может пойти не так? Буду признателен за любую помощь, спасибо!


  • Было бы полезно, если бы вы могли зарегистрировать httpResponse в обратном вызове ошибки Stripe.Customers.create, чтобы увидеть, что это за ответ, вполне может быть, что он содержит полезные подсказки. 21.11.2014
  • спасибо @Björn, я добавлю это, когда у меня будет шанс 21.11.2014
  • не может ли это привести к нарушениям безопасности??? 18.05.2015

Ответы:


1

Он работает со следующим кодом. Функция Parse была неправильной, и мне пришлось выйти из системы и войти в систему пользователя, потому что я не вышел из системы после создания столбца StripeCustomerId.

Parse.Cloud.define("saveStripeCustomerId", function (request, response) {
        Stripe.Customers.create(
    { card: request.params.token
        }, {
                success: function(customer) {

                            //response.success("Purchase made!");


                var Usr = request.user;
                            Usr.set("StripeCustomerId",customer.id );
                            Usr.save(null, {
                                success: function(customer) {
                                // Execute any logic that should take place after the object is saved.
                                //alert('New object created with objectId: ' + newUsr.id);

                response.success("customer saved to parse = " + Usr.get("username"));
                                },
                                error: function(customer, error) {
                                // Execute any logic that should take place if the save fails.
                                // error is a Parse.Error with an error code and message.
                                //alert('Failed to create new customer , with error code: ' + error.message);
                response.error("oh uh non oooo failed to saved customer id to parse");
                                }

                            });

                },
                error: function(httpResponse) {
                        response.error("Error ...oh no");
                }
        });
});
21.11.2014
Новые материалы

Деревья классификации и регрессии
Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..