{"id":19345422,"url":"https://github.com/robokassa/sdk-ios","last_synced_at":"2025-04-22T21:32:28.801Z","repository":{"id":259425316,"uuid":"877202797","full_name":"robokassa/sdk-ios","owner":"robokassa","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-20T13:00:50.000Z","size":155,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T19:02:52.209Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robokassa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-23T09:08:09.000Z","updated_at":"2025-01-20T13:00:51.000Z","dependencies_parsed_at":"2024-11-18T14:21:23.905Z","dependency_job_id":"74eddaec-17c0-48b7-bc8c-4a8993cf4837","html_url":"https://github.com/robokassa/sdk-ios","commit_stats":null,"previous_names":["robokassa/sdk-ios"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robokassa%2Fsdk-ios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robokassa%2Fsdk-ios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robokassa%2Fsdk-ios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robokassa%2Fsdk-ios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robokassa","download_url":"https://codeload.github.com/robokassa/sdk-ios/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250328364,"owners_count":21412611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T04:06:36.658Z","updated_at":"2025-04-22T21:32:28.780Z","avatar_url":"https://github.com/robokassa.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Robokassa SDK iOS\n\n## Минимальные требования:\niOS 14.0\n\n## Желательно также:\n- использовать Xcode не ниже 15-версии\n- использовать обновленную версию iOS SDK\n\n\n## Способы установки:\n\n**Pod**:\n\npod 'RobokassaSDK', :git =\u003e 'https://github.com/robokassa/sdk-ios.git', :tag =\u003e '1.0.0'\n\n**SPM**:\n\nhttps://github.com/robokassa/sdk-ios.git\n\n\n### SDK позволяет интегрировать прием платежей через сервис Robokassa в мобильное приложение iOS. Библиотека написана на языке Swift.\n\n### Требования к проекту:\nДля работы Robokassa SDK необходимо: iOS версии 14.0 и выше.\n\n### Подключение SDK:\n\n**Общая информация**\n\nДля работы с SDK вам понадобятся:\n\n- MerchantLogin - идентификатор (логин) магазина\n- Password #1 – пароль для подписи запросов к сервису\n- Password #2 – пароль для подписи запросов к сервису\n  \nВнимание! Формирование подписи в SDK реализовано через алгоритм хеширования MD5.\n\nДанные можно найти в личном кабинете (ЛК) Robokassa.\nВ корне репозитория собран проект состоящий из библиотеки (Robokassa.xcodeproj - для работы с Cocoapods) и демо приложение (Example), которое показывает пример интеграции SDK:\n\n![screens of example project](https://github.com/robokassa/sdk-ios/blob/main/screens.png)\n\n**Подключение зависимостей**\n\nДля подключения библиотеки в ваш проект, вы можете:\n\n- Установить СДК с помощью Cocoapods. Для этого создайте 'podfile' (для этого введите в терминале команду: pod init), если нет. Если же есть, то впишите туда:\n\npod 'RobokassaSDK', :git =\u003e 'https://github.com/robokassa/sdk-ios.git', :tag =\u003e '1.0.0'\n\n- Установить СДК с помощью SPM (Swift Package Manager). Для этого подключите в самом проекте следующим URL (Project -\u003e Package dependencies):\n\nhttps://github.com/robokassa/sdk-ios.git\n\n*Выберите пункт 'branch' - 'main' в 'Dependency rule'*\n \n- Либо скачать и подключить SDK. Добавьте его в ваш проект и подключите зависимость в настройках проекта.\n\nИ затем, импортируйте СДК в вашем файле:\n**import RobokassaSDK**\n\n## Проведение платежей\n\nБиблиотека использует стандартную платежную форму Robokassa в виде WebView, что упрощает интеграцию и не требует реализации собственных платежных форм и серверных решений. Процесс платежа состоит из 2-х этапов: вызова платежного окна Robokassa с заданными параметрами и затем, если требуется, осуществления дополнительного запроса к сервису Robokassa для необходимого действия - отмены или подтверждения отложенного платежя или проведения повторной оплаты.\n\n### Вызов платежного окна\n\nЧтобы настроить платежное окно для проведения платежа, требуется:\nСоздать объект PaymentParams, который включает в себя:\n- данные о заказе OrderParams\n- данные о покупателе CustomerParams\n- данные о внешнем виде страницы оплаты ViewParams\n\n```swift\nlet paymentParams = RobokassaSDK.PaymentParams(\n    order: RobokassaSDK.OrderParams(                            // данные заказа\n        invoiceId: 12345,                                       // номер заказа в системе продавца\n        orderSum: 1.0,                                          // сумма заказа\n        description: \"Test simple pay\",                         // описание, показываемое покупателю в платежном окне\n        expirationDate: Date().dateByAdding(.day, value: 1),    // дата, до окончания которой, можно будет оплатить\n        receipt: .init(                                         // объект фискального чека\n            items: [\n                .init(\n                    name: \"Ботинки детские\",\n                    sum: 1.0,\n                    quantity: 1,\n                    paymentMethod: .fullPayment,\n                    tax: .NONE\n                )\n            ]\n        )\n    ),\n    customer: .init(                                            // данные покупателя\n        culture: .ru,                                           // язык интерфейса\n        email: \"john@doe.com\"                                   // электронная почта покупателя для отправки уведомлений об оплате\n    ),\n    view: .init(\n        toolbarText: \"Простая оплата\",                          // заголовок окна оплаты\n        hasToolbar: true                                        // заголовок окна показывать/не показывать\n    )\n)\n```\n\n### Инициализация самого SDK\n\nЧтобы инициализировать Robokassa SDK, нужно выполнить следующее:\n\n- Логин: идентификатор магазина\n- Пароль №1\n- Пароль №2\n- Опционально можно указать true/false в качестве тестового запроса\n\nТакже мы имеем из данного объекта, 3 захвата значений:\n- onDismissHandler, который сработает в моменте закрытия WebView\n- onSuccessHandler, который сообщает, что платеж выполнен успешно\n- onFailureHandler, который сообщает, что платеж НЕ выполнился и вернулась ошибка. Этот захват значений имеет в себе String с причиной ошибки\n\n```swift\nlet robokassa = Robokassa(\n    login: MERCHANT_LOGIN,      // логин\n    password: PASSWORD_1,       // пароль№1, если isTesting: true, то необходимо передать тестовый_пароль№1\n    password2: PASSWORD_2,      // пароль№2, если isTesting: true, то необходимо передать тестовый_пароль№2\n    isTesting: false            // определяет тестовый ли будет платеж\n)\n\nrobokassa.onDimissHandler = {\n    print(\"Robokassa SDK finished its job\")\n}\nrobokassa.onSuccessHandler = { OpKey in\n    // OpKey - идентификатор (токен) для проведения последующих платежей с помощью сохраненной карты\n    // MARK: захватываемое значение OpKey является опциональным и возможно сюда может прийти nil, что в свою очередь перезапишет старое значение в локальном хранилище, а OpKey вы можете хранить только у себя. Для этого советуем прописать условие, чтобы не перезаписать успешно сохраненную рабочую копию OpKey.  \n    print(\"Success: \" + \"Successfully finished payment\")\n}\nrobokassa.onFailureHandler = { reason in\n    print(\"Failure: \" + reason)\n}\n```\n    \n### После создания параметров и инициализации СДК, можно будет вызвать один из нескольких методов СДК:\n\n- *Данный метод открывает WebView. Отвечает за простую оплату*\n```swift\nrobokassa.startSimplePayment(with: paymentParams)\n```\n\n- *Данный метод открывает WebView. Отвечает за холдирование средств*\n```swift\nrobokassa.startHoldingPayment(with: paymentParams)\n```\n\n- *Данный метод не открывает WebView и подтверждает холдированную оплату*\n\n```swift\nrobokassa.confirmHoldingPayment(with: paymentParams) { [weak self] result in\n    switch result {\n    case let .success(isSuccess):\n        print(\"SUCCESSFULLY CONFIRMED HOLDING PAYMENT. Is success: \\(isSuccess)\")\n    case let .failure(error):\n        print(error.localizedDescription)\n    }\n}\n```\n\n- *Данный метод не открывает WebView и отменяет холдированную оплату*\n```swift\nrobokassa.cancelHoldingPayment(with: paymentParams) { [weak self] result in\n    switch result {\n    case let .success(isSucess):\n        print(\"SUCCESSFULLY CANCELLED HOLDING PAYMENT. Is success: \\(isSucess)\")\n    case let .failure(error):\n        print(error.localizedDescription)\n    }\n}\n```\n\n- *Рекуррентная оплата. Подразумевает с собой небольшую логику, где если есть masterID (сохраненный ID на клиентской стороне, означает - ID, с помощью которого можно проводить рекуррентную оплату без ввода данных для платежа)*\n```swift\nif let previousOrderId = storage.previoudOrderId { // previoudOrderId: Int\n    paymentParams.order.previousInvoiceId = previousOrderId\n    \n    robokassa.startReccurentPayment(with: paymentParams) { result in\n        switch result {\n        case let .success(isSuccess):\n            print(\"SUCCESSFULLY FINISHED RECURRENT PAYMENT. Is success: \\(isSuccess)\")\n        case let .failure(error):\n            print(error.localizedDescription)\n        }\n    }\n} else {\n    robokassa.startDefaultReccurentPayment(with: paymentParams)\n}\n```\n\n- *Оплата по сохраненной карте. Подразумевает с собой возможность проведения последующих платежей с помощью сохраненной карты. Нужно лишь ввести CVV и СМС-код для подтверждения оплаты. OpKey - идентификатор оплаты по карте, полученный после оплаты, например, после проведения простой оплаты, в onSuccessHandler можно захватить OpKey и сохранить в локальном хранилище для дальнейшего использования*\n```swift\nguard let opKey, !opKey.isEmpty else { return }\n\npaymentParams.order.token = opKey\nrobokassa.startPaymentBySavedCard(with: params)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobokassa%2Fsdk-ios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobokassa%2Fsdk-ios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobokassa%2Fsdk-ios/lists"}