csob/platebnibrana

Payload v applepay/init

Closed this issue · 4 comments

Dobrý den,
při vytváření požadavku na metodu applepay/init je v requestu atribut nazvaný payload. Tento atribut by měl obsahovat data přijatá od Applu v nezměněné podobě, pouze zakódována v BASE64.

Když ale přijmu data od Applu, zokóduji je a následně přidám do payloadu, dostávám chybu

{"payId":"ea4fbe5c75e3@HI","resultCode":110,"resultMessage":"Invalid payload","paymentStatus":6,"dttm":"20220922192739","signature":"cTtLpWJZLBwPamRLSe0ti8u+O1q1GcdAJd7DAtKXPsHm++VW3tp6wq1QosR/fHoqd22U10ldWYkOyjGOO4aDfCNbIHTs5NAA2kaumOr/l9JR8ALpxK6CkU7uO1ezmY4l9fhrpu2PETZeuLuKLKiuNQkKlVZWQGzlTMTDVqFS4YuJCxNzvaJsAEsZPtDiTgLjFLO7fAxzi2AGIhaml0lrOuZjh5SoD0guetOVSu+Cbu/wgVQ9XOF/rkodr/YDR/pQ6lh70R5uMA5B2tWdYMG4yPygaWNfhVDrZUk5/JtOIltG+MGePxzrirtRciEFYl7Bej7Wsp5swjy2Bsx9xcP4rQ=="}

Můj celý request payload vypadá následovně:

