Как использовать Stripe Connect в приложении iOS

Кто-нибудь имел успех, используя Stripe connect с приложением iOS. У меня есть несколько вопросов:

Я следую рекомендациям здесь: https://stripe.com/docs/connect/getting-started

Регистрация приложения: легко, без проблем.

Затем немного дальше:

Отправьте своих пользователей на Stripe: опять же, без проблем здесь, у меня есть кнопка, которая открывает ссылку в UIWebView. Я предполагаю, что клиент_ид в URL-адресе в порядке? Большая часть моей неопределенности заключается в том, какие идентификаторы/ключи, которые я должен жестко закодировать в приложении

Затем немного дальше:

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

То, что я здесь делаю, это использовать метод UIWebview webView: shouldStartLoadWithReqest: navigationType, чтобы проверить строку "code =" в URL. Если он найдет это, тогда я смогу захватить параметр "код". Поэтому на самом деле redirect_uri для меня совершенно не нужна. Это правильный способ справиться с этим? Должен ли я делать это в своем приложении или на моем сервере?

После получения кода мы должны сделать POST-вызов, чтобы получить access_token. Опять же, следует ли это делать в приложении или на сервере? Это требует использования secret_key, поэтому я предполагаю сервер? И как мне отправить информацию о кредитной карте вместе с этим токеном, если токен необходимо отправить на сервер? Я знаю, как получить номер карты, дату выпуска и CVV. Но с точки зрения передачи его серверу (с маркером или без него) я не уверен.

Затем, когда дело доходит до написания кода на PHP, Ruby или Python на сервере, у меня полная потеря.

Любая помощь будет принята с благодарностью.

Ответ 1

Вы должны настроить небольшое веб-приложение для создания сборов за полосу и сохранения кода авторизации клиентов. Настройте два маршрута в своем веб-приложении для redirect_uri и webhook_uri и добавьте URL-адрес в настройках настроек Stripe Apps. Затраты должны быть созданы из приложения на стороне сервера, поскольку для этого требуется секретный ключ /authorization_code, который не должен храниться в приложении iPad. В противном случае они могут привести к утечке безопасности. Я пытаюсь описать концепцию ниже:

  1. Предоставьте stripe connect button в приложении и установите ссылку для открытия в Safari (не в веб-представлении). Вы должны добавить параметр state в URL с id который уникален для ваших пользователей.

  2. При нажатии кнопки ваш пользователь будет перенаправлен на Stripe, где ему будет предложено авторизовать ваше приложение. После авторизации полоса попадет на ваш redirect_uri с помощью authorization_code и state вы ранее предоставили. Сделайте почтовый вызов в соответствии с документацией Stripe с помощью authorization_code чтобы получить access_token. Храните access_token сопоставленный с state в базе данных.

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

  4. Теперь вы настроены на создание платы на вашем сервере от имени пользователя iPad. Используйте stripe iOS sdk для создания card_token из информации о карте. Для этого потребуется ваша полоса publishable_key. Затем определите api в своем веб-приложении, которое принимает 3 параметра: card_token, user_id и amount. Вызовите этот api из своего iPad-приложения, когда вы хотите создать плату. Вы также можете зашифровать эту информацию с помощью ключа, если вы беспокоитесь о безопасности, используя любой стандартный метод шифрования. Вы можете легко расшифровать информацию в своем веб-приложении, как вы знаете ключ.

  5. Когда этот апи вызывается из приложения iPad, вы получите user_id (который вы сохранили как state ранее), card_token и amount. Получите access_token сопоставленный с user_id (или состоянием). Затем вы можете взимать плату от имени пользователя, используя access_token, card_token и amount.

Вы можете использовать ruby /php/python/node на сервере, поскольку Stripe предоставляет sdk для них. Я предполагаю, что могут использоваться другие языки, а также есть интерфейс REST.

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

Ответ 2

Вы можете использовать UIWebView. Вам все равно придется использовать перенаправление URL-адресов и контролировать перенаправление с помощью делегата "webView: shouldStartLoadWithRequest: navigationType:"