csob / paymentgateway

English documentation of the ČSOB Payment Gateway that offers an API for credit card payments, Apple Pay, Google Pay, mallpay and ČSOB Payment Button.
https://platbakartou.csob.cz/platebni-brana
GNU General Public License v3.0
121 stars 68 forks source link

ApplePay/start payload #524

Closed kopeclu2 closed 3 years ago

kopeclu2 commented 4 years ago

Dobrý den, píši ohledně implementace apple/start. Kde Apple vrací z FE JS strukturu s paymentData. Data kóduje pomoci Base64 java.util encoderu viz. výpis níže. Response z brány: payId=229cc0c5cc0e7FI, resultCode=900, resultMessage=invalid payload (verification/decryption), paymentStatus=6,

Kodovani do BASE64: REQUEST.payload(Base64.getEncoder().encodeToString(data.getPaymentData().toString().getBytes())) Kde data je klasický JAVA objekt naplněný response z APPLE JS. Tudíž převedu na String a ten koduji. Nemyslím si že je to tak správně.

Děkuji za jakoukoliv pomoc

kopeclu2 commented 4 years ago

EDIT nevím proč ale najednou jsem dostal tuto odpověď. payId=229cc0c5cc0e7FI, resultCode=150, resultMessage=Payment not in valid state, paymentStatus=6 a netuším proč nejde provést :) Děkuji za pomoc

MERCHANT ID = M1MIPS7886

janbrasna commented 4 years ago

@kopeclu2 Zkuste mrknout na postup viz #509 kde jsou videt i utrzky obsahu. (A overte ze pak ten konstrukt i spravne podepisujete.)

Jinak ta druha, nasledna chyba zni, jako ze uplynula zivotnost te samotne transakce, tj. uz nad ni dalsi operace nepujdou.

dkomarek2 commented 4 years ago

Dobrý den, níže přikládáám vyjádření od kolegy vývojáře:

obchodnik posila spatna data:

pokud vezmu payload z applepay/start a dekoduji base64, tak vysledek neni JSON:

PaymentAppleAuthorizedData.PaymentData(version=EC_v1, data=8g3MY/44H5xKh3IDXoyVw2Jy23SsFSP+1k0rahRfvw9v2wRaukbd8jDJzGrK12Y/Oc4ZBwwVLRqxkHgQ5v3WGAMT3tAsJs6Ix10oSqz+Fhv0dQwVwJpzzcOJX6bQz1ijbiiu68XRg+Y78HF1Ulba5oM4jTAkV9IoJeUQBy/ZilTCeyOHqZiz78V7ruzJwbd9sfOoJf6sUZhsa0PAJCbCPO04KVnTu82LeAozPEQ84e+P28LDGbqk4aLvdJWHIRs5zb/7XrwyjO41uYAkPKdqhjLpKCvDIyQkIlooO234hSICYZQ+PlK9ie71BcMY4M9tXDJDS8Hm67ONBp002ld/bMFCiu4ptggksccuE2IFxfzFAoYNcekwsxJgIGTZa6dy9yBFI7QrmCaQ1pBEBHYVVpDBIB1/AZX5v2ez8YmW8g==, signature=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, header=PaymentAppleAuthorizedData.PaymentData.Header(ephemeralPublicKey=MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyoAyJHsNudr/p8JiHSOGTyFvKioyl6ZZs8Q1IDs7XMcyA7id25/lJii6EGnGOCP32qKnSpYSwAmxwFV4An0zTA==, publicKeyHash=MYqBMQATVIAe1725qDMymaiViQ740Ul29PKFWF8w5co=, transactionId=ddfb9d2863873851d58db5d141ff7b4a537491092614f6f4637a545326f8ccc8))

melo by to vypadat nejak takto ...

{"version":"EC_v1","data":"zDwclQ1....","signature":"MIAGCSqGSI...","header": {"ephemeralPublicKey":"MFkwEwY...","publicKeyHash":"bHAaZK2k0SM...","transactionId":"5324b499fab7..."}}

Snad vám to pomůže při řešení problému.

S pozdravem,

Daniel Komárek IT application specialist

kopeclu2 commented 4 years ago

Dobrý den děkuji za odpověď. Bohužel se stále potýkám s problémy. Tuto chybu jsem opravil. Pro vytváření JSON používám Java.Jackson.mapper a ten mi dává tento výsledný json: {"version":"EC_v1","data":"k+6..=","signature":"MIA...", "header":{"ephemeralPublicKey":"MFk...","publicKeyHash":"MY...","transactionId":"20a..."}} Stejný podle Vašeho vzoru (viz. Váš komentář) Dále payload převadím do Base64, podle: Base64.getEncoder().encodeToString(payloadJson.getBytes()) Což mi úspešně vrátí Base64, který přiložím do request a celý request podepisuji a odesílám. Response: 150

Snímek obrazovky 2020-09-24 v 9 36 59

Děkuji za jakékoliv rady co by ještě mohlo být špatně S pozdravem Kopecký

kopeclu2 commented 4 years ago

Nyní mě platba prošla: 27aba477f1b91FI. Možná jsem posílal nekonzistentní údaje o platbě jako například cenu. Nicméně mohu se zeptat zda stav 7 = Čekání na zúčtování. Mohu požadovat za kompletně ukončenou ? Například poku budu mít platbu ve stavu 7 mohu zákazníkovi předat produkt, a spoléhat na to že budou peníze převedeny ?

dkomarek2 commented 4 years ago

Dobrý den,

Pokud je transakce ve stavu 7 (Čekání na zúčtování), pak se do stavu 8 (Platba zaúčtována) dostane automaticky po půlnoci daného dne. Jediné co jiného se s ní může stát je její odvolání (status 5) což by muselo vzniknout na popud obchodníka.

S pozdravem,

Daniel Komárek IT application specialist