From 2b47bf95cb1161f338a6db50e74f5aaf4deb66da Mon Sep 17 00:00:00 2001 From: egan Date: Sat, 13 Jan 2024 19:45:08 +0800 Subject: [PATCH] =?UTF-8?q?#I8VQM7=20paypal=20webhook=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E9=AA=8C=E7=AD=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/demo/controller/PayPalPayController.java | 4 +++- .../pay/paypal/api/PayPalConfigStorage.java | 15 ++++++++++++++- .../pay/paypal/v2/api/PayPalPayService.java | 9 +++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayPalPayController.java b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayPalPayController.java index e40d037..01af6e9 100644 --- a/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayPalPayController.java +++ b/pay-java-demo/src/main/java/com/egzosn/pay/demo/controller/PayPalPayController.java @@ -41,8 +41,10 @@ public class PayPalPayController { @PostConstruct public void init() { PayPalConfigStorage storage = new PayPalConfigStorage(); - storage.setClientID("AZDS0IhUZvJTO99unlvSDMfbZIP-p-UecYXZdJoweha9LFuqKXKcQIGZgfVaX6oGiAOJAUuJD7JwyTl1"); + storage.setClientId("AZDS0IhUZvJTO99unlvSDMfbZIP-p-UecYXZdJoweha9LFuqKXKcQIGZgfVaX6oGiAOJAUuJD7JwyTl1"); storage.setClientSecret("EK2YaOrw3oLSDWIRzvb9BWGTjiPPhY1fFUu5ylhUsGYLc_h_dlpJ0hr_LDEkbO9MyKP2P83YcywbPaem"); + //webhook回调时验签使用必须https://developer.paypal.com/dashboard/webhooksSimulator + storage.setWebHookId("AZDS0IhUZvJTO99unlvSDMfbZIP"); storage.setTest(true); //发起付款后的页面转跳地址 storage.setReturnUrl("http://www.egzosn.com/payPal/payBack.json"); diff --git a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalConfigStorage.java b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalConfigStorage.java index 7c267dc..69c5a89 100644 --- a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalConfigStorage.java +++ b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/api/PayPalConfigStorage.java @@ -16,6 +16,12 @@ public class PayPalConfigStorage extends BasePayConfigStorage { private String clientId; + /** + * 回调验签使用 + */ + private String webHookId; + + @Override @Deprecated public String getAppid() { @@ -86,7 +92,6 @@ public class PayPalConfigStorage extends BasePayConfigStorage { * 获取取消页面的url *
      * 注意:这里不是异步回调的通知
-     * IPN 地址设置的路径:https://developer.paypal.com/developer/ipnSimulator/
      * 
* * @return 取消页面的url @@ -98,4 +103,12 @@ public class PayPalConfigStorage extends BasePayConfigStorage { public PayPalConfigStorage() { setAccessTokenLock(new ReentrantLock()); } + + public String getWebHookId() { + return webHookId; + } + + public void setWebHookId(String webHookId) { + this.webHookId = webHookId; + } } diff --git a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/v2/api/PayPalPayService.java b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/v2/api/PayPalPayService.java index 0679e6a..e6cce20 100644 --- a/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/v2/api/PayPalPayService.java +++ b/pay-java-paypal/src/main/java/com/egzosn/pay/paypal/v2/api/PayPalPayService.java @@ -62,7 +62,7 @@ import com.egzosn.pay.paypal.v2.utils.PayPalUtil; * 贝宝支付配置存储 * * @author egan - * + *

* email egzosn@gmail.com * date 2021-1-16 ‏‎22:15:09 */ @@ -177,6 +177,7 @@ public class PayPalPayService extends BasePayService implem /** * 保留IPN的校验方式 + * * @param noticeParams 参数 * @return 结果 */ @@ -191,6 +192,7 @@ public class PayPalPayService extends BasePayService implem return "VERIFIED".equals(resp); } + @Override public boolean verify(NoticeParams noticeParams) { @@ -208,8 +210,7 @@ public class PayPalPayService extends BasePayService implem } InputStream inputStream = clientCertificateResponseEntity.getBody(); Collection clientCerts = PayPalUtil.getCertificateFromStream(inputStream); - Map body = noticeParams.getBody(); - String webHookId = (String) body.get(Constants.ID); + String webHookId = payConfigStorage.getWebHookId(); String actualSignatureEncoded = noticeParams.getHeader(Constants.PAYPAL_HEADER_TRANSMISSION_SIG); String authAlgo = noticeParams.getHeader(Constants.PAYPAL_HEADER_AUTH_ALGO); String transmissionId = noticeParams.getHeader(Constants.PAYPAL_HEADER_TRANSMISSION_ID); @@ -466,7 +467,7 @@ public class PayPalPayService extends BasePayService implem @Override public Map ordersCapture(String tradeNo) { final HttpHeader header = authHeader(); - header.addHeader(new BasicHeader("Content-Type","application/json")); + header.addHeader(new BasicHeader("Content-Type", "application/json")); JSONObject ordersCaptureInfo = getHttpRequestTemplate().postForObject(getReqUrl(PayPalTransactionType.ORDERS_CAPTURE), header, JSONObject.class, tradeNo); // String captureId = ordersCaptureInfo.getJSONArray("purchaseUnits").getJSONObject(0).getJSONObject("payments").getJSONArray("captures").getJSONObject(0).getString("id"); return ordersCaptureInfo;