{"merchantId":"M1MIPS4481","orderNo":"329042","dttm":"20220922192738","clientIp":"94.113.70.69","totalAmount":65000,"currency":"CZK","closePayment":true,"payload":"eyJ2ZXJzaW9uIjoiRUNfdjEiLCJkYXRhIjoiTmZlS1N5TytxNVZuWlNiYXZsWGJnajE0NHNjWitnUmtGeVV6NFF4cVFnNUxNcnUwallEZHMrOVFJWW42a1ZKSTk5SURNSkhQRTBjSFR2UmVtcmtpT1JRbTVCcjR1VWNKUzNrMmdHb3dRR0R6QitNbm02RlVjSWNtTGxzVXg4S3VFVFN4VVBQTVh2ZGwva2RSQmJnaTlSU29WY3d3d1hHZmpuMG9hd082Y0VTLzFrclBtTmRUWnJUQWpSeUxiREFkRi9JTWg3UmdIVk9uNGtWb1kreElua1gzOFJLSThvTHRmNUl2TlJ2Z3lwTXg2dnNIUnRxVE5sdWNnNFZ3amhVMGVVeWwxNStaNHg3N2hXV09ubW0zc2VDZE9HMTBqbGcwN1Y2OFFPa0h5QmhJdnowV3MzRHNFK2dDWEpVTm1rUFBOZVN1MWRjcHgxRCtpcXVyRG4zVGNxaWxFYzJLZkRBSGJmbStYRno2cVVHdmhNOXMxa1ZlVG9SNUk5QktldHcxMGNoSGoveVBXczdRR2Y1NEZkUT0iLCJzaWduYXR1cmUiOiJNSUFHQ1NxR1NJYjNEUUVIQXFDQU1JQUNBUUV4RHpBTkJnbGdoa2dCWlFNRUFnRUZBRENBQmdrcWhraUc5dzBCQndFQUFLQ0FNSUlENHpDQ0E0aWdBd0lCQWdJSVREQkJTVkdkVkRZd0NnWUlLb1pJemowRUF3SXdlakV1TUN3R0ExVUVBd3dsUVhCd2JHVWdRWEJ3YkdsallYUnBiMjRnU1c1MFpXZHlZWFJwYjI0Z1EwRWdMU0JITXpFbU1DUUdBMVVFQ3d3ZFFYQndiR1VnUTJWeWRHbG1hV05oZEdsdmJpQkJkWFJvYjNKcGRIa3hFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1CNFhEVEU1TURVeE9EQXhNekkxTjFvWERUSTBNRFV4TmpBeE16STFOMW93WHpFbE1DTUdBMVVFQXd3Y1pXTmpMWE50Y0MxaWNtOXJaWEl0YzJsbmJsOVZRelF0VUZKUFJERVVNQklHQTFVRUN3d0xhVTlUSUZONWMzUmxiWE14RXpBUkJnTlZCQW9NQ2tGd2NHeGxJRWx1WXk0eEN6QUpCZ05WQkFZVEFsVlRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUV3aFYzN2V2V3g3SWhqMmpkY0pDaElZM0hzTDF2TENnOWhHQ1YyVXIwcFVFYmcwSU8yQkh6UUg2RE14OGNWTVAzNnpJZzFyclYxTy8wa29tSlBud1BFNk9DQWhFd2dnSU5NQXdHQTFVZEV3RUIvd1FDTUFBd0h3WURWUjBqQkJnd0ZvQVVJL0pKeEUrVDVPOG41c1QyS0d3L29ydjlMa3N3UlFZSUt3WUJCUVVIQVFFRU9UQTNNRFVHQ0NzR0FRVUZCekFCaGlsb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBMExXRndjR3hsWVdsallUTXdNakNDQVIwR0ExVWRJQVNDQVJRd2dnRVFNSUlCREFZSktvWklodmRqWkFVQk1JSCtNSUhEQmdnckJnRUZCUWNDQWpDQnRneUJzMUpsYkdsaGJtTmxJRzl1SUhSb2FYTWdZMlZ5ZEdsbWFXTmhkR1VnWW5rZ1lXNTVJSEJoY25SNUlHRnpjM1Z0WlhNZ1lXTmpaWEIwWVc1alpTQnZaaUIwYUdVZ2RHaGxiaUJoY0hCc2FXTmhZbXhsSUhOMFlXNWtZWEprSUhSbGNtMXpJR0Z1WkNCamIyNWthWFJwYjI1eklHOW1JSFZ6WlN3Z1kyVnlkR2xtYVdOaGRHVWdjRzlzYVdONUlHRnVaQ0JqWlhKMGFXWnBZMkYwYVc5dUlIQnlZV04wYVdObElITjBZWFJsYldWdWRITXVNRFlHQ0NzR0FRVUZCd0lCRmlwb2RIUndPaTh2ZDNkM0xtRndjR3hsTG1OdmJTOWpaWEowYVdacFkyRjBaV0YxZEdodmNtbDBlUzh3TkFZRFZSMGZCQzB3S3pBcG9DZWdKWVlqYUhSMGNEb3ZMMk55YkM1aGNIQnNaUzVqYjIwdllYQndiR1ZoYVdOaE15NWpjbXd3SFFZRFZSME9CQllFRkpSWDIyL1ZkSUdHaVlsMkwzNVhoUWZubTFna01BNEdBMVVkRHdFQi93UUVBd0lIZ0RBUEJna3Foa2lHOTJOa0JoMEVBZ1VBTUFvR0NDcUdTTTQ5QkFNQ0Ewa0FNRVlDSVFDK0NWY2Y1eDRlYzF0VjVhK3N0TWN2NjBSZk1CaFNJc2NsRUFLMkhyMXZWUUloQU5HTE5RcGQxdDF1c1hSZ05iRWVzczZIejZQbXIyeTlnNENKRGNnczNhcGpNSUlDN2pDQ0FuV2dBd0lCQWdJSVNXMHZ2enFZMnBjd0NnWUlLb1pJemowRUF3SXdaekViTUJrR0ExVUVBd3dTUVhCd2JHVWdVbTl2ZENCRFFTQXRJRWN6TVNZd0pBWURWUVFMREIxQmNIQnNaU0JEWlhKMGFXWnBZMkYwYVc5dUlFRjFkR2h2Y21sMGVURVRNQkVHQTFVRUNnd0tRWEJ3YkdVZ1NXNWpMakVMTUFrR0ExVUVCaE1DVlZNd0hoY05NVFF3TlRBMk1qTTBOak13V2hjTk1qa3dOVEEyTWpNME5qTXdXakI2TVM0d0xBWURWUVFERENWQmNIQnNaU0JCY0hCc2FXTmhkR2x2YmlCSmJuUmxaM0poZEdsdmJpQkRRU0F0SUVjek1TWXdKQVlEVlFRTERCMUJjSEJzWlNCRFpYSjBhV1pwWTJGMGFXOXVJRUYxZEdodmNtbDBlVEVUTUJFR0ExVUVDZ3dLUVhCd2JHVWdTVzVqTGpFTE1Ba0dBMVVFQmhNQ1ZWTXdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBVHdGeEdFR2Rka2hkVWFYaVdCQjNib2dLTHYzbnV1VGVDTi9FdVQ0VE5XMVdaYk5hNGkwSmQyRFNKT2U3b0kvWFlYem9qTGRydG1jTDdJNkNtRS8xUkZvNEgzTUlIME1FWUdDQ3NHQVFVRkJ3RUJCRG93T0RBMkJnZ3JCZ0VGQlFjd0FZWXFhSFIwY0RvdkwyOWpjM0F1WVhCd2JHVXVZMjl0TDI5amMzQXdOQzFoY0hCc1pYSnZiM1JqWVdjek1CMEdBMVVkRGdRV0JCUWo4a25FVDVQazd5Zm14UFlvYkQraXUvMHVTekFQQmdOVkhSTUJBZjhFQlRBREFRSC9NQjhHQTFVZEl3UVlNQmFBRkx1dzNxRllNNGlhcElxWjNyNjk2Ni9heXlTck1EY0dBMVVkSHdRd01DNHdMS0Fxb0NpR0ptaDBkSEE2THk5amNtd3VZWEJ3YkdVdVkyOXRMMkZ3Y0d4bGNtOXZkR05oWnpNdVkzSnNNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVFCZ29xaGtpRzkyTmtCZ0lPQkFJRkFEQUtCZ2dxaGtqT1BRUURBZ05uQURCa0FqQTZ6M0tEVVJhWnNZYjdOY05XeW1LLzlCZnQyUTkxVGFLT3Z2R2NnVjVDdDRuNG1QZWJXWitZMVVFTmo1M3B3djRDTURJdDFVUWhzS01GZDJ4ZDh6ZzdrR2Y5RjN3c0lXMldUOFp5YVlJU2IxVDRlbjBibWN1YkNZa2hZUWFaRHdtU0hRQUFNWUlCaXpDQ0FZY0NBUUV3Z1lZd2VqRXVNQ3dHQTFVRUF3d2xRWEJ3YkdVZ1FYQndiR2xqWVhScGIyNGdTVzUwWldkeVlYUnBiMjRnUTBFZ0xTQkhNekVtTUNRR0ExVUVDd3dkUVhCd2JHVWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhreEV6QVJCZ05WQkFvTUNrRndjR3hsSUVsdVl5NHhDekFKQmdOVkJBWVRBbFZUQWdoTU1FRkpVWjFVTmpBTkJnbGdoa2dCWlFNRUFnRUZBS0NCbFRBWUJna3Foa2lHOXcwQkNRTXhDd1lKS29aSWh2Y05BUWNCTUJ3R0NTcUdTSWIzRFFFSkJURVBGdzB5TWpBNU1qSXhOekkzTXpoYU1Db0dDU3FHU0liM0RRRUpOREVkTUJzd0RRWUpZSVpJQVdVREJBSUJCUUNoQ2dZSUtvWkl6ajBFQXdJd0x3WUpLb1pJaHZjTkFRa0VNU0lFSURiaG9Bbk9xL2VaNkdOL2lPMnBleTE5aWg2UHV1aTBWKzFOZlp1WGMva3NNQW9HQ0NxR1NNNDlCQU1DQkVZd1JBSWdKYy91QXFPTTNCKzFXb3JrREgxb1VkQ0lWMmltMnZscnB4bytMOUp0Uk53Q0lCS09IRVZDWTNoT3RFL0Ixbld2ZythRExuY1cyUzV3ckV4SzFXVm9aWDZaQUFBQUFBQUEiLCJoZWFkZXIiOnsiZXBoZW1lcmFsUHVibGljS2V5IjoiTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFVkJnVnJoc2pGeHJxcE9GR1diQ3ZDNmhBS0xhdFRuMnZLUmFvU0JFZ2RXQ0d4dVlwK1dmbkhoNlQ4ckdicFVlVjI4VVc5bXIwbzBLNCtmNFVkUDNzckE9PSIsInB1YmxpY0tleUhhc2giOiJucDhtN1Q3RU83T2ttY29NWnMzRlpUMzVRVDVQZWpVL3FDSHRUbVhoY2s4PSIsInRyYW5zYWN0aW9uSWQiOiJkOTI1MzY0YjNjN2VmNjU5MTkyYWRiZGEzMDVhOTZiNDAxZjUyMTYwNTM5YmRiYzBlYjAyZDdjYjZhMmU0ODU4In19","returnUrl":"https:\/\/www.myreturn-page.com","returnMethod":"POST","sdkUsed":false,"signature":"eBxPE1JkbH...","extensions":[]}

