From 165f0301f0b8a6b3831255c504542f67c6ba090e Mon Sep 17 00:00:00 2001 From: xupei Date: Thu, 28 Mar 2024 15:07:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4callbackService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ai/da/service/CallBackService.java | 12 -- .../da/service/impl/CallBackServiceImpl.java | 159 ------------------ 2 files changed, 171 deletions(-) delete mode 100644 src/main/java/com/ai/da/service/CallBackService.java delete mode 100644 src/main/java/com/ai/da/service/impl/CallBackServiceImpl.java diff --git a/src/main/java/com/ai/da/service/CallBackService.java b/src/main/java/com/ai/da/service/CallBackService.java deleted file mode 100644 index 39efb1eb..00000000 --- a/src/main/java/com/ai/da/service/CallBackService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.ai.da.service; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -public interface CallBackService { - - Boolean doGet(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException; -} diff --git a/src/main/java/com/ai/da/service/impl/CallBackServiceImpl.java b/src/main/java/com/ai/da/service/impl/CallBackServiceImpl.java deleted file mode 100644 index 7c5fd42f..00000000 --- a/src/main/java/com/ai/da/service/impl/CallBackServiceImpl.java +++ /dev/null @@ -1,159 +0,0 @@ -package com.ai.da.service.impl; - -import com.ai.da.common.config.PayPalClient; -import com.ai.da.common.constant.PayPalCheckoutConstant; -import com.ai.da.common.utils.paypalRequest.WebhookVerifyRequest; -import com.ai.da.service.CallBackService; -import com.ai.da.service.PayPalCheckoutService; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.paypal.api.payments.Event; -import com.paypal.base.Constants; -import com.paypal.base.SDKUtil; -import com.paypal.base.rest.APIContext; -import com.paypal.base.rest.PayPalRESTException; -import com.paypal.http.HttpResponse; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.SignatureException; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; - -import static com.ai.da.common.constant.PayPalCheckoutConstant.MODE; - -// #Validate Webhook Sample -// -// This sample code demonstrates how to validate a webhook received on your -// web server. This sample assumes that you use the java servlet, which returns -// the HttpServletRequest object. However, you can modify this code to -// your specific case. -// - -@Slf4j -@Service -public class CallBackServiceImpl implements CallBackService { - - @Value("${paypal.client-id}") - private String clientId; - - @Value("${paypal.client-secret}") - private String clientSecret; - - @Resource - private PayPalClient payPalClient; - - @Resource - private PayPalCheckoutService payPalCheckoutService; - - @Override - public Boolean doGet(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - return doPost(req, resp); - } - - // ##Validate Webhook - protected Boolean doPost(HttpServletRequest req, HttpServletResponse resp) - throws ServletException, IOException { - try { - String body = getBody(req); - Map webhookEvent = new ObjectMapper().readValue(body, Map.class); - - HashMap webhookRequest = new HashMap<>(); - webhookRequest.put("auth_algo",SDKUtil.validateAndGet(getHeadersInfo(req), "PAYPAL-AUTH-ALGO")); - webhookRequest.put("cert_url",SDKUtil.validateAndGet(getHeadersInfo(req), "PAYPAL-CERT-URL")); - webhookRequest.put("transmission_id",SDKUtil.validateAndGet(getHeadersInfo(req), "PAYPAL-TRANSMISSION-ID")); - webhookRequest.put("transmission_sig",SDKUtil.validateAndGet(getHeadersInfo(req), "PAYPAL-TRANSMISSION-SIG")); - webhookRequest.put("transmission_time",SDKUtil.validateAndGet(getHeadersInfo(req), "PAYPAL-TRANSMISSION-TIME")); - webhookRequest.put("webhook_id",PayPalCheckoutConstant.WEBHOOK_ID); - webhookRequest.put("webhook_event",webhookEvent); - - WebhookVerifyRequest webhookVerifyRequest = new WebhookVerifyRequest(); - webhookVerifyRequest.authorization(payPalCheckoutService.getOAuth()); - webhookVerifyRequest.requestBody(webhookRequest); - // 验签 - HttpResponse verified = payPalClient.client(MODE, clientId, clientSecret).execute(webhookVerifyRequest); - boolean verifyResult = verified.result().get("verification_status").toString().equals("SUCCESS"); - if (verifyResult){ - // ### Api Context - APIContext apiContext = new APIContext(clientId, clientSecret, PayPalCheckoutConstant.MODE); - - // Set the webhookId that you received when you created this webhook. - apiContext.addConfiguration(Constants.PAYPAL_WEBHOOK_ID, PayPalCheckoutConstant.WEBHOOK_ID); - Boolean result = Event.validateReceivedEvent(apiContext, getHeadersInfo( - req), body); - log.info("Webhook Validated: " + result); - - if (result){ - // 处理订单数据 - LinkedHashMap> webhookEventMap = (LinkedHashMap>) webhookEvent; - String orderId = webhookEventMap.get("resource").get("id"); - payPalCheckoutService.processOrder(orderId); - return Boolean.TRUE; - } - - } - } catch (PayPalRESTException | InvalidKeyException | NoSuchAlgorithmException | SignatureException e) { - log.error(e.getMessage()); - } - return Boolean.FALSE; - } - - // Simple helper method to help you extract the headers from HttpServletRequest object. - private static Map getHeadersInfo(HttpServletRequest request) { - Map map = new HashMap(); - @SuppressWarnings("rawtypes") - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String key = (String) headerNames.nextElement(); - String value = request.getHeader(key); - map.put(key, value); - } - return map; - } - - // Simple helper method to fetch request data as a string from HttpServletRequest object. - private static String getBody(HttpServletRequest request) throws IOException { - String body; - StringBuilder stringBuilder = new StringBuilder(); - BufferedReader bufferedReader = null; - try { - InputStream inputStream = request.getInputStream(); - if (inputStream != null) { - bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); - char[] charBuffer = new char[128]; - int bytesRead = -1; - while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { - stringBuilder.append(charBuffer, 0, bytesRead); - } - } else { - stringBuilder.append(""); - } - } catch (IOException ex) { - throw ex; - } finally { - if (bufferedReader != null) { - try { - bufferedReader.close(); - } catch (IOException ex) { - throw ex; - } - } - } - body = stringBuilder.toString(); - log.info("回调参数 ===> {}", body); - return body; - } -}