Search in sources :

Example 1 with BulkPayment

use of net.petafuel.styx.core.xs2a.entities.BulkPayment in project styx by petafuel.

the class PaymentSerializer method xmlDeserialize.

public static InitializablePayment xmlDeserialize(Document sepaDocument, PaymentService paymentService) throws ParseException {
    ArrayList<SinglePayment> payments = new ArrayList<>();
    AccountReference debtorAccount = new AccountReference();
    debtorAccount.setName(sepaDocument.getCctInitiation().getPmtInfos().get(0).getDebtorName());
    debtorAccount.setIban(sepaDocument.getCctInitiation().getPmtInfos().get(0).getDebtorAccountIBAN());
    debtorAccount.setCurrency(Currency.EUR);
    Date requestedExecutionDate = new SimpleDateFormat(XS2AJsonKeys.DATE_FORMAT.value()).parse(sepaDocument.getCctInitiation().getPmtInfos().get(0).getRequestedExecutionDate());
    for (CreditTransferTransactionInformation ctti : sepaDocument.getCctInitiation().getPmtInfos().get(0).getCreditTransferTransactionInformationVector()) {
        String creditorAccountName = ctti.getCreditorName();
        String creditorAccountIdentifier = ctti.getCreditorIBAN();
        AccountReference creditorAccount = new AccountReference(creditorAccountIdentifier, AccountReference.Type.IBAN);
        creditorAccount.setName(creditorAccountName);
        creditorAccount.setCurrency(Currency.EUR);
        String amount = Double.toString(ctti.getAmount());
        String remittanceInformationUnstructured = ctti.getVwz();
        String endToEndIdentification = ctti.getEndToEndID();
        SinglePayment payment = new SinglePayment();
        payment.setInstructedAmount(new Amount(amount, Currency.EUR));
        payment.setCreditorAccount(creditorAccount);
        payment.setDebtorAccount(debtorAccount);
        payment.setRemittanceInformationUnstructured(remittanceInformationUnstructured);
        payment.setEndToEndIdentification(endToEndIdentification);
        payment.setRequestedExecutionDate(requestedExecutionDate);
        payments.add(payment);
    }
    if (paymentService.equals(PaymentService.BULK_PAYMENTS)) {
        BulkPayment bulkPayment = new BulkPayment();
        bulkPayment.setPayments(payments);
        bulkPayment.setDebtorAccount(debtorAccount);
        bulkPayment.setRequestedExecutionDate(requestedExecutionDate);
        return bulkPayment;
    }
    return payments.get(0);
}
Also used : Amount(net.petafuel.styx.core.xs2a.entities.Amount) ArrayList(java.util.ArrayList) CreditTransferTransactionInformation(net.petafuel.jsepa.model.CreditTransferTransactionInformation) AccountReference(net.petafuel.styx.core.xs2a.entities.AccountReference) BulkPayment(net.petafuel.styx.core.xs2a.entities.BulkPayment) SinglePayment(net.petafuel.styx.core.xs2a.entities.SinglePayment) SimpleDateFormat(java.text.SimpleDateFormat) Date(java.util.Date)

Example 2 with BulkPayment

use of net.petafuel.styx.core.xs2a.entities.BulkPayment in project styx by petafuel.

the class PaymentInitiationResource method initiateBulkPayment.

/**
 * Initiate multiple payments as bulk
 *
 * @param paymentTypeBean contains which payment product is used
 * @param bulkPaymentBody contains the request body as parsed json
 * @return 201 if successful
 * @throws BankRequestFailedException in case the communication between styx and aspsp was not successful
 */
