Статьи

Прием платежей в приложениях iOS

В приложениях для мобильной коммерции одним из наиболее важных аспектов, определяющих успех, является дизайн вашего платежного потока. Доведя пользователя до того момента, когда он будет готов совершить покупку, вашему приложению потребуется запросить данные кредитной карты. Затем он обработает кредитную карту через платежный процессор и доставит приобретенные товары в случае успешной транзакции.

Хорошо продуманный поток платежей для приложения должен учитывать ограничения экрана на мобильном устройстве. Это должно потребовать минимального набора текста и ввода от пользователя при завершении транзакции, и сделать повторные покупки без проблем, устраняя необходимость в повторяющихся действиях.

Рекомендации App Store по платежам, а также лучшие практики

При выборе способа приема платежей в вашем приложении для iOS важно учитывать правила App Store, касающиеся покупок в приложении.

Для продажи цифровых продуктов или контента в вашем приложении Apple обязывает использовать платформу In-App Purchase . Это означает, что невозможно использовать сторонний платежный процессор при продаже цифрового контента через приложение iOS. Преимущество заключается в том, что пользователи получают возможность покупки одним нажатием в вашем приложении, что позволяет любому пользователю, имеющему учетную запись Apple, приобретать продукты внутри вашего приложения через простой, встроенный интерфейс оплаты, с которым знаком каждый пользователь iOS.

С другой стороны, если вы продаете физические товары или услуги, правила App Store требуют, чтобы вы использовали сторонний платежный процессор, такой как Stripe , Braintree , Authorize.net или Paypal, а не среду покупок Apple In-App.

Если вы создаете приложение электронной коммерции, реализация надлежащей защиты платежной информации и потока данных внутри собственного приложения iOS отличается от реализации для веб-приложения.

Некоторые мобильные коммерческие приложения решают эту проблему, заключая веб-интерфейс своего существующего провайдера в серию веб-представлений, но это может привести к очень плохому пользовательскому интерфейсу. Он также может быть подвержен ошибкам, поскольку требует, чтобы разработчик приложения обрабатывал перенаправления со шлюза оплаты и писал код на стороне сервера, чтобы увеличить поток платежей приложения.

Для удобства платежей внутри вашего приложения я рекомендую вам выбрать процессор платежей, который предлагает собственный SDK, который можно интегрировать в пользовательские представления вашего приложения. Несколько популярных вариантов среди разработчиков — iOS SDK, предлагаемые Stripe, Braintree и Paypal.

Хотя каждый из упомянутых провайдеров имеет свои преимущества, основное различие между ними заключается в том, что Braintree и Paypal включают представления пользовательского интерфейса для всего потока платежей. Это включает в себя ввод данных кредитной карты, их обработку и возврат успеха или неудачи в приложении. Преимущество этого подхода заключается в том, что разработчику не нужно писать собственные представления с нуля. Stripe, с другой стороны, дает вам детальный контроль над пользовательским интерфейсом, требуя от вас использовать библиотеку для токенизации карт и предоставляя вам пользовательские представления.

Интеграция Stripe SDK и оплата клиентов из вашего приложения для iOS

В этом разделе мы покажем, как интегрировать Stripe SDK в ваше приложение iOS для сбора информации о кредитной карте и использовать внутренний сервер для ее взимания.

Вот краткий обзор шагов, которые нам нужно будет выполнить:

  1. Создайте учетную запись Stripe и получите доступ к своему ключу API
  2. Загрузите Stripe iOS SDK
  3. Собирать информацию о карте
  4. Создать одноразовый токен
  5. Отправьте токен на ваш сервер
  6. На сервере позвоните в Stripe, чтобы зарядить карту и завершить транзакцию.

Создайте учетную запись Stripe и получите доступ к своему общедоступному ключу API

Перейдите на stripe.com и зарегистрируйте новую учетную запись, если у вас ее еще нет. После того, как вы зарегистрируетесь и войдите в свою панель инструментов, нажмите « Ваша учетная запись» в правом верхнем углу и выберите « Настройки учетной записи» .

Вы найдете ваши ключи на вкладке с надписью API Keys .

Поскольку мы делаем это как часть нашего учебника для целей тестирования, всякий раз, когда вам нужны ваши ключи API, используйте набор тестов ключей. Конечно, когда проект будет запущен в производство, вы захотите использовать свои живые ключи.

Загрузите и настройте Stripe SDK в своем проекте XCode

Самый простой способ сделать это — использовать git:

git clone --recursive https://github.com/stripe/stripe-ios.git

Затем добавьте привязки Stripe к вашему проекту XCode:

  1. В строке меню нажмите «Файл», затем «Добавить файлы в« Проект »…»
  2. Выберите каталог Stripe в загруженном хранилище.
  3. Убедитесь, что установлен флажок «Копировать объекты в папку целевой группы (при необходимости)»
  4. Нажмите «Добавить»

