删除callbackService
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -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<String, Object> 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<HashMap> 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<String,LinkedHashMap<String,String>> webhookEventMap = (LinkedHashMap<String,LinkedHashMap<String,String>>) 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<String, String> getHeadersInfo(HttpServletRequest request) {
|
|
||||||
Map<String, String> map = new HashMap<String, String>();
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user