---
tags: Mercury, Phoenix, AT su autorizzativo
---
# AT Phoenix che chiamano autorizzativo
Attività da fare per "isolare" `authorizationstub` dal vero autorizzativo (di test)
## TODO - authorizationstub/ AT Phoenix
- [x] verificare giro degli AT dei wallet in `AntiguaHostedRecurringPaymentAcceptanceTest`, per vedere come e quando interagiscono con `authorizationstub`
* scrivere i corrispondenti IT => `WebContrattiGatewayIntegrationTest`? `HostedRecurringPaymentAcceptanceTest`
* far passare gli AT con trackId AUTHORIZE_ME
* verificare come funziona test `HostedRecurringPaymentAcceptanceTest#hostedRecurringPaymentHappyPath`, che ancora funziona con gateway di test. Replicarlo com e, poi fare lo stesso per gli altri
* gli AT ANtigua utilizzano carta `CCFactory.getVisaVirtualForRecurring()`, grazie alla quale NON fanno redirect su ACS in `ThreeDS1HostedPaymentFlow.execute()` quando vanno a creare il wallet chiamando autorizzativo
* I test antigua lanciano la `HostedConfirmationPage.submit();`
- [x] test per chiamata a vero autorizzativo di test se non vengono passate request particolari
* creare oggetto apposito che fa la chiamata, creare uno spy per il test (non serve usare apposta mockito)
- [x] scrivere un test nel progetto unreliable, che verifichi l'intero processo dei pagamenti con wallet:
* chiama autorizzativo per creare un wallet (C => rpAction 03)
* verifica che il wallet sia stato creato
* fa un pagamento col wallet (W => rpAction 00)
* cancella il wallet
- [x] negli AT Phoenix mettere i valori `AUTHORIZE_ME`, `recurring_wallet` ecc. come costante da qualche parte, non lasciarli sparsi nei test
- [x] `WSContrattiServlet` dovrebbe poter chiamare il vero servizio di test, almeno nel caso di `FattibilitaContrattoRequest`, per continuare a far andare gli AT di Paypal
- [x] implementare UT su `FakeWSContratti`. Il comportamento attuale è quello che permette agli AT di passare, scrivere degli UT e rifattorizzare
- [x] implementare classe base per gli IT di autorizzativo, dove mettere i vari metodi di creazione di request ecc.
- [ ] di default le chiamate allo stub devono restituire una risposta OK. Se occorrono risposte errate, usare dei trackd/WalletId appositi
- [ ] prima identificare tutti i test che chiamano ancora il vero autorizzativo
- [ ] modificare file conf logj4 authorizationstub, fargli scrivere le cose come quello di Phoenix?
- [x] in `WsdlServlet` non dovrebbe chiamare in GET il wsdl del WSContratti di test, ma restituirne uno costruito localmente. Diversamente, se il servizio di test è giù, non verrebbe restituito nessun wsdl al chiamante
- [ ] modificare anche `ProxyServlet`, implementare una `doGet` che restituisca il contenuto di `http://autgw:8080/AuthorizationGateway/authorizationGateway.wsdl`.
Oppure creare una nuova servlet in `authorizationstub`.
Oppure modificare la get in `WsdlServlet` per fargli restituire il wsdl di wscontratti piuttosto che di autorizzativo in base a un parmetro nella GET
- [x] far passare gli AT phoenix/antigua sul wallet programmando lo stub
- [x] nella `WSServlet` dovrebbe utilizzare il pan della request nel costruire le response, non usare quel map, sennò saltano degli AT
- [x] i vari `if` in `FakeAuthorizationSystem` possono diventare dei command, per es. che estendano un'interfaccia `Function`
- [x] `TranpipeRecurringPaymentAcceptanceTest#shouldAuthorizeUsingCardForRecurrentTerminals` / `TranpipeRecurringPaymentAcceptanceTest#shouldAuthorizeUsingWalletId` scrivere corrispondenti IT che chiamano creazione del pagamento, in particolare col wallet, poi modificare AT per farli funzionare grazie allo stub
* magari metterli in `RecurrentPaymentWithWalletIntegrationTest`
- [x] rimuovere `buildEditedResponseFrom` da authorizationStub
## TODO: sistemare AT Phoenix che chiamano autorizzativo (barrati con la `x` quelli che ora usano lo stub, e che hanno un corrispondente IT in Phoenix Unreliable Integration)
- [x] `HostedAmex3DSAcceptanceTest`
- [x] `PowerTranpipeHappyPathAcceptanceTest`
- [x] `TranpipeRecurringPaymentAcceptanceTest`
- [x] `HostedPaymentForCallCenterTerminalsAcceptanceTest`
- [x] `MobileHostedPageAcceptanceTest`
- [x] `HostedPayment3DSAcceptanceTest`
- [x] `AntiguaHostedPayment3DSTest`
- [x] `AntiguaHostedPaymentNon3DSErrorPathAcceptanceTest`
- [x] `PostOperationNotificationAcceptanceTest`
- [x] `TransactionDetailAcceptanceTest`
- [x] `TransactionExportAcceptanceTest`
- [x] `TransactionSearchAcceptanceTest`
- [x] `TransactionVoidAcceptanceTest`
- [ ] `TransactionCaptureAcceptanceTest` <= problemi a sistemare l'AT
- [x] `TransactionFraudNotificationAcceptanceTest`
- [x] `AuditSearchAcceptanceTest`
- [x] `AntiguaHostedPaymentNon3DSHappyPathTest`
- [ ] `AntiguaPayThreeStepAcceptanceTest`
* manca test `paresU` (occorre far restituire ad authorizationstub codice 120)
- [ ] `ThreeStepHappyPathAcceptanceTest`
* mancano test `callDirectlyPayStepWithTranpipeTerminal`, `verifyParesResponseWhenStatusU`
- [ ] `HostedPayment3DSTwoAcceptanceTest`
- [ ] `HappyPathPatTest`
- [ ] `ServerToServer3DS2AcceptanceTest`
- [ ] `AntiguaThreeStepRecurringPaymentTest`
- [ ] `ThreeStepRecurringPaymentAcceptanceTest`
- [ ] `LandingCreditCardAcceptanceTest`
- [ ] `AntiguaHostedInitErrorPathTest`
- [ ] `AntiguaCaptureAndUncaptureAcceptanceTest`
- [ ] `TranpipeRecurringDbIntegrationTest` ma perché chiama autorizzativo??
- [x] `ForcedCancelAcceptanceTest` => creata classe `ForcedCancelAuthorizationIntegrationTest`, va gestito via stub la function `reversal` e creati gli IT corrispondenti. Vedi come fare in `WebServiceCancelAuthorizationMessageTest`
- [x] `AuthorizationCancelAcceptanceTest#cancelTransaction` usa la reversal => IT già presente in test `WebServiceAuthorizationSystemIntegrationTest#cancelAnAuthorizationWithVisa`
- [x] `AuthorizationCancelAcceptanceTest#cancelTransactionWithMulticurrency` => rimane da creare IT corrispondente, vedi IT simile `WebServiceAuthorizationSystemIntegrationTest#cancelAnAuthorizationWithVisa`
- [x] `AntiguaAuthorizationAndCancelAcceptanceTest`
## Come fare debug su authorizationstub in locale
In phoenix, modificare la property `authorizationGateway.url` in `phoenix.properties` per farlo puntare allo stub locale
```
authorizationGateway.url=http://localhost:8731/authorize
```
Aprire il progetto `authorizationstub` singolarmente (non aprendo phoenix-project, ma aprendo il progetto authorizationstub direttamente).
Lanciare `App#main` in debug da Intellij. Mettere i breakpoint dove necessario.
Da Phoenix, lanciare gli IT in `WebServiceAuthorizationSystemIntegrationTest` oppure gli AT (es. `AuthorizationHappyPathAcceptanceTest`)
## Analisi di alcuni AT che fallivano chiamando il vero autorizzativo (per i posteri)
### UserInsertAcceptanceTest#insertsAUser
La pagina `/backoffice/users/insert` fa una request con `Content-Type: application/x-www-form-urlencoded`.
Per confronto, la pagina `backoffice/directlink/insert` che crea un directlink fa una request con `Content-Type: application/x-www-form-urlencoded; charset=UTF-8`
Il problema potrebbe essere la mancanza di `charset=UTF-8` nella request della insert utente.
### AntiguaThreeStepRecurringPaymentTest#shouldPayUsingWalletIdWithFull3D / ThreeStepRecurringPaymentAcceptanceTest#shouldPayUsingWalletIdWithFull3D
Non funzionavano a causa del wallet e della carta usata.
Per funzionare devono sussistere le seguenti condizioni:
* il wallet utilizzato (in questo caso quello cin ID `walletFor3Step`) deve essere censito nella map `pans` in `StubbedGetPanUseCase#getStubbedResponseFor` nel progetto `authorizationstub`. Ad ogni wallet di quella map è associato un PAN
* il pan associato al wallet nella mappa `pans` deve essere quello di una carta:
* censita nella lista `PROSPECT_PANS` di `ProspectTestCardAccountProvider` di Minos. Se è presente qui, la chiamata alla verifyPares fatta dagli AT, che chiama Minos sulla rotta `http://192.168.30.25/acs/payerAuthentication?brand=MasterCard` (`PayerAuthenticationController`), evita di chiamare il servizio `cardAccountProvider`, ma restituisce una response OK, permettendo di procedere e di restituire una Pares con status Y
* NON censita nella lista `threeds2Pans` della `InitializeServlet` sul 3DS-DS-PROXY, altrimenti quando viene fatta la chiamata alla `/init` del 3DS server partirebbe un flow 3DS2, facendo saltare l'AT
### HostedPaymentForCallCenterTerminalsAcceptanceTest.paresStatusY
Nel flusso si ferma su `PatTransactionAuthorizer#authorize`, perché la transazione risulta non autenticata.
Fallisce quando chiama Minos di stage con la carta cleanCodePrepaid, ritorna una pares con status N.
Questo perché Minos di stage chiama i servizi veri di test, non lo stub.
**NOTA:** fatto passare utilizzando carta `getVisaExpiredEnrolled`, la stessa usata in `HostedPayment3DSAcceptanceTest#paresStatusY`
### HostedBPayEcommerceVoidAcceptanceTest.shouldVoidBPayEcommerceTransaction
Fallisce nella chiamata a Phoenix, sulla rotta `/payment/2/xml` (che atterra su `AntiguaTranpipeControllerFactory`).
Si rompe quando prova a chiamare l'url di stage `http://dev.monetaonline.it/monetaweb/payment/2/xml`, gli restituisce una 500 invece di una 200.
In locale però il test gira.
Su stage le tre chiamate post eseguite sono:
* la prima su `http://dev.monetaonline.it/monetaweb/payment/2/xml`
* la seconda su `http://dev.monetaonline.it/monetaweb/bpayecommerce/callback`
* * la terza di nuovo su `http://dev.monetaonline.it/monetaweb/payment/2/xml`
La curl della prima post che viene fatta in `AcceptanceBase.sendPostExpectingResponseCode` è
```
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data 'password=Password1&amount=0.02&responsetomerchanturl=http%3A%2F%2Flocalhost%3A8080%2Fphoenix-0.0%2Fdemo%2Fica%2Fnotify.jsp&merchantorderid=2011IVR4189718&cardholderemail=&cardholdername=udf2&recoveryurl=http%3A%2F%2Fexample.org%2Ferror.url&description=udf1&language=ITA&id=97925841&operationtype=initializebpayecommerce¤cycode=978' http://dev.monetaonline.it/monetaweb/payment/2/xml
```
La curl della terza post è
```
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data 'password=Password1&amount=0.1&merchantorderid=2011IVR4189718&customfield=custom&paymentid=520957964452200599&operationtype=voidbpayecommerce&id=97925841' http://dev.monetaonline.it/monetaweb/payment/2/xml
```
Si rompe sulla prima o sulla terza post
Da locale funziona, da macchina jenkins funziona. Perché???
## Esempi di request/response ad Autorizzativo
Function da verificare (da `AuthorizationGatewayClient.jar`):
* Function.REVERSAL
* Function.RPACTIVATIONAUTHORIZATION
* Function.PGBC_AUTHORIZATION
### `authorization`
#### Esempio request
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<transactionRequest xmlns="http://www.setefi.com/authorizationGateway">
<channel>ECOMMERCE</channel>
<function>authorization</function>
<transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ECommerceAuthorizationMessage">
<stan>
<timestamp>2020-04-19T16:22:51.172+02:00</timestamp>
<number>10036</number>
</stan>
<pan>4349940199993634</pan>
<currency>
<currencyCode>978</currencyCode>
</currency>
<amount>2</amount>
<datetimeTransmission>2020-04-19T14:22:51.172Z</datetimeTransmission>
<datetime>2020-04-19T16:22:51.172+02:00</datetime>
<retrievalReferenceNumber>
<julianDay>110</julianDay>
<sequenceNumber>16705</sequenceNumber>
</retrievalReferenceNumber>
<acquirerIdCode>01025</acquirerIdCode>
<forwardingIdCode>08006</forwardingIdCode>
<destinationInstIdCode>08006</destinationInstIdCode>
<originatorInstIdCode>00001</originatorInstIdCode>
<receivingInstIdCode>08006</receivingInstIdCode>
<merchant>
<acceptorId>000279810 </acceptorId>
<terminalId>97454447</terminalId>
<acceptorName>Phoenix Esplicito</acceptorName>
</merchant>
<posDataCode>
<CardDataInputCapability>1</CardDataInputCapability>
<CardHolderAuthenticationCapability>0</CardHolderAuthenticationCapability>
<CardCaptureCapability>0</CardCaptureCapability>
<OperatingEnvironment>5</OperatingEnvironment>
<CardHolderPresent>5</CardHolderPresent>
<CardPresent>0</CardPresent>
<CardDataInputMode>J</CardDataInputMode>
<CardHolderAuthenticationMethod>0</CardHolderAuthenticationMethod>
<CardHolderAuthenticationEntity>0</CardHolderAuthenticationEntity>
<CardDataOutputCapability>1</CardDataOutputCapability>
<TerminalOutputCapability>1</TerminalOutputCapability>
<PinCaptureCapability>0</PinCaptureCapability>
</posDataCode>
<expiryDate>
<Month>01</Month>
<Year>21</Year>
</expiryDate>
<CVV2Data>
<CVV2State>1</CVV2State>
<CVV2>367</CVV2>
</CVV2Data>
<SecurityLevel>
<SecurityType>1</SecurityType>
<CryptogramPresence>0</CryptogramPresence>
<BankpassService>0</BankpassService>
<UCAF>0</UCAF>
<CAVV>1</CAVV>
</SecurityLevel>
<XID>D2846D33B281098BC0BE0A1F8723643600134DDF</XID>
<CAVVData>0000010510809453213148966480941000000000</CAVVData>
<ExtendedAuthorizationData>
<CardholderName>test</CardholderName>
<OrderID>Testolino</OrderID>
</ExtendedAuthorizationData>
</transaction>
</transactionRequest>
</soap:Body>
</soap:Envelope>
```
#### Esempio response
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:transactionResponse xmlns:ns2="http://www.setefi.com/authorizationGateway">
<ns2:channel>ECOMMERCE</ns2:channel>
<ns2:function>authorization</ns2:function>
<ns2:transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ECommerceAuthorizationMessage">
<ns2:stan>
<ns2:timestamp>2020-04-19T16:25:18.256+02:00</ns2:timestamp>
<ns2:number>14116</ns2:number>
</ns2:stan>
<ns2:responseCode>000</ns2:responseCode>
<ns2:pan>4349940199993634</ns2:pan>
<ns2:currency>
<ns2:currencyCode>978</ns2:currencyCode>
</ns2:currency>
<ns2:amount>2</ns2:amount>
<ns2:datetimeTransmission>2020-04-19T14:25:18.256Z</ns2:datetimeTransmission>
<ns2:datetime>2020-04-19T16:25:18.256+02:00</ns2:datetime>
<ns2:retrievalReferenceNumber>
<ns2:julianDay>110</ns2:julianDay>
<ns2:sequenceNumber>10541</ns2:sequenceNumber>
<ns2:generatedReferenceNumber>011000010541</ns2:generatedReferenceNumber>
<ns2:internalReferenceNumber>011000010541</ns2:internalReferenceNumber>
</ns2:retrievalReferenceNumber>
<ns2:approvalCode>773825</ns2:approvalCode>
<ns2:acquirerIdCode>01025</ns2:acquirerIdCode>
<ns2:forwardingIdCode>08006</ns2:forwardingIdCode>
<ns2:destinationInstIdCode>08006</ns2:destinationInstIdCode>
<ns2:originatorInstIdCode>00001</ns2:originatorInstIdCode>
<ns2:receivingInstIdCode>08006</ns2:receivingInstIdCode>
<ns2:merchant>
<ns2:acceptorId>000279810 </ns2:acceptorId>
<ns2:terminalId>97454447</ns2:terminalId>
<ns2:acceptorName>Phoenix Esplicito</ns2:acceptorName>
</ns2:merchant>
<ns2:posDataCode>
<ns2:CardDataInputCapability>1</ns2:CardDataInputCapability>
<ns2:CardHolderAuthenticationCapability>0</ns2:CardHolderAuthenticationCapability>
<ns2:CardCaptureCapability>0</ns2:CardCaptureCapability>
<ns2:OperatingEnvironment>5</ns2:OperatingEnvironment>
<ns2:CardHolderPresent>5</ns2:CardHolderPresent>
<ns2:CardPresent>0</ns2:CardPresent>
<ns2:CardDataInputMode>J</ns2:CardDataInputMode>
<ns2:CardHolderAuthenticationMethod>0</ns2:CardHolderAuthenticationMethod>
<ns2:CardHolderAuthenticationEntity>0</ns2:CardHolderAuthenticationEntity>
<ns2:CardDataOutputCapability>1</ns2:CardDataOutputCapability>
<ns2:TerminalOutputCapability>1</ns2:TerminalOutputCapability>
<ns2:PinCaptureCapability>0</ns2:PinCaptureCapability>
</ns2:posDataCode>
<ns2:CardCountry>380</ns2:CardCountry>
<ns2:expiryDate>
<ns2:Month>01</ns2:Month>
<ns2:Year>21</ns2:Year>
</ns2:expiryDate>
<ns2:CVV2Data>
<ns2:CVV2State>1</ns2:CVV2State>
<ns2:CVV2>367</ns2:CVV2>
</ns2:CVV2Data>
<ns2:SecurityLevel>
<ns2:SecurityType>1</ns2:SecurityType>
<ns2:CryptogramPresence>0</ns2:CryptogramPresence>
<ns2:BankpassService>0</ns2:BankpassService>
<ns2:UCAF>0</ns2:UCAF>
<ns2:CAVV>1</ns2:CAVV>
</ns2:SecurityLevel>
<ns2:XID>D2846D33B281098BC0BE0A1F8723643600134DDF</ns2:XID>
<ns2:CAVVData>0000010510809453213148966480941000000000</ns2:CAVVData>
<ns2:ExtendedAuthorizationData>
<ns2:CardholderName>test</ns2:CardholderName>
<ns2:OrderID>Testolino</ns2:OrderID>
</ns2:ExtendedAuthorizationData>
<ns2:CardInfo>
<ns2:Circuit>V</ns2:Circuit>
<ns2:OnUsCard>true</ns2:OnUsCard>
<ns2:CardType>C</ns2:CardType>
</ns2:CardInfo>
</ns2:transaction>
<ns2:responseCode>000</ns2:responseCode>
</ns2:transactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
### `cardverification`
#### Esempio request
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<transactionRequest xmlns="http://www.setefi.com/authorizationGateway">
<channel>ECOMMERCE</channel>
<function>cardverification</function>
<transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CardVerificationMessage">
<stan>
<timestamp>2020-04-16T08:55:33.210+02:00</timestamp>
<number>10376</number>
</stan>
<pan>4943319611114873</pan>
<expiryDate>
<Month>02</Month>
<Year>21</Year>
</expiryDate>
<merchant>
<acceptorId>001111111 </acceptorId>
<terminalId>99990750</terminalId>
<acceptorName>TML TEST ECOMM 2</acceptorName>
</merchant>
<CVV2Data>
<CVV2State>1</CVV2State>
<CVV2>770</CVV2>
</CVV2Data>
</transaction>
</transactionRequest>
</soap:Body>
</soap:Envelope>
```
#### Esempio response
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:transactionResponse xmlns:ns2="http://www.setefi.com/authorizationGateway">
<ns2:channel>ECOMMERCE</ns2:channel>
<ns2:function>cardverification</ns2:function>
<ns2:transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:CardVerificationMessage">
<ns2:stan>
<ns2:timestamp>2020-04-17T19:19:22.343+02:00</ns2:timestamp>
<ns2:number>14486</ns2:number>
</ns2:stan>
<ns2:responseCode>000</ns2:responseCode>
<ns2:pan>4349940199990739</ns2:pan>
<ns2:expiryDate>
<ns2:Month>08</ns2:Month>
<ns2:Year>20</ns2:Year>
</ns2:expiryDate>
<ns2:approvalCode>611474</ns2:approvalCode>
<ns2:merchant>
<ns2:acceptorId>001111111 </ns2:acceptorId>
<ns2:terminalId>99990750</ns2:terminalId>
<ns2:acceptorName>TML TEST ECOMM 2</ns2:acceptorName>
</ns2:merchant>
<ns2:CVV2Data>
<ns2:CVV2State>1</ns2:CVV2State>
<ns2:CVV2>700</ns2:CVV2>
</ns2:CVV2Data>
</ns2:transaction>
<ns2:responseCode>000</ns2:responseCode>
</ns2:transactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
### `rpactivationauthorization`
#### Esempio request
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<transactionRequest xmlns="http://www.setefi.com/authorizationGateway">
<channel>ECOMMERCE</channel>
<function>rpactivationauthorization</function>
<transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ECommerceAuthorizationMessage">
<stan>
<timestamp>2020-04-16T14:14:23.831+02:00</timestamp>
<number>15758</number>
</stan>
<pan>4349940199990739</pan>
<currency>
<currencyCode>978</currencyCode>
</currency>
<amount>10</amount>
<datetimeTransmission>2020-04-16T12:14:23.831Z</datetimeTransmission>
<datetime>2020-04-16T14:14:23.831+02:00</datetime>
<retrievalReferenceNumber>
<julianDay>107</julianDay>
<sequenceNumber>12551</sequenceNumber>
</retrievalReferenceNumber>
<acquirerIdCode>01025</acquirerIdCode>
<forwardingIdCode>08006</forwardingIdCode>
<destinationInstIdCode>08006</destinationInstIdCode>
<originatorInstIdCode>00001</originatorInstIdCode>
<receivingInstIdCode>08006</receivingInstIdCode>
<merchant>
<acceptorId>003441474 </acceptorId>
<terminalId>97578200</terminalId>
<acceptorName>UNIEURO</acceptorName>
</merchant>
<posDataCode>
<CardDataInputCapability>1</CardDataInputCapability>
<CardHolderAuthenticationCapability>0</CardHolderAuthenticationCapability>
<CardCaptureCapability>0</CardCaptureCapability>
<OperatingEnvironment>0</OperatingEnvironment>
<CardHolderPresent>2</CardHolderPresent>
<CardPresent>0</CardPresent>
<CardDataInputMode>1</CardDataInputMode>
<CardHolderAuthenticationMethod>0</CardHolderAuthenticationMethod>
<CardHolderAuthenticationEntity>0</CardHolderAuthenticationEntity>
<CardDataOutputCapability>1</CardDataOutputCapability>
<TerminalOutputCapability>1</TerminalOutputCapability>
<PinCaptureCapability>0</PinCaptureCapability>
</posDataCode>
<expiryDate>
<Month>08</Month>
<Year>20</Year>
</expiryDate>
<recurringPaymentData>
<rpFeasibility>true</rpFeasibility>
<rpCreation>false</rpCreation>
<rpReplacement>false</rpReplacement>
<trackID>TestAutomatico</trackID>
</recurringPaymentData>
<CVV2Data>
<CVV2State>1</CVV2State>
<CVV2>700</CVV2>
</CVV2Data>
<SecurityLevel>
<SecurityType>2</SecurityType>
<CryptogramPresence>0</CryptogramPresence>
<BankpassService>0</BankpassService>
<UCAF>0</UCAF>
<CAVV>0</CAVV>
</SecurityLevel>
<ExtendedAuthorizationData>
<CardholderName>Sandro Mancuso</CardholderName>
<OrderID>TestAutomatico</OrderID>
</ExtendedAuthorizationData>
</transaction>
</transactionRequest>
</soap:Body>
</soap:Envelope>
```
#### Esempio response
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:transactionResponse xmlns:ns2="http://www.setefi.com/authorizationGateway">
<ns2:channel>ECOMMERCE</ns2:channel>
<ns2:function>rpactivationauthorization</ns2:function>
<ns2:transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ECommerceAuthorizationMessage">
<ns2:stan>
<ns2:timestamp>2020-04-16T14:14:23.831+02:00</ns2:timestamp>
<ns2:number>15758</ns2:number>
</ns2:stan>
<ns2:responseCode>000</ns2:responseCode>
<ns2:pan>4349940199990739</ns2:pan>
<ns2:currency>
<ns2:currencyCode>978</ns2:currencyCode>
</ns2:currency>
<ns2:amount>10</ns2:amount>
<ns2:datetimeTransmission>2020-04-16T12:14:23.831Z</ns2:datetimeTransmission>
<ns2:datetime>2020-04-16T14:14:23.831+02:00</ns2:datetime>
<ns2:retrievalReferenceNumber>
<ns2:julianDay>107</ns2:julianDay>
<ns2:sequenceNumber>12551</ns2:sequenceNumber>
<ns2:generatedReferenceNumber>010700012551</ns2:generatedReferenceNumber>
<ns2:internalReferenceNumber>010700012551</ns2:internalReferenceNumber>
</ns2:retrievalReferenceNumber>
<ns2:approvalCode>506871</ns2:approvalCode>
<ns2:acquirerIdCode>01025</ns2:acquirerIdCode>
<ns2:forwardingIdCode>08006</ns2:forwardingIdCode>
<ns2:destinationInstIdCode>08006</ns2:destinationInstIdCode>
<ns2:originatorInstIdCode>00001</ns2:originatorInstIdCode>
<ns2:receivingInstIdCode>08006</ns2:receivingInstIdCode>
<ns2:merchant>
<ns2:acceptorId>003441474 </ns2:acceptorId>
<ns2:terminalId>97578200</ns2:terminalId>
<ns2:acceptorName>UNIEURO</ns2:acceptorName>
</ns2:merchant>
<ns2:posDataCode>
<ns2:CardDataInputCapability>1</ns2:CardDataInputCapability>
<ns2:CardHolderAuthenticationCapability>0</ns2:CardHolderAuthenticationCapability>
<ns2:CardCaptureCapability>0</ns2:CardCaptureCapability>
<ns2:OperatingEnvironment>0</ns2:OperatingEnvironment>
<ns2:CardHolderPresent>2</ns2:CardHolderPresent>
<ns2:CardPresent>0</ns2:CardPresent>
<ns2:CardDataInputMode>1</ns2:CardDataInputMode>
<ns2:CardHolderAuthenticationMethod>0</ns2:CardHolderAuthenticationMethod>
<ns2:CardHolderAuthenticationEntity>0</ns2:CardHolderAuthenticationEntity>
<ns2:CardDataOutputCapability>1</ns2:CardDataOutputCapability>
<ns2:TerminalOutputCapability>1</ns2:TerminalOutputCapability>
<ns2:PinCaptureCapability>0</ns2:PinCaptureCapability>
</ns2:posDataCode>
<ns2:CardCountry>380</ns2:CardCountry>
<ns2:expiryDate>
<ns2:Month>08</ns2:Month>
<ns2:Year>20</ns2:Year>
</ns2:expiryDate>
<ns2:recurringPaymentData>
<ns2:rpFeasibility>true</ns2:rpFeasibility>
<ns2:rpCreation>false</ns2:rpCreation>
<ns2:rpReplacement>false</ns2:rpReplacement>
<ns2:trackID>TestAutomatico</ns2:trackID>
<ns2:generatedToken>X000000000000007J45</ns2:generatedToken>
<ns2:contractActionResult>00</ns2:contractActionResult>
<ns2:contractActionResultDescription>OK</ns2:contractActionResultDescription>
</ns2:recurringPaymentData>
<ns2:CVV2Data>
<ns2:CVV2State>1</ns2:CVV2State>
<ns2:CVV2>700</ns2:CVV2>
</ns2:CVV2Data>
<ns2:SecurityLevel>
<ns2:SecurityType>2</ns2:SecurityType>
<ns2:CryptogramPresence>0</ns2:CryptogramPresence>
<ns2:BankpassService>0</ns2:BankpassService>
<ns2:UCAF>0</ns2:UCAF>
<ns2:CAVV>0</ns2:CAVV>
</ns2:SecurityLevel>
<ns2:ExtendedAuthorizationData>
<ns2:CardholderName>Sandro Mancuso</ns2:CardholderName>
<ns2:OrderID>TestAutomatico</ns2:OrderID>
</ns2:ExtendedAuthorizationData>
<ns2:CardInfo>
<ns2:Circuit>V</ns2:Circuit>
<ns2:OnUsCard>true</ns2:OnUsCard>
<ns2:CardType>C</ns2:CardType>
</ns2:CardInfo>
</ns2:transaction>
<ns2:responseCode>000</ns2:responseCode>
</ns2:transactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
## Funzionamento AT AntiguaHostedRecurringPaymentAcceptanceTest#finalizePaymentWithWallet
* esegue un flusso hosted fino ad authorizationstub per creare il contract (il wallet)
* walletId `recurringWallet`
* merchantId `003441474`
* function `rpactivationauthorization`
* `recurringAction: C` ==> `rpAction: 03`
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<transactionRequest xmlns="http://www.setefi.com/authorizationGateway">
<channel>ECOMMERCE</channel>
<function>rpactivationauthorization</function>
<transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ECommerceAuthorizationMessage">
<stan>
<timestamp>2020-04-20T18:45:23.813+02:00</timestamp>
<number>10582</number>
</stan>
<pan>4943319602269165</pan>
<currency>
<currencyCode>978</currencyCode>
</currency>
<amount>2</amount>
<datetimeTransmission>2020-04-20T16:45:23.813Z</datetimeTransmission>
<datetime>2020-04-20T18:45:23.813+02:00</datetime>
<retrievalReferenceNumber>
<julianDay>111</julianDay>
<sequenceNumber>71587541</sequenceNumber>
</retrievalReferenceNumber>
<acquirerIdCode>01025</acquirerIdCode>
<forwardingIdCode>08006</forwardingIdCode>
<destinationInstIdCode>08006</destinationInstIdCode>
<originatorInstIdCode>00001</originatorInstIdCode>
<receivingInstIdCode>08006</receivingInstIdCode>
<merchant>
<acceptorId>003441474 </acceptorId>
<terminalId>97578200</terminalId>
<acceptorName>UNIEURO</acceptorName>
</merchant>
<posDataCode>
<CardDataInputCapability>1</CardDataInputCapability>
<CardHolderAuthenticationCapability>0</CardHolderAuthenticationCapability>
<CardCaptureCapability>0</CardCaptureCapability>
<OperatingEnvironment>0</OperatingEnvironment>
<CardHolderPresent>2</CardHolderPresent>
<CardPresent>0</CardPresent>
<CardDataInputMode>1</CardDataInputMode>
<CardHolderAuthenticationMethod>0</CardHolderAuthenticationMethod>
<CardHolderAuthenticationEntity>0</CardHolderAuthenticationEntity>
<CardDataOutputCapability>1</CardDataOutputCapability>
<TerminalOutputCapability>1</TerminalOutputCapability>
<PinCaptureCapability>0</PinCaptureCapability>
</posDataCode>
<expiryDate>
<Month>03</Month>
<Year>21</Year>
</expiryDate>
<recurringPaymentData>
<rpAction>03</rpAction>
<trackID>recurringWallet</trackID>
</recurringPaymentData>
<CVV2Data>
<CVV2State>1</CVV2State>
<CVV2>252</CVV2>
</CVV2Data>
<SecurityLevel>
<SecurityType>2</SecurityType>
<CryptogramPresence>0</CryptogramPresence>
<BankpassService>0</BankpassService>
<UCAF>0</UCAF>
<CAVV>0</CAVV>
</SecurityLevel>
<ExtendedAuthorizationData>
<IpAddress>10.0.0.1</IpAddress>
<EmailAddress></EmailAddress>
<CardholderName>test</CardholderName>
<OrderID>AUTHORIZE_ME</OrderID>
</ExtendedAuthorizationData>
</transaction>
</transactionRequest>
</soap:Body>
</soap:Envelope>
```
* authorizationstub risponde con 000 (perchè era impostato OrderId=AUTHORIZE_ME)
* verifica che il contratto sia stato creato
* chiama la `WSContrattiServlet` di authorizationstub con
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetPanRequest xmlns="http://www.setefi.it/wscontratti">
<codiceCommerciante>003441474</codiceCommerciante>
<trackID>recurringWallet</trackID>
</GetPanRequest>
</soap:Body>
</soap:Envelope>
```
* authorizationstub risponde con
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:GetPanResponse xmlns:ns2="http://www.setefi.it/wscontratti">
<ns2:codiceCommerciante>003441474</ns2:codiceCommerciante>
<ns2:trackID>recurringWallet</ns2:trackID>
<ns2:esitoCodice>00</ns2:esitoCodice>
<ns2:pan>4943319611114873</ns2:pan>
<ns2:esitoDescrizione>000000000000</ns2:esitoDescrizione>
<ns2:dataScadenza>9912</ns2:dataScadenza>
<ns2:tipoAttivazione>D</ns2:tipoAttivazione>
<ns2:rrnInterno>123456789012</ns2:rrnInterno>
<ns2:tipoCarta>V</ns2:tipoCarta>
</ns2:GetPanResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
* **ATTENZIONE** i pan sono diversi, nello stub ne imposta uno diverso. Gli AT passano, ma è meglio programmare lo stub per rispondere con lo stesso pan
* esegue un flusso hosted fino ad authorizationstub per pagamento con walletId
* walletId `recurringWallet`
* merchantId `003441474`
* trackId AUTHORIZE_ME (verrà mappato su OrderId)
* `recurringAction: W` ==> `rpAction: 00`
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<transactionRequest xmlns="http://www.setefi.com/authorizationGateway">
<channel>ECOMMERCE</channel>
<function>rpactivationauthorization</function>
<transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ECommerceAuthorizationMessage">
<stan>
<timestamp>2020-04-20T19:09:33.605+02:00</timestamp>
<number>10714</number>
</stan>
<pan>4943319611114873</pan>
<currency>
<currencyCode>978</currencyCode>
</currency>
<amount>2</amount>
<datetimeTransmission>2020-04-20T17:09:33.605Z</datetimeTransmission>
<datetime>2020-04-20T19:09:33.605+02:00</datetime>
<retrievalReferenceNumber>
<julianDay>111</julianDay>
<sequenceNumber>71587543</sequenceNumber>
</retrievalReferenceNumber>
<acquirerIdCode>01025</acquirerIdCode>
<forwardingIdCode>08006</forwardingIdCode>
<destinationInstIdCode>08006</destinationInstIdCode>
<originatorInstIdCode>00001</originatorInstIdCode>
<receivingInstIdCode>08006</receivingInstIdCode>
<merchant>
<acceptorId>003441474 </acceptorId>
<terminalId>97578200</terminalId>
<acceptorName>UNIEURO</acceptorName>
</merchant>
<posDataCode>
<CardDataInputCapability>1</CardDataInputCapability>
<CardHolderAuthenticationCapability>0</CardHolderAuthenticationCapability>
<CardCaptureCapability>0</CardCaptureCapability>
<OperatingEnvironment>0</OperatingEnvironment>
<CardHolderPresent>2</CardHolderPresent>
<CardPresent>0</CardPresent>
<CardDataInputMode>1</CardDataInputMode>
<CardHolderAuthenticationMethod>0</CardHolderAuthenticationMethod>
<CardHolderAuthenticationEntity>0</CardHolderAuthenticationEntity>
<CardDataOutputCapability>1</CardDataOutputCapability>
<TerminalOutputCapability>1</TerminalOutputCapability>
<PinCaptureCapability>0</PinCaptureCapability>
</posDataCode>
<expiryDate>
<Month>12</Month>
<Year>99</Year>
</expiryDate>
<recurringPaymentData>
<rpAction>00</rpAction>
<trackID>recurringWallet</trackID>
</recurringPaymentData>
<CVV2Data>
<CVV2State>1</CVV2State>
<CVV2>252</CVV2>
</CVV2Data>
<SecurityLevel>
<SecurityType>2</SecurityType>
<CryptogramPresence>0</CryptogramPresence>
<BankpassService>0</BankpassService>
<UCAF>0</UCAF>
<CAVV>0</CAVV>
</SecurityLevel>
<ExtendedAuthorizationData>
<IpAddress>10.0.0.1</IpAddress>
<EmailAddress></EmailAddress>
<CardholderName>udf2</CardholderName>
<OrderID>AUTHORIZE_ME</OrderID>
</ExtendedAuthorizationData>
</transaction>
</transactionRequest>
</soap:Body>
</soap:Envelope>
```
* authorizationstub risponde con 000
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:transactionResponse xmlns:ns2="http://www.setefi.com/authorizationGateway">
<ns2:channel>ECOMMERCE</ns2:channel>
<ns2:function>rpactivationauthorization</ns2:function>
<ns2:transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:ECommerceAuthorizationMessage">
<ns2:stan>
<ns2:timestamp>2020-04-16T14:14:23.831+02:00</ns2:timestamp>
<ns2:number>15758</ns2:number>
</ns2:stan>
<ns2:responseCode>000</ns2:responseCode>
<ns2:pan>4943319611114873</ns2:pan>
<ns2:currency>
<ns2:currencyCode>978</ns2:currencyCode>
</ns2:currency>
<ns2:amount>10</ns2:amount>
<ns2:datetimeTransmission>2020-04-16T12:14:23.831Z</ns2:datetimeTransmission>
<ns2:datetime>2020-04-16T14:14:23.831+02:00</ns2:datetime>
<ns2:retrievalReferenceNumber>
<ns2:julianDay>107</ns2:julianDay>
<ns2:sequenceNumber>12551</ns2:sequenceNumber>
<ns2:generatedReferenceNumber>010700012551</ns2:generatedReferenceNumber>
<ns2:internalReferenceNumber>010700012551</ns2:internalReferenceNumber>
</ns2:retrievalReferenceNumber>
<ns2:approvalCode>506871</ns2:approvalCode>
<ns2:acquirerIdCode>01025</ns2:acquirerIdCode>
<ns2:forwardingIdCode>08006</ns2:forwardingIdCode>
<ns2:destinationInstIdCode>08006</ns2:destinationInstIdCode>
<ns2:originatorInstIdCode>00001</ns2:originatorInstIdCode>
<ns2:receivingInstIdCode>08006</ns2:receivingInstIdCode>
<ns2:merchant>
<ns2:acceptorId>003441474 </ns2:acceptorId>
<ns2:terminalId>97578200</ns2:terminalId>
<ns2:acceptorName>UNIEURO</ns2:acceptorName>
</ns2:merchant>
<ns2:posDataCode>
<ns2:CardDataInputCapability>1</ns2:CardDataInputCapability>
<ns2:CardHolderAuthenticationCapability>0</ns2:CardHolderAuthenticationCapability>
<ns2:CardCaptureCapability>0</ns2:CardCaptureCapability>
<ns2:OperatingEnvironment>0</ns2:OperatingEnvironment>
<ns2:CardHolderPresent>2</ns2:CardHolderPresent>
<ns2:CardPresent>0</ns2:CardPresent>
<ns2:CardDataInputMode>1</ns2:CardDataInputMode>
<ns2:CardHolderAuthenticationMethod>0</ns2:CardHolderAuthenticationMethod>
<ns2:CardHolderAuthenticationEntity>0</ns2:CardHolderAuthenticationEntity>
<ns2:CardDataOutputCapability>1</ns2:CardDataOutputCapability>
<ns2:TerminalOutputCapability>1</ns2:TerminalOutputCapability>
<ns2:PinCaptureCapability>0</ns2:PinCaptureCapability>
</ns2:posDataCode>
<ns2:CardCountry>380</ns2:CardCountry>
<ns2:expiryDate>
<ns2:Month>12</ns2:Month>
<ns2:Year>99</ns2:Year>
</ns2:expiryDate>
<ns2:recurringPaymentData>
<ns2:rpFeasibility>true</ns2:rpFeasibility>
<ns2:rpCreation>false</ns2:rpCreation>
<ns2:rpReplacement>false</ns2:rpReplacement>
<ns2:trackID>recurringWallet</ns2:trackID>
<ns2:generatedToken>X000000000000007J45</ns2:generatedToken>
<ns2:contractActionResult>00</ns2:contractActionResult>
<ns2:contractActionResultDescription>OK</ns2:contractActionResultDescription>
</ns2:recurringPaymentData>
<ns2:CVV2Data>
<ns2:CVV2State>1</ns2:CVV2State>
<ns2:CVV2>252</ns2:CVV2>
</ns2:CVV2Data>
<ns2:SecurityLevel>
<ns2:SecurityType>2</ns2:SecurityType>
<ns2:CryptogramPresence>0</ns2:CryptogramPresence>
<ns2:BankpassService>0</ns2:BankpassService>
<ns2:UCAF>0</ns2:UCAF>
<ns2:CAVV>0</ns2:CAVV>
</ns2:SecurityLevel>
<ns2:ExtendedAuthorizationData>
<ns2:CardholderName>Sandro Mancuso</ns2:CardholderName>
<ns2:OrderID>AUTHORIZE_ME</ns2:OrderID>
</ns2:ExtendedAuthorizationData>
<ns2:CardInfo>
<ns2:Circuit>V</ns2:Circuit>
<ns2:OnUsCard>true</ns2:OnUsCard>
<ns2:CardType>C</ns2:CardType>
</ns2:CardInfo>
</ns2:transaction>
<ns2:responseCode>000</ns2:responseCode>
</ns2:transactionResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
* il test passa
* cancella il wallet
* walletId `recurringWallet`
* operationType deleteWallet
* alla `WSServlet` arriva la request
```
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<EliminaContrattoRequest xmlns="http://www.setefi.it/wscontratti">
<codiceCommerciante>003441474</codiceCommerciante>
<trackID>recurringWallet</trackID>
</EliminaContrattoRequest>
</soap:Body>
</soap:Envelope>
```
authorizationstub risponde con
```
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<ns2:EliminaContrattoResponse xmlns:ns2="http://www.setefi.it/wscontratti">
<ns2:codiceCommerciante>003441474</ns2:codiceCommerciante>
<ns2:trackID>recurringWallet</ns2:trackID>
<ns2:esitoCodice>00</ns2:esitoCodice>
<ns2:esitoDescrizione>OK</ns2:esitoDescrizione>
</ns2:EliminaContrattoResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
```
**NOTA**: con lo stub abilitato, non serve creare e cancellare dei wallet fittizzi