--- tags: Mercury, DirectLink --- # Esempi chiamate APIs DirectLink :::warning in tutti gli esempi occorre usare un PHOENIX_SESSION_ID valido ::: ## Send DL via Email ### esempio con dati incompleti ```shell curl -k -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/directlink/init' \ -H 'Cookie: PHOENIX_SESSION_ID=NbIfj8gY9XIjjmJvjAMf1Pvv' \ --data-urlencode 'amt=88' \ --data-urlencode 'cardholderemail=' \ --data-urlencode 'currencycode=978' \ --data-urlencode 'customField=' \ --data-urlencode 'description=' \ --data-urlencode 'emailAdditionalText=' \ --data-urlencode 'emailSubject=' \ --data-urlencode 'id=22220000' \ --data-urlencode 'mailLanguage=ENG' \ --data-urlencode 'member=' \ --data-urlencode 'trackId=' ``` response ```xml <response type="error"> <error_text>Amount not valid</error_text> </response> ``` oppure ```xml <response type="error"> <error_text>Track Id required</error_text> </response> ``` ### esempio con dati completi ```shell curl -k -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/directlink/init' \ -H 'Cookie: PHOENIX_SESSION_ID=NbIfj8gY9XIjjmJvjAMf1Pvv' \ --data-urlencode 'amt=88' \ --data-urlencode 'cardholderemail=martino.vallara@xpeppers.com' \ --data-urlencode 'currencycode=978' \ --data-urlencode 'customField=' \ --data-urlencode 'description=' \ --data-urlencode 'emailAdditionalText=' \ --data-urlencode 'emailSubject=' \ --data-urlencode 'id=22220000' \ --data-urlencode 'mailLanguage=ENG' \ --data-urlencode 'member=' \ --data-urlencode 'trackId=sdfsdf' ``` response ```xml <response> <token>PUymXoHqUJu-FQXqqna9x0vd</token> <msg>DirectLink message sent</msg> </response> ``` in caso di errore di invio ```xml <response type="error"> <error_text>Message sending error</error_text> </response> ``` ## DL via SMS ### dati non validi ```shell curl -k -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/directlink/sms' \ -H 'Cookie: PHOENIX_SESSION_ID=NbIfj8gY9XIjjmJvjAMf1Pvv' \ --data-urlencode 'amt=' \ --data-urlencode 'cardholderPhoneNumber=+39' \ --data-urlencode 'currencycode=978' \ --data-urlencode 'id=22220000' \ --data-urlencode 'mailLanguage=ENG' \ --data-urlencode 'trackId=20200902160956056' ``` response ```xml <response type="error"> <error_text>Amount not valid</error_text> </response> ``` ### esempio con dati validi ```shell curl -k -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/directlink/sms' \ -H 'Cookie: PHOENIX_SESSION_ID=NbIfj8gY9XIjjmJvjAMf1Pvv' \ --data-urlencode 'amt=123,22' \ --data-urlencode 'cardholderPhoneNumber=+393484521453' \ --data-urlencode 'currencycode=978' \ --data-urlencode 'id=22220000' \ --data-urlencode 'mailLanguage=ENG' \ --data-urlencode 'trackId=20200902160956056' ``` response ```xml <response> <token>PUymXoHqUJu-FQXqqna9x0vd</token> <msg>DirectLink message sent</msg> </response> ``` in caso di errore di invio ```xml <response type="error"> <error_text>Message sending error</error_text> </response> ``` ## resend DL ```shell curl -k -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/directlink/resubmit_action' \ -H 'Cookie: PHOENIX_SESSION_ID=NbIfj8gY9XIjjmJvjAMf1Pvv' \ --data-urlencode 'token=8wTU53lzsa4pb0yz08XyQpVr' ``` ### Response (success) ```xml <response> <token>RyWHlrLRLI-tf5GDIMMF2p0s</token> <msg>DirectLink message sent</msg> </response> ``` ### Response (error) ```xml <response type="error"> <error_text>error</error_text> </response> ``` ### Response (error sending) ```xml <response type="error"> <error_text>Message sending error</error_text> </response> ``` ### Response (application error) errore applicativo (es. token inesistente --> status: 500) ## Direct Link search ```shell curl -k -L -X GET 'https://local.monetaonline.it/monetaweb/backoffice/directlink/search?status=*&trackId=&terminal=&startDate=02%2F09%2F2020+00%3A00&endDate=&minAmount=&maxAmount=&description=&member=&cardholderemail=&customField=&start=0' \ -H 'Accept: application/json' \ -H 'Cookie: PHOENIX_SESSION_ID=u_rnnNg1nFqTHmJAxkTgeRFV' \ --data-urlencode 'token=44444' ``` :::info parametro `start` indica che verra restituito il set di risultati a partire dal `start`+1 esimo elemento. ::: ### Response ```jsonld { "size": 20, "totalSize": 10, "start": 0, "result": [ { "Amount": 123.0000, "AmountInEur": 123.0000, "BuyerContact": "+393484571154", "BuyerPhoneNumber": "+393484571154", "CurrencyCode": "978", "DirectLinkId": 11, "InitRequestReceivedTime": "Sep 2, 2020 5:18:46 PM", "MailLanguage": "ENG", "MerchantTrackID": "20200722160616839", "MessageType": "SMS", "Rate": 1.000000000, "ResponseUrl": "/directlink/response", "RowNum": 1, "TerminalID": "22220000", "Token": "jqIHkg7y61d90hjVnlcUBeAx" }, { "Amount": 123.0000, "AmountInEur": 123.0000, "BuyerContact": "+393484571154", "BuyerPhoneNumber": "+393484571154", "CurrencyCode": "978", "DirectLinkId": 10, "InitRequestReceivedTime": "Sep 2, 2020 5:16:53 PM", "MailLanguage": "ENG", "MerchantTrackID": "20200722160616839", "MessageType": "SMS", "Rate": 1.000000000, "ResponseUrl": "/directlink/response", "ResubmittedTime": "Sep 2, 2020 5:18:46 PM", "RowNum": 2, "TerminalID": "22220000", "Token": "_dbn_2gZQ2WHvaYoUQmVPJ9J" }, { "//comment": "... continued" } ] } ``` richiesta con record di inizio fuori range *es. si richiede i successive 20 righe a partire dalla 3+1 su un set di risultati che prevendono al massimo una riga, ritorna una lista vuota)* ```jsonld { "size": 20, "totalSize": 1, "start": 3, "result": [] } ``` in caso di parametri non validi ```jsonld= { "errors": [ "Start Date: Invalid Date" ] } ``` ```jsonld= { "errors": [ "Min Amount: Not a number" ] } ``` ## Direct Link upload massivo ```shell= curl -L -X POST 'https://local.monetaonline.it/monetaweb/backoffice/directlink/upload' \ -H 'Cookie: PHOENIX_SESSION_ID=u_rnnNg1nFqTHmJAxkTgeRFV' \ -F 'csv_resource=@path/to/local/filename.csv' ``` file di esempio: https://dev.monetaonline.it/monetaweb/static/Resources/direct-link-massive-loading-english-sample.csv ### Response (warning, error) ```xml <response type="warning"> <msg>Successfully uploaded nr. 6 orders from file filename.csv: messages not sent for orders [1, 2, 3, 4, 5, 6]</msg> </response> ``` ```xml <response type="error"> <error_text>No order uploaded because of an error detected in order nr. 1: Invalid cellphone number format</error_text> </response> ``` ### Response (success) ```xml <response> <msg>Successfully uploaded and sent nr. 1 orders from file direct-link-massive-loading-english-sample (5).csv</msg> </response> ``` ## ricerca temrminali ```shell= curl -L -X POST 'https://dev.monetaonline.it/monetaweb/backoffice/merchants/terminals/search' \ -H 'Content-Type: application/json' \ -H 'Cookie: PHOENIX_SESSION_ID=WeXBkN78i6Uw4XduLxRPni43 \ --data-raw '{ "start": 10, "merchantIds": [ "001570878", "001111112", "001723477", "001111111", "003333333", "007914187" ] }' ``` response: ```shell { "size": 30, "totalSize": 28, "start": 27, "result": [ { "MerchantId": "003333333", "MulticurrencyEnabled": "N", "RowNum": 28, "TerminalId": "97378214" } ] } ``` ### template email ```code <html> <head> <#include "mail-style.ftl"> <style> body { font-family: Arial, sans-serif; } </style> </head> <body> <p>Dettagli dell'ordine:<p> <table> <tr><td>Nome Commerciante:</td><td>${MERCHANT_NAME}</td> <tr><td>Sito Web Commerciante:</td><td>${MERCHANT_BASE_URL}</td> <tr><td>Riferimento Operazione:</td><td>${ORDER_ID}</td> <tr><td>Descrizione:</td><td>${DESCRIPTION}</td> <tr><td>Importo:</td><td>${AMOUNT}</td> </table> <hr> <p align="center">Per accedere alla procedura di pagamento cliccare <a href="${DIRECT_LINK_CONFIRM_URL}&languageId=ITA">QUI</a> o utilizzare il seguente link:</p> </br> <p align="center"><a href="${DIRECT_LINK_CONFIRM_URL}&languageId=ITA">${DIRECT_LINK_CONFIRM_URL}</a></p> </br> <p align="center">Questo link potrà essere utilizzato entro ${TOKEN_DURATION} giorni</p> ${CUSTOM_FOOTER} </body> </html> ///---- @Override public String body() { TemplateView bodyTemplate = template.getBody(); bodyTemplate.put("CUSTOM_CSS", ""); bodyTemplate.put("CUSTOM_FOOTER", defaultIfEmpty(directLinkInit.getEmailAdditionalText(), "")); bodyTemplate.put("MERCHANT_NAME", defaultIfEmpty(terminal.getMerchant().getName(), "")); bodyTemplate.put("MERCHANT_BASE_URL", defaultIfEmpty(terminal.getMerchantBaseUrl(), "")); bodyTemplate.put("ORDER_ID", defaultIfEmpty(directLinkInit.getMerchantOrderId(), "")); bodyTemplate.put("DESCRIPTION", defaultIfEmpty(directLinkInit.getDescription(), "")); bodyTemplate.put("AMOUNT", defaultIfEmpty(directLinkInit.getAmount().forDisplay(AmountFormat.WITH_SPACE), "")); bodyTemplate.put("DIRECT_LINK_CONFIRM_URL", directLinkConfirmURLFor(directLinkInit.getToken())); bodyTemplate.put("TOKEN_DURATION", tokenValidityInDaysFor(terminal, environment)); return bodyTemplate.toHtml(); } ``` ---- - [ ] todo: configurare la paginazione a 30 righe se possibile. verificare: come è impostato il valore attualmente. --- :::info il parametro :`search-directlink-order` non è utilizzato ::: ## Significato dei campi nella risposta alla ricerca dei DirectLink |field|example|descri| |---|---|---| |Amount| 123.0000 |importo nella valuta <currencyCode>| |AmountInEur|123.0000| importo in euro| |BuyerContact| "+393484571154"| contatto acquirente| |BuyerPhoneNumber| "+393484571154"| numero cellulare acquirente| |"CurrencyCode"| "978"| codice valute ISO 4217| |"DirectLinkId"| 11| identificativo Direct Link| |"InitRequestReceivedTime"|"Sep 2, 2020 5:18:46 PM"|istante di invio del Direct Link| |"MailLanguage"| "ENG"| lingua del messaggio| |"MerchantTrackID"|"20200722160616839"|identificativo del Direct Link per il merchant| |"MessageType"|"SMS"|canale di invio del Direct link| |"Rate"| 1.000000000| tasso di conversione in Euro| |"ResponseUrl"| "/directlink/response"| "usato internamente"| |"RowNum"| 1| identificatore di riga nel set di righe restituite| |"TerminalID"| "22220000"|identificatore del terminale a cui è associato il DirectLink| |"Token"| "jqIHkg7y61d90hjVnlcUBeAx"|token che identifica il DirectLink e nè stabilisce al validità| --- ## Call del 2 ottobre 2020: risoluzione problemi ### errore nello swagger nella operation: `https://local.monetaonline.it/monetaweb/backoffice/directlink/upload` il parametro del nome file è errato: correggere file con csv_resource ### Predisporre dati di carico Si richiede di poter sollecitare il sistema con casi limite di parecchi Merchant con molti terminali. Fabio si è proposto per verificare la cardinalità di uno scenario di produzione. ### Errori sulla generate token e consume token * External SSO API call failed feign.RetryableException: Unexpected end of file from server executing POST https://dev.monetaonline.it/monetaweb/authentication/generate-token * ERROR SocketException: Unexpected end of file from server (112ms) :::warning Si conferma l'urgenza della correzzione e aggiornamento dello swagger ::: :::info Aggiornamento ogni prossimo giovedì (14) :::