From 0eb2f31d4fd1c1e1817b28258b0f451030c2b96f Mon Sep 17 00:00:00 2001 From: xhxu Date: Tue, 31 May 2022 09:44:36 +0800 Subject: [PATCH] //tt pay v2 --- .../controller/WxOrderController.java | 36 ++++++++++++++++- .../payv2/auth/CertificatesVerifier.java | 39 +++++++++++++++++++ .../douyin/payv2/result/BaseTtPayResult.java | 2 +- 3 files changed, 74 insertions(+), 3 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 4c9595f55..833fb49f0 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -1,6 +1,7 @@ package com.iformall.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.binarywang.wxpay.bean.ecommerce.SignatureHeader; import com.github.pagehelper.PageInfo; import com.iformall.annotation.AuthIgnore; import com.iformall.common.ErrorCode; @@ -17,6 +18,7 @@ import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; import com.iformall.enums.*; import com.iformall.exception.MallinkException; +import com.iformall.interceptor.BodyReaderHttpServletRequestWrapper; import com.iformall.service.*; import com.iformall.service.order.OrderFactory; import com.iformall.service.order.entity.WxComposeOrder; @@ -35,6 +37,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.*; @RestController @@ -140,8 +143,16 @@ public class WxOrderController extends BaseController { @AuthIgnore @ApiOperation(value = "抖音支付2.0与下单回调推送订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") @PostMapping("douyinPushOrder") - public Map douyinPushOrder(@RequestBody Map param) { - logger.info("save douyinPushOrder:"+param); + public Map douyinPushOrder(HttpServletRequest request) { + SignatureHeader header = new SignatureHeader(); + header.setTimeStamp(request.getHeader("Byte-Timestamp")); + header.setNonce(request.getHeader("Byte-Nonce-Str")); + header.setSigned(request.getHeader("Byte-Signature")); + + logger.info("支付2.0预下单回调---header{}"+header.toString()); + + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); + logger.info("支付2.0预下单回调---body{}"+body); Map map = new HashMap(); map.put("err_no",1000); @@ -705,4 +716,25 @@ public class WxOrderController extends BaseController { return new ResultData(refundOrder); } + @AuthIgnore + @ApiOperation(value = "抖音支付2.0与退款回调推送订单", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") + @PostMapping("douyinRefundOrder") + public Map douyinRefundOrder(HttpServletRequest request) { + SignatureHeader header = new SignatureHeader(); + header.setTimeStamp(request.getHeader("Byte-Timestamp")); + header.setNonce(request.getHeader("Byte-Nonce-Str")); + header.setSigned(request.getHeader("Byte-Signature")); + + logger.info("支付2.0预下单回调---header{}"+header.toString()); + + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); + logger.info("支付2.0预下单回调---body{}"+body); + + Map map = new HashMap(); + map.put("err_no",1001); + map.put("err_tips","未找到支付信息"); + return map; + + } + } diff --git a/mallinkService/src/main/java/com/iformall/douyin/payv2/auth/CertificatesVerifier.java b/mallinkService/src/main/java/com/iformall/douyin/payv2/auth/CertificatesVerifier.java index 3fee28133..dcbfd0389 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/payv2/auth/CertificatesVerifier.java +++ b/mallinkService/src/main/java/com/iformall/douyin/payv2/auth/CertificatesVerifier.java @@ -1,7 +1,10 @@ package com.iformall.douyin.payv2.auth; +import com.iformall.douyin.payv2.util.PemUtils; import me.chanjar.weixin.common.error.WxRuntimeException; +import java.io.ByteArrayInputStream; +import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.security.*; import java.util.Base64; @@ -30,4 +33,40 @@ public class CertificatesVerifier implements Verifier { } } +// public static void main(String[] args) { +// String pubKey = "-----BEGIN PUBLIC KEY-----\n" + +// "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv8jSFriZ6l5vv0xVcpFJ\n" + +// "NxihPh3j6tVKrU2FBythCstyr/CwdpAp9AGXvcaW2x2kKiOMXXaRDo6OysjggsxK\n" + +// "5hh1fWDE3ML4Wi5tfAV64pvj8wn5XeHXGKtXcKD/ASQmUGnMKI0g8i2REm3Q7gzy\n" + +// "JH35URh+tU8wI2v8mDY9OCZ7Hmu8ImW3pibyYRYK0CEpa31+65gVaTeoaPlqTKR0\n" + +// "rwgxZM5nFcXxGtiTsH0O1GAJBqWpyVeOqH19vEVB/bROEb21bf65ZYhac2Z1lzWq\n" + +// "MW+/4knIDg6EH3/xZWFPPwAFZgpfkSQES/twPkN/59cZ8SfTwJ84k/KUOApvkihM\n" + +// "uQIDAQAB\n" + +// "-----END PUBLIC KEY-----"; +// String timestamp = "1653906762"; +// String nonce = "pztVmu9EhPgCv9Dvw31t68U9WhMcLXCb"; +// String httpBody = "{\"err_no\":0,\"data\":{\"create_order_callback\":\"https://ctest.malls.iformall.com/C/api/order/douyinPushOrder\",\"refund_callback\":\"https://ctest.malls.iformall.com/C/api/order/douyinRefundOrder\",\"delivery_qrcode_redirect\":\"\"},\"resp_extra\":{\"logid\":\"202205301832420101581160381B3C09C0\"},\"err_tips\":\"success\"}"; +// String signStr = "pZEQga7EpGI+NXEznLNZROViIBxwWaofnlstthQsu8MZiuTRUtool2SQhfLHkXwYzj5O8yj+luTbFUrhTfX+BzvcR3+fGrqMtgqGWp86a1hAg4e4pvoTHd5PAxUGRDb/gGxPoxLDgrS6cLKusdGi6mmwJbERveD9ThNV1RQGQo/BM3BeImr3fYdJ/ZU67iVkP6SEWkqRiEJhnQMaavy/B4LK3xI0A5BhWlGbhGUIqumLT903tIOhofXGA6PQJbDiU38J5EtMj/Z7l6+IXtbA/KO0IWbIZ96KFs6e8ZE6H18Xn7b0J7KDTjTelMt7iXczrLU2/e3QEcfn2/7+7DIRMQ=="; +// +// StringBuffer buffer = new StringBuffer(); +// buffer.append(timestamp).append("\n"); +// buffer.append(nonce).append("\n"); +// buffer.append(httpBody).append("\n"); +// try { +// Signature sign = Signature.getInstance("SHA256withRSA"); +// sign.initVerify(PemUtils.loadPublicKey(new ByteArrayInputStream(pubKey.getBytes("utf-8")))); +// sign.update(buffer.toString().getBytes(StandardCharsets.UTF_8)); +// boolean verify = sign.verify(Base64.getDecoder().decode(signStr.getBytes(StandardCharsets.UTF_8))); +// System.out.println("-------"+verify); +// } catch (NoSuchAlgorithmException e) { +// e.printStackTrace(); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } catch (SignatureException e) { +// e.printStackTrace(); +// } catch (InvalidKeyException e) { +// e.printStackTrace(); +// } +// } + } diff --git a/mallinkService/src/main/java/com/iformall/douyin/payv2/result/BaseTtPayResult.java b/mallinkService/src/main/java/com/iformall/douyin/payv2/result/BaseTtPayResult.java index 3eeb545d6..06ed10e24 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/payv2/result/BaseTtPayResult.java +++ b/mallinkService/src/main/java/com/iformall/douyin/payv2/result/BaseTtPayResult.java @@ -20,7 +20,7 @@ import java.io.Serializable; */ @Data @NoArgsConstructor -public abstract class BaseTtPayResult implements Serializable { +public class BaseTtPayResult implements Serializable { /** * 返回状态码.