Переглянути джерело

//tt pay v2

release_toaliyun_real
xhxu 4 роки тому
джерело
коміт
0eb2f31d4f
3 змінених файлів з 74 додано та 3 видалено
  1. +34
    -2
      mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java
  2. +39
    -0
      mallinkService/src/main/java/com/iformall/douyin/payv2/auth/CertificatesVerifier.java
  3. +1
    -1
      mallinkService/src/main/java/com/iformall/douyin/payv2/result/BaseTtPayResult.java

+ 34
- 2
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<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;

}

}

+ 39
- 0
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();
// }
// }

}

+ 1
- 1
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<T> implements Serializable {
public class BaseTtPayResult<T> implements Serializable {

/**
* 返回状态码.


Завантаження…
Відмінити
Зберегти