--- 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&currencycode=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