Přičemž v payloadu je zakódovaný následující JSON, který nám předal Apple

{"version":"EC_v1","data":"NfeKSyO+q5VnZSbavlXbgj144scZ+gRkFyUz4QxqQg5LMru0jYDds+9QIYn6kVJI99IDMJHPE0cHTvRemrkiORQm5Br4uUcJS3k2gGowQGDzB+Mnm6FUcIcmLlsUx8KuETSxUPPMXvdl/kdRBbgi9RSoVcwwwXGfjn0oawO6cES/1krPmNdTZrTAjRyLbDAdF/IMh7RgHVOn4kVoY+xInkX38RKI8oLtf5IvNRvgypMx6vsHRtqTNlucg4VwjhU0eUyl15+Z4x77hWWOnmm3seCdOG10jlg07V68QOkHyBhIvz0Ws3DsE+gCXJUNmkPPNeSu1dcpx1D+iqurDn3TcqilEc2KfDAHbfm+XFz6qUGvhM9s1kVeToR5I9BKetw10chHj/yPWs7QGf54FdQ=","signature":"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","header":{"ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVBgVrhsjFxrqpOFGWbCvC6hAKLatTn2vKRaoSBEgdWCGxuYp+WfnHh6T8rGbpUeV28UW9mr0o0K4+f4UdP3srA==","publicKeyHash":"np8m7T7EO7OkmcoMZs3FZT35QT5PejU/qCHtTmXhck8=","transactionId":"d925364b3c7ef659192adbda305a96b401f52160539bdbc0eb02d7cb6a2e4858"}}

