| @@ -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<String,Object> douyinPushOrder(@RequestBody Map param) { | |||
| logger.info("save douyinPushOrder:"+param); | |||
| public Map<String,Object> 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<String, Object> 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<String,Object> 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<String, Object> map = new HashMap(); | |||
| map.put("err_no",1001); | |||
| map.put("err_tips","未找到支付信息"); | |||
| return map; | |||
| } | |||
| } | |||
| @@ -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(); | |||
| // } | |||
| // } | |||
| } | |||
| @@ -20,7 +20,7 @@ import java.io.Serializable; | |||
| */ | |||
| @Data | |||
| @NoArgsConstructor | |||
| public abstract class BaseTtPayResult<T> implements Serializable { | |||
| public class BaseTtPayResult<T> implements Serializable { | |||
| /** | |||
| * 返回状态码. | |||