Skip to content

Commit

Permalink
Merge pull request #513 from Adyen/feature/AD-337
Browse files Browse the repository at this point in the history
Feature/ad 337
  • Loading branch information
kpieloch authored Jan 30, 2025
2 parents 30224ce + b907ba4 commit 904d4e1
Show file tree
Hide file tree
Showing 20 changed files with 748 additions and 203 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.adyen.v6.controllers.checkout;

import com.adyen.model.checkout.GooglePayDetails;
import de.hybris.platform.acceleratorservices.urlresolver.SiteBaseUrlResolutionService;
import de.hybris.platform.basecommerce.model.site.BaseSiteModel;
import de.hybris.platform.site.BaseSiteService;

import static com.adyen.v6.constants.AdyenControllerConstants.CHECKOUT_RESULT_URL;
import static com.adyen.v6.constants.AdyenControllerConstants.SUMMARY_CHECKOUT_PREFIX;

public abstract class AdyenExpressCheckoutControllerBase {

protected String getReturnUrl(String paymentMethod) {
String url;
if (GooglePayDetails.TypeEnum.GOOGLEPAY.getValue().equals(paymentMethod)) {
//Google Pay will only use returnUrl if redirected to 3DS authentication
url = SUMMARY_CHECKOUT_PREFIX + "/authorise-3d-adyen-response";
} else {
url = SUMMARY_CHECKOUT_PREFIX + CHECKOUT_RESULT_URL;
}
BaseSiteModel currentBaseSite = getBaseSiteService().getCurrentBaseSite();
return getSiteBaseUrlResolutionService().getWebsiteUrlForSite(currentBaseSite, true, url);
}

abstract public BaseSiteService getBaseSiteService();

abstract public SiteBaseUrlResolutionService getSiteBaseUrlResolutionService();
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@Controller
@RequestMapping("/express-checkout/google/")
public class AdyenGooglePayExpressCheckoutController {
private static final Logger LOG = Logger.getLogger(AdyenApplePayExpressCheckoutController.class);
private static final Logger LOG = Logger.getLogger(AdyenGooglePayExpressCheckoutController.class);

@Autowired
private AdyenExpressCheckoutFacade adyenExpressCheckoutFacade;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,16 @@
import com.adyen.model.checkout.PayPalDetails;
import com.adyen.model.checkout.PaymentRequest;
import com.adyen.model.checkout.PaymentResponse;
import com.adyen.service.exception.ApiException;
import com.adyen.v6.constants.Adyenv6coreConstants;
import com.adyen.v6.facades.AdyenExpressCheckoutFacade;
import com.adyen.v6.facades.AdyenPayPalExpressCheckoutFacade;
import com.adyen.v6.request.PayPalExpressCartRequest;
import com.adyen.v6.request.PayPalExpressPDPRequest;
import com.adyen.v6.request.PayPalExpressSubmitPDPRequest;
import com.adyen.v6.response.PayPalExpressSubmitResponse;
import de.hybris.platform.acceleratorservices.urlresolver.SiteBaseUrlResolutionService;
import de.hybris.platform.acceleratorstorefrontcommons.security.GUIDCookieStrategy;
import de.hybris.platform.site.BaseSiteService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
Expand All @@ -21,46 +26,94 @@

@Controller
@RequestMapping("/express-checkout/paypal/")
public class AdyenPayPalExpressCheckoutController {
private static final Logger LOG = Logger.getLogger(AdyenApplePayExpressCheckoutController.class);
public class AdyenPayPalExpressCheckoutController extends AdyenExpressCheckoutControllerBase {
private static final Logger LOG = Logger.getLogger(AdyenPayPalExpressCheckoutController.class);

@Autowired
private AdyenExpressCheckoutFacade adyenExpressCheckoutFacade;
private AdyenPayPalExpressCheckoutFacade adyenPayPalExpressCheckoutFacade;

@Autowired
private GUIDCookieStrategy guidCookieStrategy;

@Autowired
private SiteBaseUrlResolutionService siteBaseUrlResolutionService;

@Autowired
private BaseSiteService baseSiteService;

@PostMapping("submit/PDP")
public ResponseEntity onSubmitPDP(final HttpServletRequest request, final HttpServletResponse response, @RequestBody PayPalExpressSubmitPDPRequest payPalSubmitRequest) throws Exception {
PayPalDetails payPalDetails = payPalSubmitRequest.getPayPalDetails();
PaymentRequest paymentRequest = new PaymentRequest();
payPalDetails.setType(PayPalDetails.TypeEnum.PAYPAL);
payPalDetails.setSubtype(PayPalDetails.SubtypeEnum.EXPRESS);

paymentRequest.setPaymentMethod(new CheckoutPaymentMethod(payPalDetails));
paymentRequest.setReturnUrl(getReturnUrl(PayPalDetails.TypeEnum.PAYPAL.getValue()));

try {
PayPalExpressSubmitResponse paymentResponse = adyenPayPalExpressCheckoutFacade.onPayPalPDPSubmit(paymentRequest, payPalSubmitRequest.getProductCode());
return new ResponseEntity<>(paymentResponse, HttpStatus.OK);

} catch (ApiException e){
LOG.error(e.getError());
LOG.error(e.getMessage());

return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}

}

@PostMapping("submit/cart")
public ResponseEntity onSubmitCart(final HttpServletRequest request, final HttpServletResponse response, @RequestBody PayPalDetails payPalDetails) throws Exception {
PaymentRequest paymentRequest = new PaymentRequest();
payPalDetails.setType(PayPalDetails.TypeEnum.PAYPAL);
payPalDetails.setSubtype(PayPalDetails.SubtypeEnum.EXPRESS);

paymentRequest.setPaymentMethod(new CheckoutPaymentMethod(payPalDetails));
paymentRequest.setReturnUrl(getReturnUrl(PayPalDetails.TypeEnum.PAYPAL.getValue()));

try {
PaymentResponse paymentResponse = adyenPayPalExpressCheckoutFacade.onPayPalCartSubmit(paymentRequest);
return new ResponseEntity<>(paymentResponse, HttpStatus.OK);

} catch (ApiException e){
LOG.error(e.getError());
LOG.error(e.getMessage());

return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}

}

@PostMapping("PDP")
public ResponseEntity payPalExpressPDP(final HttpServletRequest request, final HttpServletResponse response, @RequestBody PayPalExpressPDPRequest paypalExpressPDPRequest) throws Exception {

PaymentRequest paymentRequest = getPaymentRequest(paypalExpressPDPRequest);

PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutPDP(paypalExpressPDPRequest.getProductCode(),
paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_PAYPAL, paypalExpressPDPRequest.getAddressData(), request);
adyenPayPalExpressCheckoutFacade.onPayPalAuthorizedPDP(paypalExpressPDPRequest.getCartGuid(),
paypalExpressPDPRequest.getAddressData(), Adyenv6coreConstants.PAYMENT_METHOD_PAYPAL);

guidCookieStrategy.setCookie(request, response);

return new ResponseEntity<>(paymentsResponse, HttpStatus.OK);
return ResponseEntity.ok().build();
}

@PostMapping("cart")
public ResponseEntity paypalCartExpressCheckout(final HttpServletRequest request, final HttpServletResponse response, @RequestBody PayPalExpressCartRequest paypalExpressCartRequest) throws Exception {

PaymentRequest paymentRequest = getPaymentRequest(paypalExpressCartRequest);

PaymentResponse paymentsResponse = adyenExpressCheckoutFacade.expressCheckoutCart(paymentRequest, Adyenv6coreConstants.PAYMENT_METHOD_PAYPAL,
paypalExpressCartRequest.getAddressData(), request);
adyenPayPalExpressCheckoutFacade.onPayPalAuthorizedCart(paypalExpressCartRequest.getAddressData(), Adyenv6coreConstants.PAYMENT_METHOD_PAYPAL);

guidCookieStrategy.setCookie(request, response);

return new ResponseEntity<>(paymentsResponse, HttpStatus.OK);
return ResponseEntity.ok().build();
}

private static <T extends PayPalExpressCartRequest> PaymentRequest getPaymentRequest(T request) {
private <T extends PayPalExpressCartRequest> PaymentRequest getPaymentRequest(T request) {
PaymentRequest paymentRequest = new PaymentRequest();
PayPalDetails paypalDetails = request.getPayPalDetails();
paypalDetails.setType(PayPalDetails.TypeEnum.PAYPAL);
paypalDetails.setSubtype(PayPalDetails.SubtypeEnum.EXPRESS);
paymentRequest.setPaymentMethod(new CheckoutPaymentMethod(paypalDetails));
paymentRequest.setReturnUrl(getReturnUrl(PayPalDetails.TypeEnum.PAYPAL.getValue()));
return paymentRequest;
}

Expand All @@ -69,4 +122,14 @@ private static <T extends PayPalExpressCartRequest> PaymentRequest getPaymentReq
public void adyenComponentExceptionHandler(Exception e) {
LOG.error("Exception during PaypalExpress processing", e);
}

@Override
public BaseSiteService getBaseSiteService() {
return baseSiteService;
}

@Override
public SiteBaseUrlResolutionService getSiteBaseUrlResolutionService() {
return siteBaseUrlResolutionService;
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.adyen.v6.request;

public class PayPalExpressPDPRequest extends PayPalExpressCartRequest {
private String productCode;
private String cartGuid;

public String getProductCode() {
return productCode;
public String getCartGuid() {
return cartGuid;
}

public void setProductCode(String productCode) {
this.productCode = productCode;
public void setCartGuid(String cartGuid) {
this.cartGuid = cartGuid;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.adyen.v6.request;

import com.adyen.model.checkout.PayPalDetails;

import java.io.Serializable;

public class PayPalExpressSubmitPDPRequest implements Serializable {
private PayPalDetails payPalDetails;
private String productCode;

public PayPalDetails getPayPalDetails() {
return payPalDetails;
}

public void setPayPalDetails(PayPalDetails payPalDetails) {
this.payPalDetails = payPalDetails;
}

public String getProductCode() {
return productCode;
}

public void setProductCode(String productCode) {
this.productCode = productCode;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
productCode: '${product.code}',
applePayMerchantName: '${applePayMerchantName}',
applePayMerchantId: '${applePayMerchantIdentifier}',
payPalIntent: '${paypalIntent}',
payPalExpressEnabledOnProduct: ${expressPaymentConfig.paypalExpressEnabledOnProduct},
payPalExpressEnabledOnCart: ${expressPaymentConfig.paypalExpressEnabledOnCart},
googlePayExpressEnabledOnCart: ${expressPaymentConfig.googlePayExpressEnabledOnCart},
applePayExpressEnabledOnCart: ${expressPaymentConfig.applePayExpressEnabledOnCart},
googlePayExpressEnabledOnProduct: ${expressPaymentConfig.googlePayExpressEnabledOnProduct},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@
<div class="adyen-apple-pay-button">
</div>
</div>
<div class="col-sm-4 col-md-3 pull-right">
<div class="adyen-paypal-button">
</div>
</div>
</div>
</div>
</c:if>
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
<div class="adyen-google-pay-button">
</div>
<div class="adyen-apple-pay-button">
</div>
<div class="adyen-paypal-button">
</div>
Loading

0 comments on commit 904d4e1

Please sign in to comment.