Stripe iOS использует Quartz Animation, а это значит, что вам нужно будет импортировать соответствующий фреймворк. Перейдите к цели вашего приложения, прокрутите вниз до «Связанные фреймворки и библиотеки» и добавьте QuartzCore.framework.

Соберите данные кредитной карты в приложении

Следующие фрагменты кода доступны в полном примере на Github .

Создайте новый класс в своем проекте XCode (назовем его ViewController), выбрав File-> New -> File…, а затем «Objective-C Class») и убедитесь, что он наследует от UIViewController.

В заголовке вашего класса (ViewController.h) вам нужно импортировать STPView.h так:

 #import <UIKit/UIKit.h>;
#import "STPView.h"

@interface ViewController : UIViewController <STPViewDelegate>;

@property (nonatomic, strong) STPView* stripeView;

@end

В ViewController.m мы создаем экземпляр STPView и добавляем его в качестве подпредставления:

 - (void)viewDidLoad
    {
        [super viewDidLoad];

        self.stripeView = [[STPView alloc] initWithFrame:CGRectMake(15,80,290,55)
                                                  andKey:@"YOUR_PUBLISHABLE_KEY_HERE"];
        self.stripeView.delegate = self;
        [self.view addSubview:self.stripeView];
    }

Обратите внимание, что вам потребуется использовать собственный публикуемый ключ API в приведенном выше фрагменте кода.

Создать одноразовый токен

На этом этапе вы проверили ввод данных карты и готовы отправлять данные кредитной карты на серверы Stripe для получения токена, вам необходимо вызвать createToken. Добавьте следующий код в ViewController.m (предполагается, что у вас есть простая кнопка Сохранить, которую можно нажать):

 - (IBAction)savePressed:(id)sender
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
    // Call 'createToken' when the user hits “Save”
    [self.stripeView createToken:^(STPToken *token, NSError *error) {
        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
        if (error) {
            // Handle error
            NSLog(@"Error %@",error);
            [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Credit Card check failed" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
        } else {
            // Ok, step 5.
            [self hasToken:token];
        }
    }];
}

Отправьте токен на ваш сервер, чтобы зарядить его

Если вызов createToken завершился успешно, последним шагом является вызов конечной точки на вашем сервере, которой вы передадите токен Stripe, полученный на шаге 4. Добавьте следующий код в ViewController.m:

 - (void)hasToken:(STPToken *)token
{
    NSLog(@"Received token %@", token.tokenId);

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://example.com"]];
    request.HTTPMethod = @"POST";
    NSString *body     = [NSString stringWithFormat:@"stripeToken=%@", token.tokenId];
    request.HTTPBody   = [body dataUsingEncoding:NSUTF8StringEncoding];

    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                               [[[UIAlertView alloc] initWithTitle:@"Success!" message:@"Your card was charged successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
                           }];
}

На вашем сервере позвоните в Stripe, чтобы зарядить карту и завершить транзакцию.

На вашем сервере вам нужно будет проверить, достаточно ли инвентаря для выполнения заказа. При условии, что проверка инвентаря прошла успешно, последний шаг заключается в том, чтобы зарядить карту с вашего серверного кода и вернуть приложение в приложение. Вот пример кода Python, который заряжает карту, используя переданный в нее токен.

 # Set your secret key: remember to change this to your live secret key in production
# See your keys here https://manage.stripe.com/account
stripe.api_key = "MWvGLiJ66l72RxJqvwcoXeF9abflctah"

# Get the credit card details submitted by the form
token = request.POST['stripeToken']

# Create the charge on Stripe's servers - this will charge the user's card
try:
  charge = stripe.Charge.create(
      amount=1000, # amount in cents, again
      currency="usd",
      card=token,
      description="[email protected]"
  )
except stripe.CardError, e:
  # The card has been declined
  pass

И все — вы успешно сняли средства с кредитной карты ваших клиентов за покупку, сделанную в вашем приложении!

В качестве альтернативы вы можете рассмотреть возможность использования нашего MobStac iOS SDK для приложений мобильной коммерции, которые делают все это для вас, а также интегрируются с бэкэндом электронной коммерции, таким как Magento.

Пример хорошего потока платежей

В ряде приложений для мобильной коммерции уже используются простые и интуитивно понятные мобильные платежи для управления транзакциями. Lyft, сервис обмена проездом, является одним из таких приложений, которое использует Stripe для быстрой обработки мобильных платежей.

Lyft скриншоты

Когда пользователь входит в систему в первый раз, приложение предлагает ему ввести данные своей кредитной карты. Пользователи могут даже добавить несколько кредитных карт и пометить их.

После завершения поездки вы можете использовать приложение, чтобы выбрать карту для оплаты, настроить сумму чаевых и затем отправить платеж. Если вы находитесь на экране отправки платежа и решили использовать другую карту, приложение позволяет переключаться между ними, делая процесс оплаты максимально удобным.

Каковы некоторые из лучших способов оплаты, которые вы видели или использовали в мобильных приложениях?