{"id":24107,"date":"2025-03-13T10:57:37","date_gmt":"2025-03-13T10:57:37","guid":{"rendered":"https:\/\/www.qly.docs.pay.sibs.com\/sibs-gateway-dokumentacja\/platnosci-stacjonarne\/integracja-app-to-app\/"},"modified":"2025-07-08T09:03:51","modified_gmt":"2025-07-08T09:03:51","slug":"integracja-app-to-app","status":"publish","type":"page","link":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/sibs-gateway-dokumentacja\/platnosci-stacjonarne\/integracja-app-to-app\/","title":{"rendered":"Integracja app-to-app"},"content":{"rendered":"<!-- wp:themify-builder\/canvas \/-->\n\n\n<p>Nasza integracja mi\u0119dzy aplikacjami umo\u017cliwia p\u0142ynne po\u0142\u0105czenie mi\u0119dzy aplikacj\u0105 sprzedawcy a nasz\u0105 aplikacj\u0105 LightPOS, zapewniaj\u0105c klientom szybki i bezpieczny spos\u00f3b dokonywania p\u0142atno\u015bci. Sprawd\u017a szczeg\u00f3\u0142y poni\u017cej, aby rozpocz\u0105\u0107 integracj\u0119 z aplikacjami na Androida i iOS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Android<\/h3>\n\n\n\n<p>Sprawd\u017a kroki wymagane do wykonania po\u0142\u0105czenia \u201eapp-to-app\u201d w aplikacjach na Androida. Proces rozwoju obejmuje trzy kroki:<\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok1-android\">Krok 1: Utw\u00f3rz zamiar wywo\u0142ania aplikacji SoftPOS<\/a><\/h6>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok2-android\">Krok 2: Zdefiniuj klas\u0119 obiektu MessageToSend<\/a><\/h6>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok3-android\">Krok 3: Uzyskaj odpowied\u017a od SoftPOS<\/a><\/h6>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"krok1-android\">Krok 1: Utw\u00f3rz zamiar wywo\u0142ania aplikacji SoftPOS<\/h5>\n\n\n\n<p>Komunikacja z aplikacj\u0105 SoftPOS odbywa si\u0119 za pomoc\u0105 intencji systemu Android. Oznacza to, \u017ce wywo\u0142anie SoftPOS przez aplikacj\u0119 Android odbywa si\u0119 za po\u015brednictwem intencji, kt\u00f3ra zawiera pakiet z wymaganymi informacjami dla transakcji.<\/p>\n\n\n\n<p>Dane wysy\u0142ane do SoftPOS mo\u017cna znale\u017a\u0107 w poni\u017cszym przyk\u0142adzie kodu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">private<\/mark> Intent <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">createPendingIntent<\/mark>(String reference, String value){\n    Intent launchIntent = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">new<\/mark> Intent();\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/\/Package of Smartpos that will be called<\/mark>\nlaunch.Intente.setClassName(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201cpt.sibs.android.mpos.stargatePaytelQLY\u201d<\/mark>,<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201dpt.sibs.android.mpos.activities.MainActivity\u201d<\/mark>);\n\n    TaskStackBuilder stackBuilder = TaskStackBuilder.create(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">this<\/mark>);\n    stackBuilder.addNextIntent(launchIntent);\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/\/ create a json with value and reference<\/mark>\n    MessageToSend messageToSend = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">new<\/mark> MessageToSend();\n    value? value.replaceAll(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201c&#91;^<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">\\\\<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">d.]\u201d<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201d\u201d<\/mark>);\n    messageToSend.setAmount(value);\n    messageToSend.setReference(reference);\n    Gson gson = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">new<\/mark> GsonBuilder().create();\n    String message = gson.toJson(messageToSend,MessageToSend.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">class<\/mark>);\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/\/ create json to a Base64<\/mark>\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">byte<\/mark>&#91;] bytes;\n    bytes = message.getBytes(StandardCharsets.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">UTF_8<\/mark>);\n    String base64msg = Base64.encodeToString(bytes, Base64.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">DEFAULT<\/mark>);\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/\/ create a bundle and intent to call mpos and send data over<\/mark>\n    Bundle data = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">new<\/mark> Bundle();\n    data.putString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">PACKAGE_ID<\/mark>, BuildConfig.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">APPLICATION_ID<\/mark>);\n    data.putBoolean(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">REQUEST RESPONSE<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">sw<\/mark>.isChecked());\n    data.putBoolean(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">BYPASS_INSERT_VALUE<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">bypassSw<\/mark>.isChecked());\n    data.putBoolean(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">EDITABLE_REFERENCE<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">editReferenceSw<\/mark>.isChecked());\n    data.putBoolean(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALL_IN_APP_FECHO<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">fechoSw<\/mark>.isChecked());\n    data.putString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">BASE64REFERENCE<\/mark>, base64msg);\n    data.putInt(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">REQUEST_KEY<\/mark>, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">activityRequestCode<\/mark>);\n    launchIntent.setFlags(Intent.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">FLAG_ACTIVITY_SINGLE_TOP<\/mark>);\n    launch.Intent.putExtra(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">DATA_MPOS<\/mark>, data);\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">return<\/mark> launchIntent;\n}<\/code><\/pre>\n\n\n\n<p>Przyk\u0142ad ilustruje metod\u0119, kt\u00f3ra ostatecznie zwraca intencj\u0119 z niezb\u0119dnymi informacjami. Najpierw tworzona jest intencja, a nast\u0119pnie&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">setClassName<\/mark>&nbsp;s\u0142u\u017cy do konfiguracji pakietu SoftPOS i dzia\u0142ania, kt\u00f3re zostanie wywo\u0142ane, w tym przypadku&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">MainActivity<\/mark>. Nazwa Activity, kt\u00f3ra ma by\u0107 u\u017cywana w wywo\u0142aniu \u201capp to app\u201d to<a>:&nbsp;<\/a><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">pt.sibs.android.mpos.activities.MainActivity<\/mark>.<\/p>\n\n\n\n<p>Po skonfigurowaniu intencji, jest tworzony obiekt niestandardowego typu o nazwie&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">MessageToSend<\/mark>&nbsp;.<\/p>\n\n\n\n<p>Ten obiekt jest u\u017cywany do przechowywania warto\u015bci dla p\u00f3l \u201creference\u201d, \u201camount\u201d i \u201cgratuityAmount\u201d, kt\u00f3re s\u0105 wymagane dla transakcji SoftPOS.<\/p>\n\n\n\n<p>Po utworzeniu obiektu i wype\u0142nieniu warto\u015bci obu p\u00f3l, obiekt jest konwertowany na json, przy u\u017cyciu funkcji&nbsp;<a href=\"https:\/\/github.com\/google\/gson\" target=\"_blank\" rel=\"noreferrer noopener\">Gson lib<\/a>&nbsp;, a nast\u0119pnie zakodowa\u0107 string json do&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">Base64<\/mark>.<\/p>\n\n\n\n<p>Po wype\u0142nieniu obiektu mo\u017cemy utworzy\u0107 Bundle, kt\u00f3ry zostanie przekazany wraz z Intencj\u0105. Bundle musi zawiera\u0107 nast\u0119puj\u0105ce elementy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>String z&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">Application ID<\/mark>&nbsp;aplikacji, kt\u00f3ra wywo\u0142uje SoftPOS;<\/li>\n\n\n\n<li>Warto\u015bci Boolean czy aplikacja wymaga odpowiedzi od SoftPOS; pozwala edytowa\u0107 kwot\u0119 i odniesienie; czy wykona polecenie Closure zamiast Purchase;<\/li>\n\n\n\n<li>String z warto\u015bciami Base64-encoded JSON;<\/li>\n\n\n\n<li>Warto\u015b\u0107&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">Integer<\/mark>&nbsp;w&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">StartActivity<\/mark>&nbsp;u\u017cyje&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">Intent<\/mark>&nbsp;stworzon\u0105 przez t\u0105 metod\u0119.<\/li>\n<\/ul>\n\n\n\n<p>Po utworzeniu Bundle&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">FLAG_ACTIVITY_SINGLE_TOP<\/mark>&nbsp;jest skonfigurowany w&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">Intent<\/mark>. Flaga ta jest ustawieniem konfiguracyjnym intencji, kt\u00f3re okre\u015bla, jak Activity powinno si\u0119 zachowywa\u0107 po uruchomieniu. Klucze u\u017cyte w the Bundle zostan\u0105 opisane w dalszej cz\u0119\u015bci tego przewodnika. Pakiety rozwojowe i produkcyjne zostan\u0105 udost\u0119pnione deweloperom po rozpocz\u0119ciu procesu integracji.<\/p>\n\n\n\n<style type=\"text\/css\">\n\t#message-box-block_b6c5fcd9da1d5763d745443c25b866bb {\n\t\t\/* Add styles that use ACF values here *\/\n\t}\n<\/style>\n\n<div id=\"message-box-block_b6c5fcd9da1d5763d745443c25b866bb\" class=\"block-message-box\">\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t<div class='row info' style=\"display: flex;\">\n\t\t\t  <div class='col' style=\"width: 10%; display: flex; align-items: center; justify-content: center;\">\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.qly.docs.pay.sibs.com\/wp-content\/themes\/themify-ultra-child\/images\/msg_info.svg\" alt=\"Info\">\n\t\t\t  <\/div>\n\t\t\t  <div class='col2'>\n\t\t\t\t<p ><p>Pakiety rozwojowe i produkcyjne zostan\u0105 udost\u0119pnione deweloperom po rozpocz\u0119ciu procesu integracji.<\/p>\n<\/p>\n\t\t\t  <\/div>\n\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t<\/div>\n\n\n<h5 class=\"wp-block-heading\" id=\"krok2-android\">Krok 2: Zdefiniuj klas\u0119 obiektu MessageToSend<\/h5>\n\n\n\n<p>W tym obiekcie nale\u017cy wype\u0142ni\u0107 nast\u0119puj\u0105ce pola:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">amount<\/mark><em>&nbsp;<\/em>to pole zawiera kwot\u0119 operacji i jest reprezentowane w centach. Przyk\u0142ad: w przypadku zakupu o warto\u015bci 10 EUR kwota musi by\u0107 wype\u0142niona warto\u015bci\u0105 \u201e1000\u201d. Ten typ pola to String;<\/li>\n\n\n\n<li><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">reference<\/mark><strong><em>&nbsp;<\/em><\/strong>to pole informuje o referencji zwi\u0105zanej z operacj\u0105. Jest ono typu String, o d\u0142ugo\u015bci do 25 znak\u00f3w (maximum). Mo\u017ce zawiera\u0107 warto\u015bci alfanumeryczne.<\/li>\n\n\n\n<li><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">gratuityAmount<\/mark>&nbsp;to pole zawiera kwot\u0119 napiwku zwi\u0105zanego z operacj\u0105 i jest reprezentowane w centach. Przyk\u0142ad: dla zakupu z napiwkiem w wysoko\u015bci 1 \u20ac, warto\u015b\u0107&nbsp;<em>gratuityAmount<\/em>&nbsp;musz\u0105 by\u0107 wype\u0142nione z warto\u015bci\u0105 \u2018100\u2019. To pole jest typu String.<\/li>\n<\/ul>\n\n\n\n<p>Oto przyk\u0142ad Class Message do wys\u0142ania:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">class<\/mark> MessageToSend {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@SerializedName<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"reference\"<\/mark>)\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">private<\/mark> String <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">reference<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@SerializedName<\/mark>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"ammount\"<\/mark>)\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">private<\/mark> String <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">ammount<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">setReference<\/mark>(String reference) {\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">this<\/mark>.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">reference<\/mark> = reference;\n    }\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">setAmmount<\/mark>(String amount) {\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">this<\/mark>.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">ammount<\/mark> = amount;\n    }\n\n   <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">setGratuityAmount<\/mark>(String gratuityAmount) {\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">this<\/mark>.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">gratuityAmount<\/mark> = gratuityAmount;\n    }\n}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"krok3-android\">Krok 3: Uzyskaj odpowied\u017a od SoftPOS<\/h5>\n\n\n\n<p>Po wykonaniu operacji mo\u017cna otrzyma\u0107 odpowied\u017a z systemu SoftPOS, je\u015bli flaga odpowiadaj\u0105ca kluczowi&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">\u201cREQUEST_RESPONSE\u201d<\/mark>&nbsp;oznacza warto\u015b\u0107&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">true<\/mark>.<\/p>\n\n\n\n<p>Poni\u017cszy przyk\u0142ad ilustruje, jak odczyta\u0107 odpowied\u017a, je\u015bli nadejdzie ona przez on&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">ActivityResult<\/mark>&nbsp;albo w&nbsp;<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">NewIntent<\/mark>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">@Override<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">protected void<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">onNewIntent<\/mark>(Intent intent) {\n    String status = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n    String errorCode = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n    String date = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n    String reference = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n    String amount = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n    \n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-purple-color\">\/\/ get response from mpos<\/mark>\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent != <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">null<\/mark> &amp;&amp; intent.getExtras() != <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">null<\/mark>) {\n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN ERROR KEY<\/mark>))\n        errorCode = intent.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_ERROR_KEY<\/mark>);\n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN STATUS KEY<\/mark>))\n        status = intent.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_STATUS_KEY<\/mark>);\n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN DATE KEY<\/mark>))\n        date = intent.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_DATE_KEY<\/mark>);\n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN AMOUNT KEY<\/mark>))\n        amount = intent.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_AMOUNT_KEY<\/mark>);\n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(intent.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN REF<\/mark>))\n        reference = intent.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_REF<\/mark>);\n\n        Toast.makeText(getApplicationContext(), <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"STATUS2: \"<\/mark>+status+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"> \\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Error: \"<\/mark>+errorCode+\" <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Amount:<\/mark> \"+ amount + \" <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Date:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark>+date+ <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Reference:<\/mark> \"+reference, Toast.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">LENGTH LONG<\/mark>).show());\n    }\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">super<\/mark>.onNewIntent(intent);\n}\n\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">@Override<\/mark>\n<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">protected void<\/mark> onActivityResult(int requestCode, int resultCode, <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-cyan-bluish-gray-color\">@Nullable<\/mark> Intent data) {\n    if(requestCode == activityRequestCode) {\n        String status = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n        String errorCode = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n        String date = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n        String reference = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n        String amount = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;   \n        String gratuity = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"\"<\/mark>;\n        \n\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark>(data != <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">null<\/mark> &amp;&amp; data.getExtras() != <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">null<\/mark>) {\n            <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark> (data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN ERROR KEY<\/mark>))\n            errorCode = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN ERROR KEY<\/mark>);\n\n            <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark> (data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_STATUS_KEY<\/mark>))\n            status = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN STATUS KEY<\/mark>);\n\n            <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark> (data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_DATE_KEY<\/mark>))\n            date = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN DATE KEY<\/mark>);\n\n            <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if <\/mark>(data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_AMOUNT_KEY<\/mark>))\n            amount = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN DATE KEY<\/mark>);\n\n            <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">if<\/mark> (data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_REF<\/mark>))\n            reference = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN REF<\/mark>);\n                if(data.getExtras().containsKey(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_GRATUITY_KEY<\/mark>))\n            gratuity = data.getExtras().getString(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">CALLIN_GRATUITY KEY<\/mark>);\n\n            Toast.makeText(getApplicationContext(), <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"STATUS2: \"<\/mark>+status+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Error:<\/mark> \"+errorcode+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Amount:<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark>+ amount + <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Gratuity<\/mark>: \"+ gratuity +<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Date: \"<\/mark>+date+<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\"<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\">\\n<\/mark> <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">Reference:<\/mark> \"+reference, Toast.<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-cyan-blue-color\">LENGTH LONG<\/mark>.show());\n        }\n    }\n}<\/code><\/pre>\n\n\n\n<p>W obu przypadkach odbierana jest intencja zawieraj\u0105ca Bundle wype\u0142niony przez SoftPOS danymi odpowiedzi.<\/p>\n\n\n\n<p>Po sprawdzeniu, czy intencja istnieje i zawiera pakiet, uzyskane zostan\u0105 warto\u015bci ka\u017cdego Key, je\u015bli s\u0105 obecne.<\/p>\n\n\n\n<p>Odpowied\u017a zwraca 6 warto\u015bci, wyszczeg\u00f3lnionych w poni\u017cszych tabelach:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Warto\u015b\u0107<\/th><th>Opis<\/th><th>Typ String<\/th><\/tr><\/thead><tbody><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">errorCode<\/mark><\/td><td>Odpowiada kodowi b\u0142\u0119du (je\u015bli istnieje) uzyskanemu przez SoftPOS podczas wykonywania operacji.<\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_ERROR_KEY<\/mark><\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">status<\/mark><\/td><td>Informuje o statusie operacji wykonywanej przez SoftPOS, kt\u00f3r\u0105 mo\u017ce by\u0107:<br><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">DeviceError<br>Success<br>Declined<br>CommError<br>Usercancelled<br>UserTimeOut<br>Missing Credentials<\/mark><\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_STATUS_KEY<\/mark><\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">date<\/mark><\/td><td>Informuje o dacie wykonania operacji przez system SoftPOS.<\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_DATE_KEY<\/mark><\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">amount<\/mark><\/td><td>Odpowiada warto\u015bci u\u017cytej w operacji wykonanej w SoftPOS, mo\u017ce by\u0107 u\u017cyta do por\u00f3wnania z warto\u015bci\u0105 wys\u0142an\u0105 w pakiecie, kt\u00f3ry wywo\u0142a\u0142 aplikacj\u0119 SoftPOS.<\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_AMOUNT_KEY<\/mark><\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">reference<\/mark><\/td><td>Odpowiada referencji u\u017cytej w operacji wykonanej w aplikacji SoftPOS, mo\u017ce by\u0107 u\u017cyta do por\u00f3wnania z warto\u015bci\u0105 wys\u0142an\u0105 w pakiecie, kt\u00f3ry wywo\u0142a\u0142 aplikacj\u0119 SoftPOS.<\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_REF<\/mark><\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">gratuityAmount<\/mark><\/td><td>Odpowiada kwocie napiwku w operacji wykonanej przez aplikacj\u0119 SoftPOS. Mo\u017cna jej u\u017cy\u0107 do por\u00f3wnania z kwot\u0105 wys\u0142an\u0105 w Bundle, kt\u00f3ry wywo\u0142a\u0142 aplikacj\u0119 SoftPOS.<\/td><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_GRATUITY_KEY<\/mark><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Below you can find a table with the Used Keys and correspondent definition:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Klucze Usera<\/th><th>Definicje Key<\/th><\/tr><\/thead><tbody><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">DATA_MPOS<\/mark><\/td><td>Odpowiada nazwie <em>Bundle <\/em>u\u017cywanego do wywo\u0142ywania aplikacji SoftPOS.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">PACKAGE_ID<\/mark><\/td><td>Zawiera application ID aplikacji, kt\u00f3ra wywo\u0142uje SoftPOS.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">BASE64REFERENCE<\/mark><\/td><td>Odpowiada warto\u015bci w base 64 pliku json utworzonego z obiektu MessageToSend z wype\u0142nionymi warto\u015bciami amount i reference.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">REQUEST_RESPONSE<\/mark><\/td><td>Odpowiada znacznikowi (fladze), czy aplikacja wywo\u0142uj\u0105ca SoftPOS wymaga odpowiedzi.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">BYPASS_INSERT_VALUE<\/mark><\/td><td>Odpowiada znacznikowi wskazuj\u0105cemu, czy aplikacja wywo\u0142uj\u0105ca SoftPOS zezwala na zmian\u0119 kwoty.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">EDITABLE_REFERENCE<\/mark><\/td><td>Odpowiada znacznikowi wskazuj\u0105cemu, czy aplikacja wywo\u0142uj\u0105ca SoftPOS zezwala na zmian\u0119 odniesienia.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">REQUEST_KEY<\/mark><\/td><td>Odpowiada warto\u015bci Int u\u017cytej w StartActivity, kt\u00f3ra u\u017cy\u0142a utworzonej intencji.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_ERROR_KEY<\/mark><\/td><td>U\u017cywany w przypadku odpowiedzi odpowiadaj\u0105cej b\u0142\u0119dowi (je\u015bli wyst\u0119puje) uzyskanemu przez SoftPOS podczas wykonywania operacji.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_STATUS_KEY<\/mark><\/td><td>U\u017cywany w przypadku odpowiedzi i informuje o statusie operacji wykonanej przez SoftPOS (<em>zaakceptowana, odrzucona<\/em> itp.).<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_AMOUNT_KEY<\/mark><\/td><td>U\u017cywany w przypadku odpowiedzi i odpowiada kwocie operacji wykonanej w systemie SoftPOS.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_GRATUITY_KEY<\/mark><\/td><td>U\u017cywana w przypadku odpowiedzi i odpowiada kwocie napiwku w operacji wykonywanej w SoftPOS. Warto\u015b\u0107 jest typu String<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_DATE_KEY<\/mark><\/td><td>U\u017cywany w przypadku odpowiedzi i informuje o dacie wykonania operacji w systemie SoftPOS.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALLIN_REF<\/mark><\/td><td>U\u017cywany w przypadku odpowiedzi i zawiera odniesienie u\u017cyte w operacji wykonanej w SoftPOS.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CALL_IN_APP_FECHO<\/mark><\/td><td>COdpowiada fladze wskazuj\u0105cej, czy aplikacja wykona zamkni\u0119cie (\u201efecho\u201d, po portugalsku) zamiast zakupu.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">iOS<\/h3>\n\n\n\n<p>Sprawd\u017a kroki wymagane do wykonania po\u0142\u0105czenia \u201eapp-to-app\u201d w aplikacjach iOS. Proces rozwoju obejmuje trzy kroki:<\/p>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok1-ios\">Krok 1: Konfiguracja aplikacji<\/a><\/h6>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok2-ios\">Krok 2: Tworzenie modelu danych do przeniesienia do SoftPOS<\/a><\/h6>\n\n\n\n<h6 class=\"wp-block-heading\"><a href=\"#krok3-ios\">Krok 3: Uzyskaj odpowied\u017a od SoftPOS<\/a><\/h6>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"krok1-ios\">Krok 1: Konfiguracja aplikacji<\/h5>\n\n\n\n<p>Aby otrzymywa\u0107 odpowiedzi z systemu SoftPOS, aplikacja kliencka musi skonfigurowa\u0107 typ adresu URL w polu projektu Info.plist. Nazwa (scheme) musi by\u0107 zdefiniowane w polu URL Schemes \u2013 jest to nazwa, pod kt\u00f3r\u0105 SoftPOS app stworzy po\u0142\u0105czenie \u201capp to app\u201d aby uzyska\u0107 odpowied\u017a z wynikiem operacji wykonanej w SoftPOS.<\/p>\n\n\n\n<p>W poni\u017cszym przyk\u0142adzie schemat \u201eapp-to-app\u201d musi zosta\u0107 zast\u0105piony schematem aplikacji klienckiej:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1004\" height=\"171\" src=\"https:\/\/www.qly.docs.pay.sibs.com\/wp-content\/uploads\/2024\/03\/image-1.png\" alt=\"\" class=\"wp-image-12166\" srcset=\"https:\/\/www.qly.docs.pay.sibs.com\/wp-content\/uploads\/2024\/03\/image-1.png 1004w, https:\/\/www.qly.docs.pay.sibs.com\/wp-content\/uploads\/2024\/03\/image-1-300x51.png 300w, https:\/\/www.qly.docs.pay.sibs.com\/wp-content\/uploads\/2024\/03\/image-1-768x131.png 768w\" sizes=\"auto, (max-width: 1004px) 100vw, 1004px\" \/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"krok2-ios\">Krok 2: Tworzenie modelu danych do przeniesienia do SoftPOS<\/h5>\n\n\n\n<p>Wywo\u0142anie SoftPOS przez aplikacj\u0119 iOS odbywa si\u0119 za po\u015brednictwem modelu danych (w formacie json w base64) w oparciu o nast\u0119puj\u0105ce parametry:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"reference\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201cABCDEFG\u201d<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"amount\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201c3284\u201d<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"lockAmountValue\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">1<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"performAutomaticClose\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">1<\/mark>,\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"urlScheme\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201ccallinapp:\/\/\"<\/mark>\n}<\/code><\/pre>\n\n\n\n<p>Poni\u017cej przedstawiamy tabel\u0119 ze szczeg\u00f3\u0142owym opisem modelu daty:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Pole<\/th><th>Opis<\/th><\/tr><\/thead><tbody><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">reference<\/mark><\/td><td>Informuje o referencji zwi\u0105zanej z operacj\u0105. Jest to typ String o maksymalnej d\u0142ugo\u015bci 25 znak\u00f3w. Mo\u017ce zawiera\u0107 warto\u015bci alfanumeryczne.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">amount<\/mark><\/td><td>Zawiera kwot\u0119 operacji i jest reprezentowana w centach. Przyk\u0142ad: w przypadku zakupu za 10 EUR warto\u015b\u0107 \u201eamount\u201d musi by\u0107 wype\u0142niona warto\u015bci\u0105 \u201e1000\u201d. To pole jest typu String.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">lockAmountValue<\/mark><\/td><td>Pole <em>Boolean\u00a0<\/em>. Je\u015bli wype\u0142niona zostanie warto\u015b\u0107 \u201etrue\u201d, nie b\u0119dzie mo\u017cna edytowa\u0107 kwoty wys\u0142anej do systemu SoftPOS i w zwi\u0105zku z tym system SoftPOS uruchomi si\u0119 bezpo\u015brednio na ekranie wyboru metody p\u0142atno\u015bci.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">performAutomaticClose:<\/mark><\/td><td>Pole <em>Boolean\u00a0<\/em>. Je\u015bli pole ma warto\u015b\u0107 \u201e<em>true<\/em>\u201d, aplikacja SoftPOS otworzy si\u0119 na ekranie zamkni\u0119cia i automatycznie rozpocznie operacj\u0119 zamkni\u0119cia bez interwencji u\u017cytkownika. Je\u015bli zar\u00f3wno to pole, jak i pole <em>lockAmountValue<\/em> maj\u0105 warto\u015b\u0107 \u201e<em>true<\/em>\u201d, w\u00f3wczas ta operacja b\u0119dzie mia\u0142a pierwsze\u0144stwo przed operacj\u0105 zakupu, kt\u00f3ra jest ignorowana.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">urlScheme<\/mark><\/td><td>To pole wskazuje, kt\u00f3ry schemat (aplikacji klienckiej) aplikacja SoftPOS powinna wywo\u0142a\u0107, aby wys\u0142a\u0107 wynik wykonanej operacji.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Poni\u017csza pr\u00f3bka kodu reprezentuje po\u0142\u0105czenie \u201eaplikacja do aplikacji\u201d wykonane do SoftPOS przez aplikacj\u0119 iOS:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">void<\/mark>) openAppWithScheme:(NSString*)scheme {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSNumberFormatter *numberFormatter<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;&#91;NSNumberFormatter alloc] init]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">numberFormatter.numberStyle<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">NSNumberFormatterDecimalStyle<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">int amount<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;numberFormatter numberFromString:@\u201c32,84\u201d].floatValue * 100<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSDictionary *paramsDic<\/mark> = @{@\"reference\" : @\"ABCDEFG\",\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@\"amount\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSString stringWithFormat:@\"%i\", amount]<\/mark>,\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@\"lockAmountValue\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSNumber numberWithBool:YES]<\/mark>,\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@\"performAutomaticClose\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSNumber numberWithBool:YES]<\/mark>,\n        <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">@\"urlScheme\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">@\"callinapp:\/\/\"<\/mark>\n    };\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSData *jsonData<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSJSONSerialization dataWithJSONObject:paramsDic options:0\u000berror:nil]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSString *jsonParms<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;jsonData base64EncodedStringWithOptions:0]<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSString *url<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSString stringWithFormat:@\"%@:\/\/%@\", scheme, jsonParms]<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;&#91;UIApplication sharedApplication] openURL:&#91;NSURL URLWithString:url] <\/mark>\noptions:@{ UIApplicationOpenURLOptionUniversalLinksOnly: @NO} completionHandler:^(BOOL success) {\n        NSLog(@\"URL: %@\", url);\n        NSLog(@\"Success: %@\", success ? @\"YES\": @\"NO\");\n        }\n    ];\n}<\/code><\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"krok3-ios\">Krok 3: Uzyskaj odpowied\u017a od SoftPOS<\/h5>\n\n\n\n<p>Aplikacja SoftPOS po otrzymaniu wywo\u0142ania \u201eapp to app\u201d przetwarza \u017c\u0105dan\u0105 operacj\u0119, zwracaj\u0105c odpowied\u017a do aplikacji klienckiej z wynikiem (sukces lub b\u0142\u0105d) operacji. Ta odpowied\u017a jest zwracana do aplikacji klienckiej przy u\u017cyciu nast\u0119puj\u0105cego modelu danych zdefiniowanego w JSON w base 64<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    @<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"callInError\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201c\u201d<\/mark>,\n    @<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"callInStatus\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201cAPPR\u201d<\/mark>,\n    @<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"callInAmount\"<\/mark> : <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201c3284\u201d<\/mark>,\n    @<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"callInDate\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201c2020-05-04T11:42:38.001+01:00\u201d<\/mark>,\n    @<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">\"callInRef\"<\/mark>: <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">\u201cABCDEFG\u201d<\/mark>}\u201d\n}<\/code><\/pre>\n\n\n\n<p>Poni\u017cej znajduje si\u0119 kr\u00f3tki opis znaczenia poszczeg\u00f3lnych p\u00f3l:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Pole<\/th><th>Opis<\/th><\/tr><\/thead><tbody><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CallInError<\/mark><\/td><td>Warto\u015b\u0107 odpowiada kodowi b\u0142\u0119du (je\u015bli wyst\u0119puje) uzyskanemu przez SoftPOS podczas wykonywania operacji. Warto\u015b\u0107 jest typu <em>String<\/em>.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CallInStatus<\/mark><\/td><td>Informuje o statusie operacji wykonywanej przez SoftPOS, kt\u00f3r\u0105 mo\u017ce by\u0107:<br>\u2013 DeviceError<br>\u2013 Success<br>\u2013 Declined<br>\u2013 CommError<br>\u2013 Usercancelled<br>\u2013 UserTimeOut<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CallInAmount<\/mark><\/td><td>Odpowiada warto\u015bci u\u017cytej w operacji wykonanej w aplikacji SoftPOS i mo\u017ce by\u0107 u\u017cyta do por\u00f3wnania z warto\u015bci\u0105 wys\u0142an\u0105 w wywo\u0142aniu do aplikacji SoftPOS. Warto\u015b\u0107 jest typu <em>String<\/em>.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CallInDate<\/mark><\/td><td>Warto\u015b\u0107 informuje o dacie wykonania operacji przez SoftPOS. Warto\u015b\u0107 jest typu <em>String<\/em>.<\/td><\/tr><tr><td><mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">CallInRef<\/mark><\/td><td>Odpowiada referencji u\u017cytej w operacji wykonanej w aplikacji SoftPOS i mo\u017ce by\u0107 u\u017cyta do por\u00f3wnania z warto\u015bci\u0105 wys\u0142an\u0105 w wywo\u0142aniu do aplikacji SoftPOS. Warto\u015b\u0107 jest typu String.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Poni\u017cej przedstawiamy przyk\u0142ad przetwarzania odpowiedzi SoftPOS w pliku\u00a0<mark style=\"background-color:#e9e9f5\" class=\"has-inline-color\">AppDelegate<\/mark>\u00a0 iOS project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">(BOOL)application<\/mark>:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">(UIApplication *)app openURL<\/mark>:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">(NSURL *)url options<\/mark>:    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">(NSDictionary&lt;UIApplicationOpenURLOptionsKey,id&gt; *)options<\/mark> {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;self parsePaymentResponse:url]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">return YES<\/mark>;\n}\n\n-<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">(void)parsePaymentResponse<\/mark>:<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-amber-color\">(NSURL*_Nullable)url<\/mark> {\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">if(!url)\n    return<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSString *base64Encoded<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;url.absoluteString stringByReplacingOccurrencesOfString:@\"callinapp:\/\/\" withString:@\"\"]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">if(!base64Encoded)\n    return<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSData *nsdataFromBase64String<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;&#91;NSData alloc] initWithBase64EncodedString:base64Encoded options:0]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">if(!nsdataFromBase64String)\n    return<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSError *error<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSDictionary *dicParams<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSJSONSerialization JSONObjectWithData:nsdataFromBase64String options:0 error:&amp;error]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">if(!dicParams || error)\n    return<\/mark>;\n\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSLog(@\"%@\", dicParams)<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">NSString *result<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;NSString stringWithFormat:@\"%@\", dicParams]<\/mark>;\n    <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-pale-pink-color\">UIAlertController *alert<\/mark> = <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-green-cyan-color\">&#91;UIAlertController alertControllerWithTitle:@\"Resposta\" message:result preferredStyle:UIAlertControllerStyleAlert];\n&#91;alert addAction:&#91;UIAlertAction actionWithTitle:@\"OK\" style:UIAlertActionStyleDefault handler:nil]];\n&#91;self.window.rootViewController presentViewController:alert animated:YES completion:nil]<\/mark>;\n\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Nasza integracja mi\u0119dzy aplikacjami umo\u017cliwia p\u0142ynne po\u0142\u0105czenie mi\u0119dzy aplikacj\u0105 sprzedawcy a nasz\u0105 aplikacj\u0105 LightPOS, zapewniaj\u0105c klientom szybki i bezpieczny spos\u00f3b dokonywania p\u0142atno\u015bci. Sprawd\u017a szczeg\u00f3\u0142y poni\u017cej, aby rozpocz\u0105\u0107 integracj\u0119 z aplikacjami na Androida i iOS. Android Sprawd\u017a kroki wymagane do wykonania po\u0142\u0105czenia \u201eapp-to-app\u201d w aplikacjach na Androida. Proces rozwoju obejmuje trzy kroki: Krok 1: Utw\u00f3rz zamiar [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":22748,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_eb_attr":"","footnotes":""},"class_list":["post-24107","page","type-page","status-publish","hentry","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"acf":[],"builder_content":"","_links":{"self":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/24107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/comments?post=24107"}],"version-history":[{"count":5,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/24107\/revisions"}],"predecessor-version":[{"id":24149,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/24107\/revisions\/24149"}],"up":[{"embeddable":true,"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/pages\/22748"}],"wp:attachment":[{"href":"https:\/\/www.qly.docs.pay.sibs.com\/pl\/wp-json\/wp\/v2\/media?parent=24107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}