---
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)
:::