---
# System prepended metadata

title: Esempi chiamate APIs DirectLink
tags: [' DirectLink', Mercury]

---

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



