{"id":359108,"date":"2024-05-21T00:25:40","date_gmt":"2024-05-21T00:25:40","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=359108"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T00:25:40","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=359108","title":{"rendered":"<span>\u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 SberPay \u0432 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 Flutter<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/dc2\/b0d\/c8b\/dc2b0dc8bea72f13ee2b8afe71450d56.jpg\" width=\"1958\" height=\"1103\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dc2\/b0d\/c8b\/dc2b0dc8bea72f13ee2b8afe71450d56.jpg\" data-blurred=\"true\"\/><\/figure>\n<p><em>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042d\u0442\u043e <\/em><a href=\"https:\/\/habr.com\/ru\/users\/RonFall\/\"><em><u>\u041c\u0443\u0440\u0430\u0442 \u041d\u0430\u0441\u0438\u0440\u043e\u0432<\/u><\/em><\/a><em> \u0438 <\/em><a href=\"https:\/\/habr.com\/ru\/users\/artembark\/\"><em><u>\u0410\u0440\u0442\u0435\u043c \u0411\u0430\u0440\u043a\u0430\u043b\u043e\u0432<\/u><\/em><\/a><em>, \u043c\u044b Flutter-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 <\/em><a href=\"https:\/\/friflex.com\/\"><em><u>\u0432 Friflex<\/u><\/em><\/a><em>. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 Flutter. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u0435\u0439\u0441\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043e\u043f\u043b\u0430\u0442\u044b SberPay \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 Flutter. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0421\u0431\u0435\u0440\u041f\u044d\u0439 \u0438 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437 \u043d\u0430\u0442\u0438\u0432\u0430 \u0432\u043e Flutter.<\/em><\/p>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/p>\n<ol>\n<li>\n<p><a href=\"#%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0%20%D0%B2%20%D1%88%D0%BB%D1%8E%D0%B7%D0%B5%20%D0%A1%D0%B1%D0%B5%D1%80%D0%B0\">\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/a> <\/p>\n<p>3.1 <a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20Android-%D1%87%D0%B0%D1%81%D1%82%D0%B8\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438<\/a> <\/p>\n<p>3.1.1 <a href=\"#%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20Maven%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a> <\/p>\n<p>3.1.2 <a href=\"#%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/a> <\/p>\n<p>3.1.3 <a href=\"#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a> <\/p>\n<p>3.1.4 <a href=\"#Android-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20%D0%B8%20%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0\">Android-\u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 <\/a><\/p>\n<p>3.2 <a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20iOS-%D1%87%D0%B0%D1%81%D1%82%D0%B8\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 iOS-\u0447\u0430\u0441\u0442\u0438<\/a> <\/p>\n<p>3.2.1 <a href=\"https:\/\/iOS%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD\">iOS \u043f\u043b\u0430\u0433\u0438\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%20%D0%B2%20Flutter-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\" id=\"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\"><\/a><\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SberPay SDK \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00ab\u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a \u041e\u043d\u043b\u0430\u0439\u043d\u00bb (\u0421\u0411\u041e\u041b), \u0438\u043d\u0430\u0447\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u043b\u0430\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 iOS, \u043b\u0438\u0431\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 iOS \u0438\u043b\u0438 Android. \u041d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 Android \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043e\u043f\u043b\u0430\u0442\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SDK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432: \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u044e, bluetooth, Wi-Fi \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0430\u043d\u0442\u0438\u0444\u0440\u043e\u0434).<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0443\u0437\u043d\u0430\u0435\u0442 \u043e\u0442 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 (\u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 SberPay SDK \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435), \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c (credentials) \u0438 \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>build.gradle<\/code> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u0432 \u0447\u0430\u0441\u0442\u0438 Android \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f <em>aar-\u0431\u0430\u043d\u0434\u043b<\/em>. \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SDK \u043d\u0430 iOS \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0445\u043e\u0442\u044f <a href=\"https:\/\/github.com\/sdkpay\/sdkpay-static\"><u>\u043e\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439<\/u><\/a>.\u00a0<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f SDK \u0432\u044b\u0434\u0430\u044e\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 <code>apiKey<\/code> \u0438 <code>merchantLogin<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SberPay SDK \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043e\u043d\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b SberPay \u0432 \u043f\u0440\u043e\u0434\u0435 \u043a\u043b\u0438\u0435\u043d\u0442, \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 SDK, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u0433\u043e\u0432\u043e\u0440 \u0441 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u043e\u043c \u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0%20%D0%B2%20%D1%88%D0%BB%D1%8E%D0%B7%D0%B5%20%D0%A1%D0%B1%D0%B5%D1%80%D0%B0\" id=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430\"><\/a><\/p>\n<h2>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430<\/h2>\n<p>\u0412 <a href=\"https:\/\/developers.sber.ru\/docs\/ru\/sberpay-sdk\/sign-up\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a> \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u043c \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 <code>sbolBankInvoiceId<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0431\u0435\u043a\u0435\u043d\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>sbolBankInvoiceId<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/integration:api:callback:start\"><u>\u043a\u043e\u043b\u043b\u0431\u044d\u043a\u043e\u0432<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0421\u0431\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0431\u0435\u043a\u0435\u043d\u0434\u0443, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/integration:sbol:start\"><u>\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430<\/u><\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 Postman (<a href=\"https:\/\/drive.google.com\/file\/d\/1ItGUkMCh4gJtoz5PGWjzzu7RBIDsTlZZ\/view?usp=sharing\"><u>\u0444\u0430\u0439\u043b<\/u><\/a>):<\/p>\n<p>POST <a href=\"https:\/\/3dsec.sberbank.ru\/payment\/rest\/register.do\"><u>https:\/\/3dsec.sberbank.ru\/payment\/rest\/register.do<\/u><\/a>, \u0433\u0434\u0435 <code>register.do<\/code> &#8212; <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/start\"><u>\u043e\u0434\u043d\u043e\u0441\u0442\u0430\u0434\u0438\u0439\u043d\u0430\u044f \u043e\u043f\u043b\u0430\u0442\u0430<\/u><\/a>:<\/p>\n<pre><code class=\"markdown\">{   \"userName\": \"testUserName\", \/\/ \u043b\u043e\u0433\u0438\u043d \u041b\u041a \u0421\u0431\u0435\u0440\u0430, \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443   \"password\": \"testPassword\", \/\/ \u043f\u0430\u0440\u043e\u043b\u044c \u041b\u041a \u0421\u0431\u0435\u0440\u0430, \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443    \"orderNumber\": \"e2574f1785324f1592d9029cb05adbbd\", \/\/ \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043a\u0430\u0437\u0430   \"amount\": 19900, \/\/ \u0441\u0443\u043c\u043c\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435 \u0432 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445   \"returnUrl\": \"sbersdk:\/\/spay\", \/\/ \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a \u0421\u0414\u041a   \"jsonParams\": {     \"app2app\": true, \/\/ \u0415\u0441\u043b\u0438 true, \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043f\u0440\u0438\u0434\u0435\u0442 sbolBankInvoiceId     \"app.osType\" : \"android\", \/\/ \u0422\u0438\u043f \u041e\u0421 (\u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441 \u0442\u0430\u043a\u0438\u043c)     \"app.deepLink\": \"sbersdk:\/\/spay\" \/\/ \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a \u0421\u0414\u041a   } }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"markdown\">{     \"orderId\": \"1a8fb4ab-fe19-7372-94b6-2deb29335df0\",     \"formUrl\": \"https:\/\/secure-payment-gateway.ru\/payment\/merchants\/sbersafe_sberid\/payment_ru.html?mdOrder=1a8fb4ab-fe19-7372-94b6-2deb29335df0\",     \"externalParams\": {         \"sbolInactive\": \"false\",         \"sbolBankInvoiceId\": \"72e48b040afb4483b0a8c13c77e7e6f2\",         \"sbolDeepLink\": \"sberpay:\/\/invoicing\/v2?bankInvoiceId=72e48b040afb4483b0a8c13c77e7e6f2&amp;operationType=app2app\"     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044f <code>returnUrl<\/code> \u0438 <code>app.deeplink<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u043e\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a (\u043b\u0438\u0431\u043e \u0421\u0411\u041e\u041b), \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d\u0438 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043b\u0443\u0447\u0448\u0435 \u0438\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0432 \u0431\u0435\u0441\u0435\u0434\u0435 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 SDK, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>&lt;\u0432\u0430\u0448\u0430\u0441\u0445\u0435\u043c\u0430>:\/\/spay<\/code>. \u0415\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0435 \u0421\u0431\u0435\u0440\u0430. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 iOS-\u0447\u0430\u0441\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437, \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e <code>sbolBankInvoiceId<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0421\u0431\u0435\u0440\u041f\u044d\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430 (\u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u0430), \u0442\u043e\u0433\u0434\u0430 <code>sbolBankInvoiceId<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 <code>orderNumber<\/code> \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u043d\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0435. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0432\u0430\u0439\u0440\u0438\u043d\u0433. \u041d\u0430 iOS \u0438 Android \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0442\u043c\u0435\u043d\u0443 \u043e\u043f\u043b\u0430\u0442\u044b, \u043e\u0431 \u044d\u0442\u043e\u043c \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0\" id=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\"><\/a><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 Flutter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 (<a href=\"https:\/\/docs.flutter.dev\/development\/packages-and-plugins\/developing-packages\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/u><\/a>):<\/p>\n<pre><code class=\"markdown\">flutter create --org plugin.sdk --template=plugin --platforms=android,ios sber_pay<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>plugin.sdk<\/code> \u2014 \u043f\u0443\u0442\u044c \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 Android-\u0441\u0442\u043e\u0440\u043e\u043d\u0435;<\/p>\n<\/li>\n<li>\n<p><code>--template=plugin<\/code> \u2014 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043b\u0430\u0433\u0438\u043d;<\/p>\n<\/li>\n<li>\n<p><code>sber_pay<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u2014 \u0432\u0432\u0438\u0434\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/strong><\/p>\n<p><a class=\"anchor\" name=\"%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20Android-%D1%87%D0%B0%D1%81%D1%82%D0%B8\" id=\"\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438\"><\/a><\/p>\n<h4>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Android SDK &#8212; 21.<\/p>\n<p>\u0415\u0441\u0442\u044c 2 \u043f\u0443\u0442\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 SDK.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/600\/5b4\/bf1\/6005b4bf19b1c8274d2be28673d5be01.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a Android  \" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a Android  \" width=\"334\" height=\"555\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/600\/5b4\/bf1\/6005b4bf19b1c8274d2be28673d5be01.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a Android  <\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20Maven%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9\" id=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\"><\/a><\/p>\n<h4>1) \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/h4>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>android\/build.gradle<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 <code>android {...}<\/code>, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>dependencies<\/code> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c:<\/p>\n<pre><code class=\"markdown\">dependencies {    implementation( 'ru.spaymentsplus.libraries:spaysdk:1.2.4' ) { transitive = true } }<\/code><\/pre>\n<p>\u041f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f aar-\u0431\u0430\u043d\u0434\u043b\u0430. \u0412\u043e\u043e\u0431\u0449\u0435, \u043a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SDK, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u0438 \u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043e\u0434\u0438\u043d, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431.\u00a0<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>sber_pay\/example\/android\/sberpay.properties<\/code> \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"markdown\">sPayUrl=\u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 sPayUsername=\u043b\u043e\u0433\u0438\u043d \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 sPayPassword=\u043f\u0430\u0440\u043e\u043b\u044c \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>sber_pay\/example\/android\/.gitignore<\/code><em> <\/em>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c <code>sberpay.properties<\/code> \u043a\u0430\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043f\u043e\u043f\u0430\u043b \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <code>build.gradle<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c aar-\u0431\u0430\u043d\u0434\u043b\u044b \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432 <code>sberpay.properties<\/code><em> <\/em>\u0434\u0430\u043d\u043d\u044b\u043c:<\/p>\n<pre><code class=\"markdown\">def sberpayProperties = new File('sberpay.properties') def properties = new Properties() properties.load(sberpayProperties.newDataInputStream())  def link = properties.getProperty('sPayUrl') def login = properties.getProperty('sPayUsername') def pass = properties.getProperty('sPayPassword')  allprojects {    repositories {        google()        mavenCentral()        maven {            name = \"GitHubPackages\"            url = uri(link)            credentials {                username = login                password = pass            }        }    } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c\/\u0441\u0441\u044b\u043b\u043a\u0443. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e SberPay SDK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u043e\u0442 SDK (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043d\u0430 Android \u0441\u0442\u043e\u0440\u043e\u043d\u0435) \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E\" id=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e\"><\/a><\/p>\n<h4>2) \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h4>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432 aar-\u0431\u0430\u043d\u0434\u043b\u044b, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0435 <code>android<\/code> \u043f\u0430\u043f\u043a\u0443 <code>libs<\/code> \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0417\u0430\u0442\u0435\u043c \u0432 <code>build.gradle<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 <code>android {...}<\/code> \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>dependencies<\/code> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/p>\n<pre><code class=\"markdown\">dependencies {    \/\/ .aar \u0431\u0430\u043d\u0434\u043b\u044b SberPay SDK    implementation files('..\/libs\/bms-sdk-fingerprint_VERSION_release.aar')    implementation files('..\/libs\/SDK-VERSION.aar')     \/\/ \u0422\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b SberPay SDK    implementation 'com.google.android.material:material:&lt;version>'    implementation 'io.github.sberid:SberIdSDK:&lt;version>'    implementation 'com.google.dagger:dagger:&lt;version>'    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:&lt;version>' }<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0437\u0434\u0435\u0441\u044c aar-\u0431\u0430\u043d\u0434\u043b\u044b, \u0435\u0441\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u0435\u0440\u0441\u0438\u0439, \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 <strong>\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/strong>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\" id=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\"><\/a><\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f SberPay SDK \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>minSdkVersion 21<\/code> \u0432 <code>sber_pay\/android\/build.gradle<\/code>:<\/p>\n<pre><code class=\"markdown\">defaultConfig {    minSdkVersion 21 }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432<em> <\/em><code>sber_pay\/example\/android\/app\/build.gradle<\/code> \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 21 \u0432\u0435\u0440\u0441\u0438\u044f:  <\/p>\n<pre><code class=\"markdown\">defaultConfig {    \u2026    minSdkVersion 21 }<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <a href=\"https:\/\/developers.sber.ru\/docs\/ru\/sberpay-sdk\/androidsdk\/start-sdk#zapros-razresheniy\"><u>\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/u><\/a> \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>sber_pay\/example\/android\/app\/src\/main\/AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \/> &lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_UPDATES\" \/> &lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \/><\/code><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0448\u0430\u043d\u0441\u044b \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c SberPay \u0432 \u0440\u0435\u043b\u0438\u0437\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c proguard. \u0412 <code>android\/app\/build.gradle<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>shrinkResources<\/code> \u0438 <code>minifyEnabled<\/code> \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b:<\/p>\n<pre><code class=\"markdown\">android {     ...     buildTypes {         release {             \/\/ shrinkResources \u0438 minifyEnabled \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b, \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e true, \u043e\u0434\u043d\u0430\u043a\u043e \u043b\u0443\u0447\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0432\u043d\u043e             shrinkResources true             minifyEnabled true             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 <code>android\/app\/proguard-rules.pro<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c:<\/p>\n<pre><code>-keep class spay.sdk.** { *; }  -keepclassmembers,allowobfuscation class * {   @com.google.gson.annotations.SerializedName &lt;fields>; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 <code>shrinkResources<\/code> \u0438 <code>minifyEnabled<\/code> \u0432 <code>android\/app\/build.gradle<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c <code>false<\/code>:<\/p>\n<pre><code>android {     ...     buildTypes {         release {             shrinkResources false             minifyEnabled false         }     } } <\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <code>android\/app\/proguard-rules.pro<\/code> \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p><a class=\"anchor\" name=\"Android-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20%D0%B8%20%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0\" id=\"Android-\u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430\"><\/a><\/p>\n<h4>Android-\u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430<\/h4>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0421\u0431\u0435\u0440\u041f\u044d\u044f. \u041a\u0430\u043a \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044d\u0442\u043e\u0433\u043e SDK, \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u043f\u043b\u0430\u0442\u044b \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/p>\n<p>\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043a \u0421\u0431\u0435\u0440\u041f\u044d\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <code>PlatformView<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 Flutter-\u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0444\u0430\u0439\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0430<em> <\/em><code>sber_pay\/android\/src\/main\/kotlin\/plugin\/sdk\/sber_pay\/SberPayPlugin.kt<\/code>:<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SberPayPlugin.kt<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"kotlin\">\/** * \u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SberPay. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a (\u043b\u0438\u0431\u043e \u0421\u0431\u043e\u043b). *\/ class SberPayPlugin : FlutterPlugin, MethodCallHandler, ActivityAware {     private lateinit var channel: MethodChannel    private lateinit var binding: FlutterPluginBinding    private lateinit var activity: Activity    private lateinit var context: Context     \/** \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u043e\u0439 **\/    private lateinit var button: SPayButton     override fun onAttachedToEngine(flutterPluginBinding: FlutterPluginBinding) {        channel = MethodChannel(flutterPluginBinding.binaryMessenger, \"sber_pay\")        binding = flutterPluginBinding        context = flutterPluginBinding.applicationContext        channel.setMethodCallHandler(this)    }     override fun onMethodCall(call: MethodCall, result: Result) {        when (call.method) {            \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f            \"init\" -> {                initialize(call, result)            }            \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u043b\u0430\u0442\u0435            \"isReadyForSPaySdk\" -> {                \/**                 * \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u043b\u0430\u0442\u0435.                 * \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 [env] \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 [initialize]                 * (\u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043c\u0435\u0442\u043e\u0434\u0443). \u0417\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0433\u043e.                 *                 * @return \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0430\u0445                 * SPayStage.SandboxRealBankApp, SPayStage.prod - \u0432\u0435\u0440\u043d\u0435\u0442 false.                 *\/                result.success(button.isReadyForSPaySdk())            }            \/\/ \u041e\u043f\u043b\u0430\u0442\u0430            \"payWithBankInvoiceId\" -> {                showSberPaymentModal(call, result)            }             else -> {                result.notImplemented()            }        }    }     \/**     * \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043e\u043f\u043b\u0430\u0442\u044b, \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c:     * @property apiKey \u043a\u043b\u044e\u0447, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;     * @property merchantLogin \u043b\u043e\u0433\u0438\u043d, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;     * @property appPackage \u043f\u0430\u043a\u0435\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f;     * @property language \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \"RU\";     * @property bankInvoiceId \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432     * \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430.     *\/    private fun showSberPaymentModal(call: MethodCall, result: Result) {        val args = call.arguments as Map&lt;*, *>        var responseSent = false \/\/ \u0424\u043b\u0430\u0433 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0430        var hasError = false \/\/ \u0424\u043b\u0430\u0433 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043e\u0448\u0438\u0431\u043a\u0438         try {            val apiKey = args[\"apiKey\"] as String            val merchantLogin = args[\"merchantLogin\"] as String            val bankInvoiceId = args[\"bankInvoiceId\"] as String            val appPackage = context.packageName            val language = \"RU\"             if (!responseSent) {                button.payWithBankInvoiceId(apiKey, merchantLogin, bankInvoiceId, appPackage, language) { response ->                    when (response) {                        \/\/ \u041e\u043f\u043b\u0430\u0442\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430                        is PaymentResult.Processing ->                            result.success(\"processing\")                        \/\/ \u041e\u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e                        is PaymentResult.Success ->                            result.success(\"success\")                        \/\/ \u041e\u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439                        is PaymentResult.Error -> {                            if (!hasError) {                                hasError = true                                if (response.merchantError is MerchantError.SdkClosedByUser) {                                    result.success(\"cancel\")                                    return@payWithBankInvoiceId                                }                                result.error(\"-\", \"MerchantError\", response.merchantError?.description                                        ?: \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b\")                                return@payWithBankInvoiceId                            }                        }                    }                    responseSent = true                }            }        } catch (error: Exception) {            result.error(\"-\", error.localizedMessage, error.message)        }    }     \/**     * \u041c\u0435\u0442\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.     * [env], \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 FLutter, \u0422\u0435\u0441\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 [env] \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c     * \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0437\u0430\u043f\u0443\u0441\u043a\u0430:     *     * @property SPayStage.SandboxRealBankApp \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0421\u0431\u0435\u0440\u043e\u043c;     * @property SPayStage.SandBoxWithoutBankApp \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0435\u0437 \u0421\u0431\u0435\u0440\u0430;     * @property SPayStage.prod \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0421\u0431\u0435\u0440\u043e\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0440\u043e\u0434\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.     *\/    private fun initialize(call: MethodCall, result: Result) {        val args = call.arguments as Map&lt;*, *>        val sPayStage = when (args[\"env\"] as String) {            \"sandboxRealBankApp\" -> SPayStage.SandboxRealBankApp            \"sandboxWithoutBankApp\" -> SPayStage.SandBoxWithoutBankApp            else -> {                SPayStage.Prod            }        }        \/\/ \u041e\u043f\u043b\u0430\u0442\u0430 \u0447\u0430\u0441\u0442\u044f\u043c\u0438        val enableBnpl = args[\"enableBnpl\"] as Boolean? ?: false         try {            SPaySdkApp.getInstance().initialize(application = activity.application, stage = sPayStage, enableBnpl = enableBnpl)            result.success(true)        } catch (e: Exception) {            result.error(\"-\", e.localizedMessage, e.message)        }    }     override fun onDetachedFromEngine(binding: FlutterPluginBinding) {        channel.setMethodCallHandler(null)    }     override fun onAttachedToActivity(activityBinding: ActivityPluginBinding) {        activity = activityBinding.activity        button = SPayButton(activity, null)    }     override fun onReattachedToActivityForConfigChanges(activityBinding: ActivityPluginBinding) {        activity = activityBinding.activity        button = SPayButton(activity, null)    }     override fun onDetachedFromActivity() {}     override fun onDetachedFromActivityForConfigChanges() {} }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20iOS-%D1%87%D0%B0%D1%81%D1%82%D0%B8\" id=\"\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 iOS-\u0447\u0430\u0441\u0442\u0438\"><\/a><\/p>\n<h4>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 iOS-\u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f iOS &#8212; 12.0, XCode 13<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SDK. \u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e SDK \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 <a href=\"https:\/\/github.com\/sdkpay\/sdkpay-static\"><em><u>SPaySdk.xcframework<\/u><\/em><\/a> \u0432 \u043f\u0430\u043f\u043a\u0443 <em>iOS<\/em>-\u043f\u043b\u0430\u0433\u0438\u043d\u0430.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u0444\u0430\u0439\u043b <code>sber_pay\/example\/ios\/Runner\/info.plist<\/code>:<\/p>\n<pre><code class=\"xml\"> &lt;key>DTXAutoStart&lt;\/key>     &lt;string>false&lt;\/string>     &lt;key>LSApplicationQueriesSchemes&lt;\/key>     &lt;array>        &lt;string>sbolidexternallogin&lt;\/string>         &lt;string>sberbankidexternallogin&lt;\/string>     &lt;\/array>    &lt;key>NSAppTransportSecurity&lt;\/key>       &lt;dict>          &lt;key>NSExceptionDomains&lt;\/key>          &lt;dict>             &lt;key>gate1.spaymentsplus.ru&lt;\/key>             &lt;dict>                &lt;key>NSExceptionAllowsInsecureHTTPLoads&lt;\/key>                &lt;true\/>             &lt;\/dict>             &lt;key>ift.gate2.spaymentsplus.ru&lt;\/key>             &lt;dict>                &lt;key>NSExceptionAllowsInsecureHTTPLoads&lt;\/key>                &lt;true\/>             &lt;\/dict>             &lt;key>cms-res.online.sberbank.ru&lt;\/key>                &lt;dict>                    &lt;key>NSExceptionAllowsInsecureHTTPLoads&lt;\/key>                    &lt;true\/>                &lt;\/dict>          &lt;\/dict>       &lt;\/dict>     &lt;key>NSBluetoothAlwaysUsageDescription&lt;\/key>     &lt;string>\u0414\u0430\u043d\u043d\u044b\u0435 Bluetooth \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b&lt;\/string>     &lt;key>NSBluetoothPeripheralUsageDescription&lt;\/key>     &lt;string>\u0414\u0430\u043d\u043d\u044b\u0435 Bluetooth \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b&lt;\/string>     &lt;key>NSLocationWhenInUseUsageDescription&lt;\/key>     &lt;string>\u0414\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b&lt;\/string> <\/code><\/pre>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Android, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u0430 \u043d\u0430 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a \u043e\u043d\u043b\u0430\u0439\u043d\/\u0421\u0411\u041e\u041b. <\/p>\n<p>\u0412 Android \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>package<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0443\u044e\u0441\u044f \u0441\u0445\u0435\u043c\u0443. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 <code>host<\/code> \u0432 \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430\/\u0421\u0411\u041e\u041b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u0443 <code>sbersdk:\/\/spay<\/code>:<\/p>\n<pre><code class=\"xml\">  &lt;key>CFBundleURLTypes&lt;\/key>      &lt;array>         &lt;dict>             &lt;key>CFBundleTypeRole&lt;\/key>             &lt;string>Editor&lt;\/string>             &lt;key>CFBundleURLName&lt;\/key>             &lt;string>spay&lt;\/string>             &lt;key>CFBundleURLSchemes&lt;\/key>             &lt;array>             &lt;string>sbersdk&lt;\/string>             &lt;\/array>         &lt;\/dict>     &lt;\/array><\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0432\u043a\u043b\u0430\u0434\u043a\u0443<em> Info\u2192URL Types:<\/em>  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d9\/bb5\/f2b\/2d9bb5f2b7ce1bfadc5d961f9b4d68d7.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 URL Types\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 URL Types\" width=\"1820\" height=\"340\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d9\/bb5\/f2b\/2d9bb5f2b7ce1bfadc5d961f9b4d68d7.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 URL Types<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 Capabilities \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Access wi-fi information. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c: <em>\u0412\u0430\u0448 \u0442\u0430\u0440\u0433\u0435\u0442 \u2192 Signing &amp; Capabilities \u2192 +Capability \u2192 Access wi-fi information<\/em>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cc6\/a6e\/a29\/cc6a6ea293e6a9d37ebcbf4003e8999e.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a wi-fi\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a wi-fi\" width=\"1854\" height=\"1218\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cc6\/a6e\/a29\/cc6a6ea293e6a9d37ebcbf4003e8999e.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <em>\u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a wi-fi<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0447\u0430\u0441\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0432 <code>sber_pay\/ios\/sber_pay.podspec<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434:<\/p>\n<pre><code class=\"ruby\">s.preserve_paths = 'SPaySdk.xcframework\/**\/*' s.xcconfig = { 'OTHER_LDFLAGS' => '-framework SPaySdk' } s.vendored_frameworks = 'SPaySdk.xcframework'<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e \u0436\u0435 \u0444\u0430\u0439\u043b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c iOS 12 \u0432\u0435\u0440\u0441\u0438\u0438:  <\/p>\n<pre><code class=\"ruby\">s.platform = :ios, '12.0'<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c iOS 12. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0432 \u0432 \u0442\u0430\u0440\u0433\u0435\u0442\u0435 \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 <em>Minimum deployments.<\/em><\/p>\n<p><a class=\"anchor\" name=\"iOS%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD\" id=\"iOS \u043f\u043b\u0430\u0433\u0438\u043d\"><\/a><\/p>\n<h4>iOS \u043f\u043b\u0430\u0433\u0438\u043d<\/h4>\n<p>\u041d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f SDK \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 iOS \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u043a\u043d\u043e\u043f\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c <code>sber_pay\/ios\/Classes\/SberPayPlugin.swift<\/code>. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Android \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0435 API.<\/p>\n<details class=\"spoiler\">\n<summary>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 SberPayPlugin.swift<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"swift\">\/\/ \u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c SberPay. public class SberPayPlugin: NSObject, FlutterPlugin {     public static func register(with registrar: FlutterPluginRegistrar) {        let channel = FlutterMethodChannel(name: \"sber_pay\", binaryMessenger: registrar.messenger())        let instance = SberPayPlugin()        registrar.addMethodCallDelegate(instance, channel: channel)        \/\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 [addApplicationDelegate] \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043f\u043e \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435        registrar.addApplicationDelegate(instance)    }     public func application(_ app: UIApplication,open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {        \/\/\/ \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u043e\u043c \u0435\u0441\u043b\u0438 \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u043e\u0441\u0442 \"spay\", \u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0434\u0438\u043f\u043b\u0438\u043d\u043a        \/\/\/ \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c        \/\/\/ SDK \u043e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a \u043e\u043d\u043b\u0430\u0439\u043d\/\u0421\u0411\u041e\u041b        if  url.host == \"spay\" {            SPay.getAuthURL(url)        }         return true    }     public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {        switch call.method {            \/\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f        case \"init\":            initialize(call, result:result)            \/\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u043b\u0430\u0442\u0435        case \"isReadyForSPaySdk\":            \/**             \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u043b\u0430\u0442\u0435.             \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 [env] \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 [initialize]             (\u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043c\u0435\u0442\u043e\u0434\u0443). \u0417\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0433\u043e.              - Returns \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0430\u0445 SEnvironment.sandboxRealBankApp,             SEnvironment.prod - \u0432\u0435\u0440\u043d\u0435\u0442 false.             *\/            result(SPay.isReadyForSPay)            \/\/ \u041e\u043f\u043b\u0430\u0442\u0430        case \"payWithBankInvoiceId\":            payWithBankInvoiceId(call, result: result)        default:            result(FlutterMethodNotImplemented)        }    }     \/**     \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043e\u043f\u043b\u0430\u0442\u044b, \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c:     - Parameter apiKey \u043a\u043b\u044e\u0447, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;     - Parameter merchantLogin \u043b\u043e\u0433\u0438\u043d, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;     - Parameter bankInvoiceId \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432     \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430.     - Parameter redirectUri \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a     *\/    private func payWithBankInvoiceId(_ call: FlutterMethodCall, result: @escaping FlutterResult) {        guard let args = call.arguments as? [String: Any],              let apiKey = args[\"apiKey\"] as? String,              let merchantLogin = args[\"merchantLogin\"] as? String,              let bankInvoiceId = args[\"bankInvoiceId\"] as? String,              let redirectUri = args[\"redirectUri\"] as? String        else {            result(FlutterError(code: \"INVALID_ARGUMENTS\", message: \"Invalid arguments\", details: nil))            return        }         if bankInvoiceId.count != 32 {            result(FlutterError(code: \"-\", message: \"MerchantError\", details: \"\u0414\u043b\u0438\u043d\u0430 bankInvoiceId \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\"))            return        }         guard let topController = getTopViewController() else {            result(FlutterError(code: \"PluginError\", message: \"SberPay: Failed to implement controller\", details: nil))            return        }         let request = SBankInvoicePaymentRequest(            merchantLogin: merchantLogin,            bankInvoiceId: bankInvoiceId,            language: \"RU\",            redirectUri: redirectUri,            apiKey: apiKey)         SPay.payWithBankInvoiceId(with: topController, paymentRequest: request) { state, info  in            switch state {            case .success:                result(\"success\")            case .waiting:                result(\"processing\")            case .cancel:                result(\"cancel\")            case .error:                result(FlutterError(code: \"-\", message: \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u043f\u043b\u0430\u0442\u044b\", details: info))            @unknown default:                result(FlutterError(code: \"-\", message: \"\u041d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\", details: info))            }        }    }     \/**     \u041c\u0435\u0442\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.     [env], \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 FLutter, \u0422\u0435\u0441\u0442\u044b \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 [env] \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041e\u043d     \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0437\u0430\u043f\u0443\u0441\u043a\u0430:      - Parameter SEnvironment.sandboxRealBankApp \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0421\u0431\u0435\u0440\u043e\u043c;     - Parameter SEnvironment.sandboxWithoutBankApp \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0435\u0437 \u0421\u0431\u0435\u0440\u0430;     - Parameter SEnvironment.prod \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0421\u0431\u0435\u0440\u043e\u043c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043f\u0440\u043e\u0434\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.     - Parameter enableBnpl \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u041e\u043f\u043b\u0430\u0442\u0430 \u0447\u0430\u0441\u0442\u044f\u043c\u0438     *\/    private func initialize(_ call: FlutterMethodCall, result: @escaping FlutterResult) {        guard let args = call.arguments as? [String: Any],              let env = args[\"env\"] as? String        else {            result(FlutterError(code: \"INVALID_ARGUMENTS\", message: \"Invalid arguments\", details: nil))            return        }         let enableBnpl = args[\"enableBnpl\"] as? Bool ?? false         let sPayStage: SEnvironment        switch env {        case \"sandboxRealBankApp\":            sPayStage = .sandboxRealBankApp        case \"sandboxWithoutBankApp\":            sPayStage = .sandboxWithoutBankApp        default:            sPayStage = .prod        }         SPay.setup(bnplPlan: enableBnpl, environment: sPayStage)        result(true)    }     private func getTopViewController() -> UIViewController? {        var topController = UIApplication.shared.keyWindow?.rootViewController         while let presentedViewController = topController?.presentedViewController {            topController = presentedViewController        }         return topController    } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%20%D0%B2%20Flutter-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043a\u043e\u0434\u0430 \u0432 Flutter-\u0447\u0430\u0441\u0442\u0438. \u0420\u0430\u043d\u0435\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u043f\u043b\u0430\u0442\u044b \u0438\u0437 SberPay SDK \u0447\u0435\u0440\u0435\u0437 <code>PlatformView<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0432\u0435\u0440\u0441\u0442\u0430\u0442\u044c \u0435\u0435 \u0432 Flutter. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0433\u043e \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0433\u0430\u0439\u0434\u043b\u0430\u043d\u0430\u043c \u0421\u0431\u0435\u0440\u0430 \u043f\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0443 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442 \u043d\u0435\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u043f\u043b\u0430\u0442\u044b, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u044e\u0441\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 \u043a\u043e\u0440\u043d\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0430\u043f\u043a\u0443 <code>assets<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043b\u043e\u0433\u043e \u0421\u0431\u0435\u0440\u041f\u044d\u044f \u0438 \u0448\u0440\u0438\u0444\u0442\u044b (\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/integration:sbol:guide_book\"><u>\u0433\u0430\u0439\u0434\u0431\u0443\u043a\u0430 \u0421\u0431\u0435\u0440\u0430<\/u><\/a>).<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a91\/df5\/7ee\/a91df57ee4a6ce0586a31076b2f23480.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 assets  \" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 assets  \" width=\"332\" height=\"483\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a91\/df5\/7ee\/a91df57ee4a6ce0586a31076b2f23480.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 assets  <\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 <code>pubspec.yaml<\/code> \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0441\u0441\u0435\u0442\u044b:<\/p>\n<pre><code class=\"yaml\">flutter:  assets:    - assets\/sberpay_logo.png   fonts:    - family: SberPaySans      fonts:        - asset: assets\/fonts\/spay_sans_text.ttf<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0421\u0431\u0435\u0440\u041f\u044d\u044f \u0432 \u043f\u0430\u043f\u043a\u0435 <code>lib<\/code> \u043f\u043b\u0430\u0433\u0438\u043d\u0430:  <\/p>\n<pre><code class=\"dart\">\/\/\/ \u0412\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043e\u043f\u043b\u0430\u0442\u044b \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 class SberPayButton extends StatelessWidget {  const SberPayButton({    super.key,    this.onPressed,  });   \/\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443  final VoidCallback? onPressed;   @override  Widget build(BuildContext context) {    return InkWell(      onTap: onPressed,      child: Container(        height: 48,        decoration: BoxDecoration(          color: const Color(0xFF21A038),          borderRadius: BorderRadius.circular(12),        ),        child: Row(          mainAxisAlignment: MainAxisAlignment.center,          children: [            const Flexible(              child: Text(                '\u041e\u043f\u043b\u0430\u0442\u0438\u0442\u044c',                style: TextStyle(                  color: Colors.white,                  fontSize: 16,                  fontFamily: 'SberPaySans',                  package: 'sber_pay',                ),              ),            ),            const SizedBox(width: 8),            Image.asset(              'assets\/sberpay_logo.png',              package: 'sber_pay',              width: 48,              height: 22,            ),          ],        ),      ),    );  } }<\/code><\/pre>\n<p>\u0421\u0431\u0435\u0440\u041f\u044d\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 SDK \u0432 \u0442\u0440\u0435\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445:<\/p>\n<ul>\n<li>\n<p><code>prod<\/code> \u2014 \u043f\u0440\u043e\u0434;<\/p>\n<\/li>\n<li>\n<p><code>sandboxWithRealBank<\/code> \u2014 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0441 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c;<\/p>\n<\/li>\n<li>\n<p><code>sandboxWithoutBank<\/code> \u2014 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u043f\u043b\u0430\u0442\u044b. \u041e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0421\u0431\u0435\u0440\u041f\u044d\u044f. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <code>enum<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 SberPay SDK:<\/p>\n<pre><code class=\"dart\">\/\/\/ \u0422\u0438\u043f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 enum SberPayEnv {  \/\/\/ \u041f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.  \/\/\/  \/\/\/ \u0414\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430.  prod,  \/\/\/ \u0420\u0435\u0436\u0438\u043c \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b.  \/\/\/  \/\/\/ \u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443 \u043a\u0430\u043a \u0432 [prod], \u043d\u043e \u0441 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.  \/\/\/ \u0414\u043b\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430.  \/\/\/  \/\/\/ \u041d\u0430 Android \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u041d\u0430 iOS \u043c\u043e\u0436\u043d\u043e  \/\/\/ \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.  sandboxRealBankApp,  \/\/\/ \u0420\u0435\u0436\u0438\u043c \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u044b \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0431\u0430\u043d\u043a.  \/\/\/  \/\/\/ \u041f\u0440\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435  \/\/\/ \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430.  \/\/\/  \/\/\/ \u041d\u0430 Android \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445. \u041d\u0430 iOS \u043c\u043e\u0436\u043d\u043e  \/\/\/ \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435.  sandboxWithoutBankApp }<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 enum, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0432 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"dart\">\/\/\/ \u0421\u0442\u0430\u0442\u0443\u0441\u044b \u043e\u043f\u043b\u0430\u0442\u044b enum SberPayPaymentStatus {  \/\/\/ \u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442  success,   \/\/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u043f\u043b\u0430\u0442\u044b  processing,   \/\/\/ \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043c\u0435\u043d\u0438\u043b \u043e\u043f\u043b\u0430\u0442\u0443  cancel,   \/\/\/ \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f  unknown;   static fromString(String? value) {    switch (value) {      case \"success\":        return SberPayPaymentStatus.success;      case \"processing\":        return SberPayPaymentStatus.processing;      case \"cancel\":        return SberPayPaymentStatus.cancel;      default:        return SberPayPaymentStatus.unknown;    }  } }<\/code><\/pre>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u044d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430. Flutter \u0441 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u043c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043b\u0438\u0448\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>sber_pay.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">\/\/\/ \u041f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 SberPay SDK \/\/\/ \/\/\/ \u0412\u0441\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (Exceptions) \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \/\/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u044b\u0448\u0435. class SberPayPlugin {  static const methodChannel = MethodChannel('sber_pay');   \/\/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f SberPay SDK.  \/\/\/  \/\/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439.  \/\/\/ \u041d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Android \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0443  \/\/\/ \u043d\u0435\u0433\u043e \u043d\u0435\u0442 API (\u043a\u043e\u043b\u043b\u0431\u0435\u043a\u0430) \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f  \/\/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.  \/\/\/  \/\/\/ * [env] - \u0441\u0440\u0435\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 [SberPayEnv].  \/\/\/ * [enableBnpl] - \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u043f\u043b\u0430\u0442\u044b \u0447\u0430\u0441\u0442\u044f\u043c\u0438  static Future&lt;bool> initSberPay({    required String env,    bool? enableBnpl,  }) async {    final result = await methodChannel.invokeMethod&lt;bool>('init', {      'env': env,      'enableBnpl': enableBnpl,    });    return result ?? false;  }   \/\/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043a \u043e\u043f\u043b\u0430\u0442\u0435.  \/\/\/  \/\/\/ \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 [env] \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434  \/\/\/ [initSberPay] (\u0441\u043c. \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043c\u0435\u0442\u043e\u0434\u0443).  \/\/\/  \/\/\/ \u0417\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f  \/\/\/ \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SDK.  \/\/\/  \/\/\/ \u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0435\u0440\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0430\u0445  \/\/\/ [SberPayEnv.sandboxRealBankApp], [SberPayEnv.prod] - \u0432\u0435\u0440\u043d\u0435\u0442 false.  static Future&lt;bool> isReadyForSPaySdk() async {    final result = await methodChannel.invokeMethod&lt;bool>('isReadyForSPaySdk');    if (result == null || result == false) {      await Future.delayed(        const Duration(seconds: 2),        () async {          return await methodChannel.invokeMethod&lt;bool>('isReadyForSPaySdk');        },      );    }    return result ?? false;  }   \/\/\/ \u041c\u0435\u0442\u043e\u0434 \u043e\u043f\u043b\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 SberPay SDK.  \/\/\/ * [apiKey] - \u043a\u043b\u044e\u0447, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432 \u043b\u0438\u0447\u043d\u043e\u043c  \/\/\/ \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;  \/\/\/ * [merchantLogin] - \u043b\u043e\u0433\u0438\u043d, \u0432\u044b\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443, \u043b\u0438\u0431\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u0432  \/\/\/ \u043b\u0438\u0447\u043d\u043e\u043c \u043a\u0430\u0431\u0438\u043d\u0435\u0442\u0435;  \/\/\/ * [bankInvoiceId] - \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f  \/\/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430.  \/\/\/ * [redirectUri] - \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f  \/\/\/ \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 iOS).  \/\/\/  \/\/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u043f\u043b\u0430\u0442\u044b [SberPayPaymentStatus]  static Future&lt;SberPayPaymentStatus> payWithBankInvoiceId({    required String apiKey,    required String merchantLogin,    required String bankInvoiceId,    required String redirectUri,  }) async {    final result = await methodChannel.invokeMethod&lt;String>(      'payWithBankInvoiceId',      {        'apiKey': apiKey,        'merchantLogin': merchantLogin,        'bankInvoiceId': bankInvoiceId,        'redirectUri': redirectUri,      },    );    return SberPayPaymentStatus.fromString(result);  } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>isReadyForSPaySdk<\/code> \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <code>initialized<\/code> \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 Android \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043d\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e API (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0430 \u043f\u0440\u0438 \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438). \u041d\u0430 iOS \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SDK \u043e\u0431\u0435\u0449\u0430\u043b\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445.<\/p>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043e\u0442\u043e\u0432 \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 <code>sber_pay\/example\/lib\/main.dart<\/code> \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f SberPay SDK. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0430\u044f, \u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u044d\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>main.dart<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"dart\">\/\/\/ \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 const _apiKey = ''; const _merchantLogin = '';  \/\/\/ \u0414\u0438\u043f\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 const _redirectUri = 'sbersdk:\/\/spay';  void main() => runApp(const SberPayExampleApp());  class SberPayExampleApp extends StatefulWidget {  const SberPayExampleApp({super.key});   @override  State&lt;SberPayExampleApp> createState() => _SberPayExampleAppState(); }  class _SberPayExampleAppState extends State&lt;SberPayExampleApp> {  late final TextEditingController _controller;  late String _paymentStatus;  late bool _isPluginLoading;  late bool _isAppReadyForPay;  late bool _isPluginInitialized;  late SberPayEnv _selectedInitType;  late Color _color;   @override  void initState() {    super.initState();    _controller = TextEditingController();    _paymentStatus = '';    _selectedInitType = SberPayEnv.sandboxWithoutBankApp;    _isPluginLoading = false;    _isAppReadyForPay = false;    _isPluginInitialized = false;    _color = Colors.grey;    _readyForPay();  }   Future&lt;void> _readyForPay() async {    setState(() => _isPluginLoading = true);    _isPluginInitialized = await SberPayPlugin.initSberPay(      env: _selectedInitType.name,    );    if (mounted) setState(() {});     _isAppReadyForPay = await SberPayPlugin.isReadyForSPaySdk();    if (!_isAppReadyForPay) {      _isAppReadyForPay = await SberPayPlugin.isReadyForSPaySdk();    }    if (mounted) setState(() => _isPluginLoading = false);  }   void _setEnv(SberPayEnv env) {    _selectedInitType = env;    _paymentStatus = '';    _color = Colors.grey;    _readyForPay();  }   @override  void dispose() {    _controller.dispose();    super.dispose();  }   @override  Widget build(BuildContext context) {    return MaterialApp(      theme: ThemeData(        colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xFF21A038)),        useMaterial3: true,      ),      home: Scaffold(        appBar: AppBar(          title: const Text('SberPay plugin example'),          backgroundColor: const Color(0xFF21A038),          centerTitle: true,        ),        body: Builder(          builder: (context) {            return Padding(              padding: const EdgeInsets.all(8.0),              child: SingleChildScrollView(                child: Column(                  mainAxisSize: MainAxisSize.min,                  children: [                    Table(                        border: TableBorder.all(),                        defaultVerticalAlignment:                            TableCellVerticalAlignment.middle,                        children: [                          _tableRowWrapper(                            '\u0422\u0438\u043f \u0437\u0430\u043f\u0443\u0441\u043a\u0430',                            Column(                              children: [                                ChoiceChip(                                  label: const Text('\u041f\u0440\u043e\u0434'),                                  selected:                                      _selectedInitType == SberPayEnv.prod,                                  onSelected: (_) => _setEnv(SberPayEnv.prod),                                ),                                const SizedBox(                                  width: 10,                                ),                                ChoiceChip(                                  label: const Text('\u041f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430\/\u0411\u0430\u043d\u043a'),                                  selected: _selectedInitType ==                                      SberPayEnv.sandboxRealBankApp,                                  onSelected: (_) => _setEnv(                                    SberPayEnv.sandboxRealBankApp,                                  ),                                ),                                const SizedBox(                                  width: 10,                                ),                                ChoiceChip(                                  label: const Text('\u041f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430'),                                  selected: _selectedInitType ==                                      SberPayEnv.sandboxWithoutBankApp,                                  onSelected: (_) => _setEnv(                                    SberPayEnv.sandboxWithoutBankApp,                                  ),                                ),                              ],                            ),                          ),                          _tableRowWrapper(                            '\u041f\u043b\u0430\u0433\u0438\u043d \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d',                            Text(_isPluginLoading                                ? '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430'                                : _isPluginInitialized                                    ? \"\u0414\u0410\"                                    : \"\u041d\u0415\u0422\"),                          ),                          _tableRowWrapper(                            '\u041e\u043f\u043b\u0430\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430',                            Text(_isPluginLoading                                ? '\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430'                                : _isAppReadyForPay                                    ? \"\u0414\u0410\"                                    : \"\u041d\u0415\u0422\"),                          ),                          _tableRowWrapper(                            '\u0421\u0442\u0430\u0442\u0443\u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u043f\u043b\u0430\u0442\u044b',                            SizedBox(                              height: 80,                              child: Row(                                children: [                                  CircleAvatar(                                    backgroundColor: _color,                                    radius: 10.0,                                  ),                                  Flexible(                                    child: Text(                                      _paymentStatus.isEmpty                                          ? \"\u041e\u043f\u043b\u0430\u0442\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c\"                                          : _paymentStatus,                                      textAlign: TextAlign.center,                                    ),                                  )                                ],                              ),                            ),                          ),                        ]),                    const SizedBox(height: 16),                    Padding(                      padding: const EdgeInsets.symmetric(horizontal: 16),                      child: TextField(                        controller: _controller,                        textInputAction: TextInputAction.done,                        decoration: InputDecoration(                          hintText: '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 bankInvoiceID',                          suffixIcon: GestureDetector(                            onTap: () {                              _controller.clear();                              _color = Colors.grey;                              setState(() => _paymentStatus = '');                            },                            child: const Icon(Icons.close, size: 32),                          ),                        ),                      ),                    ),                    const SizedBox(height: 16),                    Padding(                      padding: const EdgeInsets.symmetric(horizontal: 16),                      child: _isPluginLoading                          ? Container(                              height: 48,                              decoration: BoxDecoration(                                color: const Color(0xFF21A038),                                borderRadius: BorderRadius.circular(12),                              ),                              child: const Center(                                child: CircularProgressIndicator(                                  color: Colors.white,                                ),                              ),                            )                          : SberPayButton(                              onPressed: () async {                                if (_apiKey.isEmpty || _merchantLogin.isEmpty) {                                  ScaffoldMessenger.of(context).showSnackBar(                                    const SnackBar(                                      content: Text(                                        '\u041d\u0435 \u0437\u0430\u0434\u0430\u043d\u044b apiKey \u0438\/\u0438\u043b\u0438 merchantLogin',                                      ),                                      duration: Duration(seconds: 2),                                    ),                                  );                                  return;                                }                                if (_controller.text.isEmpty) {                                  ScaffoldMessenger.of(context).showSnackBar(                                    const SnackBar(                                      content: Text('\u0412\u0432\u0435\u0434\u0438\u0442\u0435 bankInvoiceID'),                                      duration: Duration(seconds: 2),                                    ),                                  );                                } else {                                  try {                                    final result = await SberPayPlugin                                        .payWithBankInvoiceId(                                      apiKey: _apiKey,                                      merchantLogin: _merchantLogin,                                      bankInvoiceId: _controller.text,                                      redirectUri: _redirectUri,                                    );                                    switch (result) {                                      case SberPayPaymentStatus.success:                                        _color = Colors.green;                                        _paymentStatus =                                            '\u041e\u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u043e\u0448\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e';                                        break;                                      case SberPayPaymentStatus.processing:                                        _color = Colors.yellow;                                        _paymentStatus =                                            '\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u043f\u043b\u0430\u0442\u044b';                                        break;                                      case SberPayPaymentStatus.cancel:                                        _color = Colors.blue;                                        _paymentStatus =                                            '\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043c\u0435\u043d\u0438\u043b \u043e\u043f\u043b\u0430\u0442\u0443';                                        break;                                      case SberPayPaymentStatus.unknown:                                        _color = Colors.purple;                                        _paymentStatus =                                            '\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435';                                    }                                    setState(() {});                                  } on PlatformException catch (e) {                                    setState(                                      () {                                        _color = Colors.red;                                        _paymentStatus = e.details ?? '';                                      },                                    );                                  }                                }                              },                            ),                    ),                  ],                ),              ),            );          },        ),      ),    );  }   TableRow _tableRowWrapper(String title, Widget secondChild) {    return TableRow(      children: [        TableCell(child: Text(title, textAlign: TextAlign.center)),        Padding(          padding: const EdgeInsets.all(4.0),          child: Center(child: secondChild),        ),      ],    );  } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d \u043a\u043e\u0434\u0435 \ud83d\ude42<\/p>\n<p>\u0414\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>payWithBankInvoiceId<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <code>apiKey<\/code> \u0438 <code>merchantLogin<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0445 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 credentials, \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f aar-\u0431\u0430\u043d\u0434\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u0435\u0440\u0441\u0438\u0439, \u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439. \u0412\u0441\u0435 \u0436\u0435 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 <a href=\"https:\/\/codewithandrea.com\/articles\/flutter-api-keys-dart-define-env-files\/\"><u>\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u044b<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u042d\u0442\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 <code>redirectUri<\/code><em>,<\/em> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u043f\u043b\u0438\u043d\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432 iOS \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u0437 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p>\u041d\u0430 Android \u0438 iOS \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043e\u0442\u043c\u0435\u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u044b (\u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u0435\u0440\u043d\u0443\u043b \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u043b\u0438\u0431\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0436\u0430\u043b \u00ab\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u043f\u043b\u0430\u0442\u0443\u00bb). \u0415\u0441\u043b\u0438 \u0432 iOS \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <code>cancel<\/code>, \u0442\u043e \u0432 Android \u044d\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0432\u044b\u0448\u0435\u0438\u0437\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0443\u0434\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd8\/fdf\/b04\/cd8fdfb04e5581f973f3fbf8d31935de.gif\" width=\"1052\" height=\"591\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd8\/fdf\/b04\/cd8fdfb04e5581f973f3fbf8d31935de.gif\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/117\/9c0\/b40\/1179c0b4095f2e65db90263f1cc32dbd.gif\" width=\"1049\" height=\"589\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/117\/9c0\/b40\/1179c0b4095f2e65db90263f1cc32dbd.gif\"\/><\/figure>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u0441\u044f\u043a\u0438\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438. \u041a\u043e\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043b\u044e\u0434\u0438, \u0433\u0434\u0435-\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0433\u0434\u0435-\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f. \u0418 \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0412\u0430\u0436\u043d\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0440\u0435\u043c\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0432\u0435\u0434\u044c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u0438 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 <a href=\"https:\/\/github.com\/RonFall\/sber_pay\"><u>\u0432 GitHub<\/u><\/a>. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0438\u043c \u043c\u043d\u0435\u043d\u0438\u0435\u043c \u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u043e\u0434 \u044d\u0442\u0438\u043c \u043f\u043e\u0441\u0442\u043e\u043c.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/771354\/\"> https:\/\/habr.com\/ru\/articles\/771354\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p><em>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042d\u0442\u043e <\/em><a href=\"https:\/\/habr.com\/ru\/users\/RonFall\/\"><em><u>\u041c\u0443\u0440\u0430\u0442 \u041d\u0430\u0441\u0438\u0440\u043e\u0432<\/u><\/em><\/a><em> \u0438 <\/em><a href=\"https:\/\/habr.com\/ru\/users\/artembark\/\"><em><u>\u0410\u0440\u0442\u0435\u043c \u0411\u0430\u0440\u043a\u0430\u043b\u043e\u0432<\/u><\/em><\/a><em>, \u043c\u044b Flutter-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 <\/em><a href=\"https:\/\/friflex.com\/\"><em><u>\u0432 Friflex<\/u><\/em><\/a><em>. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u0430 \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 Flutter. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u0435\u0439\u0441\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043e\u043f\u043b\u0430\u0442\u044b SberPay \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043d\u0430 Flutter. \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0421\u0431\u0435\u0440\u041f\u044d\u0439 \u0438 \u0448\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438\u0437 \u043d\u0430\u0442\u0438\u0432\u0430 \u0432\u043e Flutter.<\/em><\/p>\n<p>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/p>\n<ol>\n<li>\n<p><a href=\"#%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0%20%D0%B2%20%D1%88%D0%BB%D1%8E%D0%B7%D0%B5%20%D0%A1%D0%B1%D0%B5%D1%80%D0%B0\">\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/a> <\/p>\n<p>3.1 <a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20Android-%D1%87%D0%B0%D1%81%D1%82%D0%B8\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438<\/a> <\/p>\n<p>3.1.1 <a href=\"#%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20Maven%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a> <\/p>\n<p>3.1.2 <a href=\"#%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/a> <\/p>\n<p>3.1.3 <a href=\"#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a> <\/p>\n<p>3.1.4 <a href=\"#Android-%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%20%D0%B8%20%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0\">Android-\u043f\u043b\u0430\u0433\u0438\u043d \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 <\/a><\/p>\n<p>3.2 <a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20iOS-%D1%87%D0%B0%D1%81%D1%82%D0%B8\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 iOS-\u0447\u0430\u0441\u0442\u0438<\/a> <\/p>\n<p>3.2.1 <a href=\"https:\/\/iOS%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD\">iOS \u043f\u043b\u0430\u0433\u0438\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%20%D0%B2%20Flutter-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0432 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\" id=\"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\">\u043e\u0432\u043a\u0430&#187;><\/a><\/p>\n<h2>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430<\/h2>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SberPay SDK \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u00ab\u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a \u041e\u043d\u043b\u0430\u0439\u043d\u00bb (\u0421\u0411\u041e\u041b), \u0438\u043d\u0430\u0447\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u043b\u0430\u0442\u044b \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043b\u0438\u0431\u043e \u043d\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 iOS, \u043b\u0438\u0431\u043e \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 iOS \u0438\u043b\u0438 Android. \u041d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 Android \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043e\u043f\u043b\u0430\u0442\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SDK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043c\u0430\u0440\u0442\u0444\u043e\u043d\u043e\u0432: \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u044e, bluetooth, Wi-Fi \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0448\u0435\u043d\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0430\u043d\u0442\u0438\u0444\u0440\u043e\u0434).<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0443\u0437\u043d\u0430\u0435\u0442 \u043e\u0442 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u0430 (\u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 SberPay SDK \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435), \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c (credentials) \u0438 \u0441\u0441\u044b\u043b\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>build.gradle<\/code> \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f) \u0432 \u0447\u0430\u0441\u0442\u0438 Android \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041b\u0438\u0431\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f <em>aar-\u0431\u0430\u043d\u0434\u043b<\/em>. \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SDK \u043d\u0430 iOS \u0432\u044b\u0434\u0430\u0434\u0443\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0445\u043e\u0442\u044f <a href=\"https:\/\/github.com\/sdkpay\/sdkpay-static\"><u>\u043e\u043d \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439<\/u><\/a>.\u00a0<\/p>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f SDK \u0432\u044b\u0434\u0430\u044e\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 <code>apiKey<\/code> \u0438 <code>merchantLogin<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 SberPay SDK \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043e\u043d\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b SberPay \u0432 \u043f\u0440\u043e\u0434\u0435 \u043a\u043b\u0438\u0435\u043d\u0442, \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u044d\u0442\u043e\u0442 SDK, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043e\u0433\u043e\u0432\u043e\u0440 \u0441 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a\u043e\u043c \u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0%20%D0%B2%20%D1%88%D0%BB%D1%8E%D0%B7%D0%B5%20%D0%A1%D0%B1%D0%B5%D1%80%D0%B0\" id=\"\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430\">\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430&#187;<\/a><\/p>\n<h2>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430<\/h2>\n<p>\u0412 <a href=\"https:\/\/developers.sber.ru\/docs\/ru\/sberpay-sdk\/sign-up\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a> \u043e\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u043e\u043c \u0448\u043b\u044e\u0437\u0435 \u0421\u0431\u0435\u0440\u0430, \u043e\u0442\u043a\u0443\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 <code>sbolBankInvoiceId<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430 \u0431\u0435\u043a\u0435\u043d\u0434 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c <code>sbolBankInvoiceId<\/code> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/integration:api:callback:start\"><u>\u043a\u043e\u043b\u043b\u0431\u044d\u043a\u043e\u0432<\/u><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0421\u0431\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0431\u0435\u043a\u0435\u043d\u0434\u0443, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u043e\u043f\u043b\u0430\u0442\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/integration:sbol:start\"><u>\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043a\u0430\u0437\u0430<\/u><\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 Postman (<a href=\"https:\/\/drive.google.com\/file\/d\/1ItGUkMCh4gJtoz5PGWjzzu7RBIDsTlZZ\/view?usp=sharing\"><u>\u0444\u0430\u0439\u043b<\/u><\/a>):<\/p>\n<p>POST <a href=\"https:\/\/3dsec.sberbank.ru\/payment\/rest\/register.do\"><u>https:\/\/3dsec.sberbank.ru\/payment\/rest\/register.do<\/u><\/a>, \u0433\u0434\u0435 <code>register.do<\/code> &#8212; <a href=\"https:\/\/securepayments.sberbank.ru\/wiki\/doku.php\/start\"><u>\u043e\u0434\u043d\u043e\u0441\u0442\u0430\u0434\u0438\u0439\u043d\u0430\u044f \u043e\u043f\u043b\u0430\u0442\u0430<\/u><\/a>:<\/p>\n<pre><code class=\"markdown\">{   \"userName\": \"testUserName\", \/\/ \u043b\u043e\u0433\u0438\u043d \u041b\u041a \u0421\u0431\u0435\u0440\u0430, \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443   \"password\": \"testPassword\", \/\/ \u043f\u0430\u0440\u043e\u043b\u044c \u041b\u041a \u0421\u0431\u0435\u0440\u0430, \u0432\u044b\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443    \"orderNumber\": \"e2574f1785324f1592d9029cb05adbbd\", \/\/ \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0437\u0430\u043a\u0430\u0437\u0430   \"amount\": 19900, \/\/ \u0441\u0443\u043c\u043c\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435 \u0432 \u043a\u043e\u043f\u0435\u0439\u043a\u0430\u0445   \"returnUrl\": \"sbersdk:\/\/spay\", \/\/ \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a \u0421\u0414\u041a   \"jsonParams\": {     \"app2app\": true, \/\/ \u0415\u0441\u043b\u0438 true, \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u043f\u0440\u0438\u0434\u0435\u0442 sbolBankInvoiceId     \"app.osType\" : \"android\", \/\/ \u0422\u0438\u043f \u041e\u0421 (\u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441 \u0442\u0430\u043a\u0438\u043c)     \"app.deepLink\": \"sbersdk:\/\/spay\" \/\/ \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a \u0421\u0414\u041a   } }<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u0430:<\/p>\n<pre><code class=\"markdown\">{     \"orderId\": \"1a8fb4ab-fe19-7372-94b6-2deb29335df0\",     \"formUrl\": \"https:\/\/secure-payment-gateway.ru\/payment\/merchants\/sbersafe_sberid\/payment_ru.html?mdOrder=1a8fb4ab-fe19-7372-94b6-2deb29335df0\",     \"externalParams\": {         \"sbolInactive\": \"false\",         \"sbolBankInvoiceId\": \"72e48b040afb4483b0a8c13c77e7e6f2\",         \"sbolDeepLink\": \"sberpay:\/\/invoicing\/v2?bankInvoiceId=72e48b040afb4483b0a8c13c77e7e6f2&amp;operationType=app2app\"     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u044f <code>returnUrl<\/code> \u0438 <code>app.deeplink<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0434\u0438\u043f\u043b\u0438\u043d\u043a\u043e\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 \u0421\u0431\u0435\u0440\u0431\u0430\u043d\u043a (\u043b\u0438\u0431\u043e \u0421\u0411\u041e\u041b), \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d\u0438 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043b\u0443\u0447\u0448\u0435 \u0438\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0432 \u0431\u0435\u0441\u0435\u0434\u0435 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 SDK, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0438\u043f\u043b\u0438\u043d\u043a \u0444\u043e\u0440\u043c\u0430\u0442\u0430 <code>&lt;\u0432\u0430\u0448\u0430\u0441\u0445\u0435\u043c\u0430>:\/\/spay<\/code>. \u0415\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0435 \u0421\u0431\u0435\u0440\u0430. \u0414\u0430\u043b\u044c\u0448\u0435 \u043e\u043d \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 iOS-\u0447\u0430\u0441\u0442\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<p>\u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437, \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0433\u043e <code>sbolBankInvoiceId<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043a\u043d\u043e \u0421\u0431\u0435\u0440\u041f\u044d\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430 (\u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u0430), \u0442\u043e\u0433\u0434\u0430 <code>sbolBankInvoiceId<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c, \u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437 \u0441 \u0442\u0430\u043a\u0438\u043c \u0436\u0435 <code>orderNumber<\/code> \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u043b\u0430\u0442\u044b \u043d\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0435. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430\u043a\u0430\u0437 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0432\u0430\u0439\u0440\u0438\u043d\u0433. \u041d\u0430 iOS \u0438 Android \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043e\u0442\u043c\u0435\u043d\u0443 \u043e\u043f\u043b\u0430\u0442\u044b, \u043e\u0431 \u044d\u0442\u043e\u043c \u2014 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0\" id=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430\">\u043f\u043b\u0430\u0433\u0438\u043d\u0430&#187;<\/a><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/h2>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 Flutter \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 (<a href=\"https:\/\/docs.flutter.dev\/development\/packages-and-plugins\/developing-packages\"><u>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/u><\/a>):<\/p>\n<pre><code class=\"markdown\">flutter create --org plugin.sdk --template=plugin --platforms=android,ios sber_pay<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>plugin.sdk<\/code> \u2014 \u043f\u0443\u0442\u044c \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 Android-\u0441\u0442\u043e\u0440\u043e\u043d\u0435;<\/p>\n<\/li>\n<li>\n<p><code>--template=plugin<\/code> \u2014 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043b\u0430\u0433\u0438\u043d;<\/p>\n<\/li>\n<li>\n<p><code>sber_pay<\/code> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u2014 \u0432\u0432\u0438\u0434\u0443 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/strong><\/p>\n<p><a class=\"anchor\" name=\"%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5%20Android-%D1%87%D0%B0%D1%81%D1%82%D0%B8\" id=\"\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438\">d-\u0447\u0430\u0441\u0442\u0438&#187;><\/a><\/p>\n<h4>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 Android-\u0447\u0430\u0441\u0442\u0438<\/h4>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f Android SDK &#8212; 21.<\/p>\n<p>\u0415\u0441\u0442\u044c 2 \u043f\u0443\u0442\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 SDK.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a Android  <\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20Maven%20%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9\" id=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439\">n \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439&#187;><\/a><\/p>\n<h4>1) \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Maven \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/h4>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>android\/build.gradle<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 <code>android {...}<\/code>, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>dependencies<\/code> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c:<\/p>\n<pre><code class=\"markdown\">dependencies {    implementation( 'ru.spaymentsplus.libraries:spaysdk:1.2.4' ) { transitive = true } }<\/code><\/pre>\n<p>\u041f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f aar-\u0431\u0430\u043d\u0434\u043b\u0430. \u0412\u043e\u043e\u0431\u0449\u0435, \u043a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 SDK, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u0438 \u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0435. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043e\u0434\u0438\u043d, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431.\u00a0<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>sber_pay\/example\/android\/sberpay.properties<\/code> \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"markdown\">sPayUrl=\u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 sPayUsername=\u043b\u043e\u0433\u0438\u043d \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430 sPayPassword=\u043f\u0430\u0440\u043e\u043b\u044c \u0438\u0437 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u0430<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <code>sber_pay\/example\/android\/.gitignore<\/code><em> <\/em>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c <code>sberpay.properties<\/code> \u043a\u0430\u043a \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043f\u043e\u043f\u0430\u043b \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 <code>build.gradle<\/code> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c aar-\u0431\u0430\u043d\u0434\u043b\u044b \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432 <code>sberpay.properties<\/code><em> <\/em>\u0434\u0430\u043d\u043d\u044b\u043c:<\/p>\n<pre><code class=\"markdown\">def sberpayProperties = new File('sberpay.properties') def properties = new Properties() properties.load(sberpayProperties.newDataInputStream())  def link = properties.getProperty('sPayUrl') def login = properties.getProperty('sPayUsername') def pass = properties.getProperty('sPayPassword')  allprojects {    repositories {        google()        mavenCentral()        maven {            name = \"GitHubPackages\"            url = uri(link)            credentials {                username = login                password = pass            }        }    } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043b\u043e\u0433\u0438\u043d\/\u043f\u0430\u0440\u043e\u043b\u044c\/\u0441\u0441\u044b\u043b\u043a\u0443. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0442\u0430\u043a\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e SberPay SDK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u044d\u0442\u043e\u0442 SDK (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u043d\u0430 Android \u0441\u0442\u043e\u0440\u043e\u043d\u0435) \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E\" id=\"\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e\"> \u0432\u0440\u0443\u0447\u043d\u0443\u044e&#187;><\/a><\/p>\n<h4>2) \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h4>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0432 aar-\u0431\u0430\u043d\u0434\u043b\u044b, \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0435 <code>android<\/code> \u043f\u0430\u043f\u043a\u0443 <code>libs<\/code> \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0417\u0430\u0442\u0435\u043c \u0432 <code>build.gradle<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 <code>android {...}<\/code> \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>dependencies<\/code> \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c<\/p>\n<pre><code class=\"markdown\">dependencies {    \/\/ .aar \u0431\u0430\u043d\u0434\u043b\u044b SberPay SDK    implementation files('..\/libs\/bms-sdk-fingerprint_VERSION_release.aar')    implementation files('..\/libs\/SDK-VERSION.aar')     \/\/ \u0422\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b SberPay SDK    implementation 'com.google.android.material:material:&lt;version>'    implementation 'io.github.sberid:SberIdSDK:&lt;version>'    implementation 'com.google.dagger:dagger:&lt;version>'    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:&lt;version>' }<\/code><\/pre>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0437\u0434\u0435\u0441\u044c aar-\u0431\u0430\u043d\u0434\u043b\u044b, \u0435\u0441\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u0435\u0440\u0441\u0438\u0439, \u0434\u043e\u043b\u0436\u043d\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 <strong>\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/strong>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0\" id=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\">\u043f\u0440\u043e\u0435\u043a\u0442\u0430&#187;><\/a><\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f SberPay SDK \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>minSdkVersion 21<\/code> \u0432 <code>sber_pay\/android\/build.gradle<\/code>:<\/p>\n<pre><code class=\"markdown\">defaultConfig {    minSdkVersion 21 }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432<em> <\/em><code>sber_pay\/example\/android\/app\/build.gradle<\/code> \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 21 \u0432\u0435\u0440\u0441\u0438\u044f:  <\/p>\n<pre><code class=\"markdown\">defaultConfig {    \u2026    minSdkVersion 21 }<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <a href=\"https:\/\/developers.sber.ru\/docs\/ru\/sberpay-sdk\/androidsdk\/start-sdk#zapros-razresheniy\"><u>\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/u><\/a> \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <code>sber_pay\/example\/android\/app\/src\/main\/AndroidManifest.xml<\/code>:<\/p>\n<pre><code class=\"xml\">&lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" \/> &lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_UPDATES\" \/> &lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" \/><\/code><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0448\u0430\u043d\u0441\u044b \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043e\u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c SberPay \u0432 \u0440\u0435\u043b\u0438\u0437\u0435, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c proguard. \u0412 <code>android\/app\/build.gradle<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>shrinkResources<\/code> \u0438 <code>minifyEnabled<\/code> \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b:<\/p>\n<pre><code class=\"markdown\">android {     ...     buildTypes {         release {             \/\/ shrinkResources \u0438 minifyEnabled \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b, \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e true, \u043e\u0434\u043d\u0430\u043a\u043e \u043b\u0443\u0447\u0448\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u044f\u0432\u043d\u043e             shrinkResources true             minifyEnabled true             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'         }     } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 <code>android\/app\/proguard-rules.pro<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c:<\/p>\n<pre><code>-keep class spay.sdk.** { *; }  -keepclassmembers,allowobfuscation class * {   @com.google.gson.annotations.SerializedName &lt;fields>; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 <code>shrinkResources<\/code> \u0438 <code>minifyEnabled<\/code> \u0432 <code>android\/app\/build.gradle<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c <code>false<\/code>:<\/p>\n<pre><code>android {     ...     buildTypes {         release {<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-359108","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=359108"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/359108\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=359108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=359108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=359108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}