@POST
@Path("/bulk-payments/{paymentProduct}")
@RequiresMandatoryHeader
@AcceptsPreStepAuth
public Response initiateBulkPayment(@BeanParam PaymentTypeBean paymentTypeBean, @Valid BulkPaymentInitiation bulkPaymentBody) throws BankRequestFailedException {
    // Debtors should all be the same within the payments, we take one of them
    Optional<SinglePayment> singlePayment = bulkPaymentBody.getPayments().stream().findAny();
    if (!singlePayment.isPresent()) {
        throw new StyxException(new ResponseEntity("No valid payment object was found within the bulk payments array", ResponseConstant.BAD_REQUEST, ResponseCategory.ERROR, ResponseOrigin.CLIENT));
    }
    AccountReference debtor = bulkPaymentBody.getDebtorAccount();
    BulkPayment bulkPayment = new BulkPayment();
    bulkPayment.setBatchBookingPreferred(bulkPaymentBody.getBatchBookingPreferred());
    bulkPayment.setDebtorAccount(debtor);
    bulkPayment.setPayments(bulkPaymentBody.getPayments());
    bulkPayment.setRequestedExecutionDate(bulkPaymentBody.getRequestedExecutionDate());
    XS2AFactoryInput xs2AFactoryInput = new XS2AFactoryInput();
    xs2AFactoryInput.setPayment(bulkPayment);
    xs2AFactoryInput.setPsu(getPsu());
    xs2AFactoryInput.setPaymentService(PaymentService.BULK_PAYMENTS);
    xs2AFactoryInput.setPaymentProduct(paymentTypeBean.getPaymentProduct());
    IOProcessor ioProcessor = new IOProcessor(getXS2AStandard());
    ioProcessor.modifyInput(xs2AFactoryInput);
    PISRequest bulkpaymentInitiationRequest = new PISRequestFactory().create(getXS2AStandard().getRequestClassProvider().paymentInitiation(), xs2AFactoryInput);
    bulkpaymentInitiationRequest.getHeaders().putAll(getAdditionalHeaders());
    ioProcessor.modifyRequest(bulkpaymentInitiationRequest, xs2AFactoryInput);
    bulkpaymentInitiationRequest.setTppRedirectPreferred(getRedirectPreferred());
    bulkpaymentInitiationRequest.setXrequestId(ThreadContext.get(RequestUUIDAdapter.REQUEST_UUID));
    InitiatedPayment initiatedPayment = getXS2AStandard().getPis().initiatePayment(bulkpaymentInitiationRequest);
    PaymentResponse paymentResponse = new PaymentResponse(initiatedPayment);
    SCAApproach approach = SCAHandler.decision(initiatedPayment);
    if (approach instanceof OAuth2) {
        paymentResponse.getLinks().getScaOAuth().setUrl(((OAuth2) approach).getAuthoriseLink());
    }
    LOG.info("Initiate bulk payment bic={} aspsp_name={} aspsp_id={} paymentId={}", getXS2AStandard().getAspsp().getBic(), getXS2AStandard().getAspsp().getName(), getXS2AStandard().getAspsp().getId(), paymentResponse.getPaymentId());
    AspspUrlMapper aspspUrlMapper = new AspspUrlMapper(PaymentService.BULK_PAYMENTS, paymentTypeBean.getPaymentProduct(), paymentResponse.getPaymentId(), null);
    paymentResponse.setLinks(aspspUrlMapper.map(paymentResponse.getLinks()));
    PersistentPayment.create(bulkpaymentInitiationRequest.getXrequestId(), paymentResponse.getPaymentId(), (String) getContainerRequestContext().getProperty(AbstractTokenFilter.class.getName()), getXS2AStandard().getAspsp().getBic(), paymentResponse.getTransactionStatus(), PaymentService.BULK_PAYMENTS, paymentTypeBean.getPaymentProduct());
    return Response.status(ResponseConstant.CREATED).entity(paymentResponse).build();
}
Also used : OAuth2(net.petafuel.styx.core.xs2a.sca.OAuth2) SCAApproach(net.petafuel.styx.core.xs2a.sca.SCAApproach) AspspUrlMapper(net.petafuel.styx.api.util.AspspUrlMapper) BulkPayment(net.petafuel.styx.core.xs2a.entities.BulkPayment) SinglePayment(net.petafuel.styx.core.xs2a.entities.SinglePayment) StyxException(net.petafuel.styx.api.exception.StyxException) PaymentResponse(net.petafuel.styx.api.v1.payment.entity.PaymentResponse) ResponseEntity(net.petafuel.styx.api.exception.ResponseEntity) PISRequest(net.petafuel.styx.core.xs2a.contracts.PISRequest) PISRequestFactory(net.petafuel.styx.core.xs2a.factory.PISRequestFactory) AbstractTokenFilter(net.petafuel.styx.api.filter.authentication.control.AbstractTokenFilter) XS2AFactoryInput(net.petafuel.styx.core.xs2a.factory.XS2AFactoryInput) InitiatedPayment(net.petafuel.styx.core.xs2a.entities.InitiatedPayment) AccountReference(net.petafuel.styx.core.xs2a.entities.AccountReference) IOProcessor(net.petafuel.styx.core.ioprocessing.IOProcessor) Path(javax.ws.rs.Path) AcceptsPreStepAuth(net.petafuel.styx.api.filter.authentication.boundary.AcceptsPreStepAuth) RequiresMandatoryHeader(net.petafuel.styx.api.filter.input.boundary.RequiresMandatoryHeader) POST(javax.ws.rs.POST)

Aggregations

AccountReference (net.petafuel.styx.core.xs2a.entities.AccountReference)2 BulkPayment (net.petafuel.styx.core.xs2a.entities.BulkPayment)2 SinglePayment (net.petafuel.styx.core.xs2a.entities.SinglePayment)2 SimpleDateFormat (java.text.SimpleDateFormat)1 ArrayList (java.util.ArrayList)1 Date (java.util.Date)1 POST (javax.ws.rs.POST)1 Path (javax.ws.rs.Path)1 CreditTransferTransactionInformation (net.petafuel.jsepa.model.CreditTransferTransactionInformation)1 ResponseEntity (net.petafuel.styx.api.exception.ResponseEntity)1 StyxException (net.petafuel.styx.api.exception.StyxException)1 AcceptsPreStepAuth (net.petafuel.styx.api.filter.authentication.boundary.AcceptsPreStepAuth)1 AbstractTokenFilter (net.petafuel.styx.api.filter.authentication.control.AbstractTokenFilter)1 RequiresMandatoryHeader (net.petafuel.styx.api.filter.input.boundary.RequiresMandatoryHeader)1 AspspUrlMapper (net.petafuel.styx.api.util.AspspUrlMapper)1 PaymentResponse (net.petafuel.styx.api.v1.payment.entity.PaymentResponse)1 IOProcessor (net.petafuel.styx.core.ioprocessing.IOProcessor)1 PISRequest (net.petafuel.styx.core.xs2a.contracts.PISRequest)1 Amount (net.petafuel.styx.core.xs2a.entities.Amount)1 InitiatedPayment (net.petafuel.styx.core.xs2a.entities.InitiatedPayment)1