Možná něco přehlížím, ale netuším, co jiného předat v atributu payload, abych se dostal dál.

Díky za radu!

EDIT:
V api 1.8 data předaná v atributu payload fungovala správně. Payload byl předáván v requestu metody applepay/start. Nyní stejná data vkládáme do applepay/init.

Edit - chyba se skrývala ve ve starém Apple pay certifikátu, který byl aktivní na https://iposman.iplatebnibrana.csob.cz/ - stačilo překlinout na nově vygenerovaný.

Stejny problem jako #11 (comment)

@jgrmelova @dmarek Dala by se ta chybova hlaska nejak vylepsit, aby bylo poznat ze jde o stary certifikat? Nebo proste problem tkvi v tom ze nelze payload spravne rozebrat, a proto backend nic vic dalsiho nevi? (Stejne jako analogicky merchantID mismatch u GPay, ten take myslim vraci "Invalid payload" — v obou pripadech by bylo idealni v error messagi naznacit ze se nepodarilo rozebrat hodnoty z payloudu, ackoliv jako celek formalne validuje, tj. muze byt problem v certifikatech a idckach…)

@janbrasna u applepay to nelze (nepoznáme, který certifikát je ten poslední správný, zda máme na platební bráně totéž co je nastaveno u apple), u googlepay můžeme zpřesnit error message (invalid payload v případě selhání decrypt operace vs googlepayMerchantId mismatch)

@dmarek Jasne, chapu, proste jen nelze rozsifrovat payloud na smysluplny vysledek… a duvod muze byt lecjaky. Tak to je pak asi kandidat na FAQ, pridat tam zminku ze kdyz se nedari rozebrat transportovany payload, tak aby merchant zkontroloval ze ma spravne zanesene a aktivni pouzivane certifikaty?

Nebo mozna rozdelit chybovou hlasku pro neplatny payload (formalne neodpovidajici strukturu) vs. payload precteny, jen se nepodarilo rozsifrovat data uvnitr, tj. je mozne ze nesedi klice/idcka atp.?