Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/ad 337 #513

Merged
merged 7 commits into from
Jan 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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