Browse Source

feat : sdk调试修改

bilingfeng 2 years ago
parent
commit
76161403aa

+ 9 - 14
game-module/game-sdk/src/main/java/com/zanxiang/sdk/controller/AppletController.java

@@ -6,7 +6,6 @@ import com.zanxiang.sdk.annotation.UnSignCheck;
 import com.zanxiang.sdk.domain.params.MiniAppPayParam;
 import com.zanxiang.sdk.domain.vo.GameAppletVO;
 import com.zanxiang.sdk.service.GameAppletService;
-import com.zanxiang.sdk.service.OrderPayService;
 import com.zanxiang.sdk.service.PayApplicationService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -17,7 +16,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -33,9 +31,6 @@ import java.io.IOException;
 @Slf4j
 public class AppletController {
 
-    @Resource
-    private OrderPayService orderPayService;
-
     @Autowired
     private GameAppletService gameAppletService;
 
@@ -63,17 +58,17 @@ public class AppletController {
     }
 
     @UnSignCheck
-    @ApiOperation(value = "微信支付回调(小程序独立)")
-    @RequestMapping(value = "/pay/applet/wxPayNotify", method = RequestMethod.POST)
-    public String wxAppletPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        return orderPayService.appletNotify(request, response);
-    }
-
-    @UnSignCheck
-    @ApiOperation(value = "支付参数生成(小程序独立)")
+    @ApiOperation(value = "商城小程序支付")
     @PostMapping(value = "/pay/applet/create")
     public ResultMap create(@Validated @RequestBody MiniAppPayParam payParam, HttpServletRequest request) {
         log.error("接收到支付请求, payParam : {}", JsonUtil.toString(payParam));
-        return payApplicationService.miniAppPay(payParam, request);
+        return payApplicationService.appletStorePay(payParam, request);
+    }
+
+    @UnSignCheck
+    @ApiOperation(value = "商城小程序支付回调")
+    @RequestMapping(value = "/pay/applet/wxPayNotify", method = RequestMethod.POST)
+    public String wxAppletPayNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        return payApplicationService.appletStoreNotify(request, response);
     }
 }

+ 1 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/domain/dto/GamePayWayDTO.java

@@ -56,7 +56,7 @@ public class GamePayWayDTO {
     private String merchantNo;
 
     /**
-     * 支付配置(米大师)
+     * 支付配置(米大师, 客服支付)
      */
     private String payConfig;
 }

+ 15 - 4
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/GameAppletServiceImpl.java

@@ -2,6 +2,7 @@ package com.zanxiang.sdk.service.Impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.module.util.JsonUtil;
@@ -78,7 +79,7 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     public String appletMsg(String appId, String signature, String timestamp, String nonce, String postData) throws Exception {
         log.error("接收到事件消息, appId : {}, signature : {}, timestamp : {}, nonce : {}, postData : {}",
                 appId, signature, timestamp, nonce, postData);
-        String result = "success";
+        String result = HttpStatusEnum.SUCCESS.getMsg();
         if (Strings.isBlank(postData)) {
             return result;
         }
@@ -115,10 +116,20 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
     private String sendCustomMessage(GameApplet gameApplet, String openId, Order order) {
         //查询订单支付方式
         GamePayWayDTO gamePayWayDTO = gamePayWayService.getById(order.getGamePayWayId());
+        Map<String, String> payConfigMap = JsonUtil.toMap(gamePayWayDTO.getPayConfig(), Map.class, String.class);
+        //h5支付页面地址
+        String h5Url = payConfigMap.get("url");
+        //客服支付链接显示图片地址
+        String thumbUrl = payConfigMap.get("thumb_url");
+        //支付配置参数判断
+        if (Strings.isBlank(h5Url) || Strings.isBlank(thumbUrl)) {
+            log.error("h5支付页面地址或者支付链接显示图片地址不存在, gamePayWayDTO : {}", JsonUtil.toString(gamePayWayDTO));
+            return HttpStatusEnum.SUCCESS.getMsg();
+        }
         //订单金额
         BigDecimal amount = order.getAmount();
         //构造跳转链接url
-        URI url = UriComponentsBuilder.fromHttpUrl("http://corp.complaint.zanxiangnet.com/html/wechatPay/index.html")
+        URI url = UriComponentsBuilder.fromHttpUrl(h5Url)
                 .queryParam("appId", gamePayWayDTO.getAppId())
                 .queryParam("orderId", order.getOrderId())
                 .queryParam("amount", amount)
@@ -129,7 +140,7 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
         linkMap.put("title", "点我充值");
         linkMap.put("description", "点我充值" + amount + "元,用于购买" + amount + "元档充值");
         linkMap.put("url", url);
-        linkMap.put("thumb_url", "https://book.zanxiangnet.com/qc-tip/1.jpg");
+        linkMap.put("thumb_url", thumbUrl);
         //客服消息参数构造
         Map<String, Object> paramMap = new HashMap<>(3);
         paramMap.put("touser", openId);
@@ -144,7 +155,7 @@ public class GameAppletServiceImpl extends ServiceImpl<GameAppletMapper, GameApp
         // 发送请求
         String result = restTemplate.postForObject(uri, paramMap, String.class);
         log.error("客服消息发送结果, result : {}", result);
-        return "success";
+        return HttpStatusEnum.SUCCESS.getMsg();
     }
 
     @Override

+ 4 - 51
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/OrderPayServiceImpl.java

@@ -2,7 +2,6 @@ package com.zanxiang.sdk.service.Impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zanxiang.common.domain.ResultMap;
-import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.enums.OrderStateEnum;
 import com.zanxiang.common.enums.PayDeviceEnum;
 import com.zanxiang.common.exception.BaseException;
@@ -11,28 +10,24 @@ import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.web.util.IpUtil;
 import com.zanxiang.mybatis.entity.Order;
 import com.zanxiang.mybatis.entity.OrderPayParam;
-import com.zanxiang.mybatis.entity.PayMerchant;
 import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
 import com.zanxiang.sdk.domain.dto.GamePayWayDTO;
 import com.zanxiang.sdk.domain.params.ProductPayParam;
 import com.zanxiang.sdk.domain.params.UserData;
 import com.zanxiang.sdk.domain.vo.PayParamVO;
 import com.zanxiang.sdk.enums.PayTypeEnum;
-import com.zanxiang.sdk.service.*;
+import com.zanxiang.sdk.service.GamePayWayService;
+import com.zanxiang.sdk.service.OrderPayParamService;
+import com.zanxiang.sdk.service.OrderPayService;
+import com.zanxiang.sdk.service.OrderService;
 import com.zanxiang.sdk.service.pay.PayBaseService;
-import com.zanxiang.sdk.util.WxPayUtil;
-import com.zanxiang.sdk.util.XmlUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.io.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -55,9 +50,6 @@ public class OrderPayServiceImpl implements OrderPayService {
     @Autowired
     private OrderPayParamService orderPayParamService;
 
-    @Autowired
-    private PayMerchantService payMerchantService;
-
     @Override
     public PayParamVO getPayParam(String code, String orderId, HttpServletRequest request) {
         Order order = orderService.getOne(new LambdaQueryWrapper<Order>()
@@ -148,45 +140,6 @@ public class OrderPayServiceImpl implements OrderPayService {
         return service.notify(request, response);
     }
 
-    @Override
-    public String appletNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        // 读取参数
-        InputStream inputStream = request.getInputStream();
-        String requestStr = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-        // 解析xml成map
-        Map<String, String> packageParams = XmlUtil.xmlToMap(requestStr);
-        //获取订单信息
-        String attachStr = packageParams.get("attach");
-        Map<String, String> attachStrMap = JsonUtil.toMap(attachStr, Map.class, String.class);
-        if (attachStrMap == null || attachStrMap.isEmpty()) {
-            log.info("回调参数中attach值为空");
-            return null;
-        }
-        //商户号id
-        String merchantNo = attachStrMap.get("merchantNo");
-        PayMerchant payMerchant = payMerchantService.getOne(new LambdaQueryWrapper<PayMerchant>()
-                .eq(PayMerchant::getMerchantNo, merchantNo));
-        Map<String, String> payConfigMap = JsonUtil.toMap(payMerchant.getPayConfig(), Map.class, String.class);
-        // 判断签名是否正确
-        String mySign = WxPayUtil.generateSignature(packageParams, payConfigMap.get("apiKey"));
-        if (!Objects.equals(mySign, packageParams.get("sign"))) {
-            log.error("通知签名验证失败, muSign : {}, sign : {}", mySign, packageParams.get("sign"));
-            return null;
-        }
-        log.info("微信支付成功回调");
-        // 处理业务开始
-        Map<String, String> xmlMap = new HashMap<>();
-        xmlMap.put("return_code", "SUCCESS");
-        xmlMap.put("return_msg", "OK");
-        // 处理业务完毕
-        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
-        log.info("返回给腾讯的回调结果, ss : {}", XmlUtil.mapToXml(xmlMap));
-        out.write(XmlUtil.mapToXml(xmlMap).getBytes());
-        out.flush();
-        out.close();
-        return HttpStatusEnum.SUCCESS.getMsg();
-    }
-
     @Override
     public ResultMap synNotify(HttpServletRequest request, Integer payType) {
         PayTypeEnum payTypeEnum = PayTypeEnum.getByPayType(payType);

+ 53 - 12
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/Impl/PayApplicationServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zanxiang.common.constant.Constants;
 import com.zanxiang.common.domain.ResultMap;
+import com.zanxiang.common.enums.HttpStatusEnum;
 import com.zanxiang.common.exception.BaseException;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
@@ -13,6 +14,7 @@ import com.zanxiang.mybatis.entity.PayMerchant;
 import com.zanxiang.mybatis.mapper.PayApplicationMapper;
 import com.zanxiang.sdk.constant.WxPayConstants;
 import com.zanxiang.sdk.domain.dto.PayApplicationDTO;
+import com.zanxiang.sdk.domain.dto.PayMerchantDTO;
 import com.zanxiang.sdk.domain.params.MiniAppPayParam;
 import com.zanxiang.sdk.service.PayApplicationService;
 import com.zanxiang.sdk.service.PayMerchantService;
@@ -21,12 +23,18 @@ import com.zanxiang.sdk.util.HttpUtil;
 import com.zanxiang.sdk.util.WxPayUtil;
 import com.zanxiang.sdk.util.XmlUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
@@ -68,7 +76,7 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
     }
 
     @Override
-    public ResultMap miniAppPay(MiniAppPayParam payParam, HttpServletRequest request) {
+    public ResultMap appletStorePay(MiniAppPayParam payParam, HttpServletRequest request) {
         //查询商城小程序信息
         PayApplication payApplication = super.getOne(new LambdaQueryWrapper<PayApplication>()
                 .eq(PayApplication::getAppId, payParam.getAppId()));
@@ -76,15 +84,9 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
             throw new BaseException("参数错误, 支付商城小程序信息不存在");
         }
         //查询商户信息
-        PayMerchant payMerchant = payMerchantService.getById(3L);
-
-
-
-
-
-
-
-        Map<String, String> payConfigMap = JsonUtil.toMap(payMerchant.getPayConfig(), Map.class, String.class);
+        PayMerchantDTO payMerchantDTO = payMerchantService.getByMerchantNo(payApplication.getMerchantNo());
+        //下单参数
+        Map<String, String> payConfigMap = JsonUtil.toMap(payMerchantDTO.getPayConfig(), Map.class, String.class);
         //获取用户openId
         String openId = wxApiService.getAppletOpenId(payParam.getCode(), payApplication.getAppId(), payApplication.getAppSecret());
         //订单id
@@ -93,7 +95,7 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
             //下单参数
             Map<String, String> paramMap = new HashMap<>(9);
             paramMap.put("appId", payApplication.getAppId());
-            paramMap.put("mchId", payMerchant.getMerchantNo());
+            paramMap.put("mchId", payMerchantDTO.getMerchantNo());
             paramMap.put("productName", payParam.getProductName());
             paramMap.put("orderId", orderId);
             paramMap.put("totalFee", payParam.getTotalFee());
@@ -103,7 +105,7 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
             Map<String, String> attachMap = new HashMap<>(3);
             attachMap.put("appId", payApplication.getAppId());
             attachMap.put("orderId", orderId);
-            attachMap.put("merchantNo", payMerchant.getMerchantNo());
+            attachMap.put("merchantNo", payMerchantDTO.getMerchantNo());
             paramMap.put("attach", JsonUtil.toString(attachMap));
             log.error("下单参数, paramMap : {}", JsonUtil.toString(paramMap));
             //下单
@@ -118,6 +120,45 @@ public class PayApplicationServiceImpl extends ServiceImpl<PayApplicationMapper,
         }
     }
 
+    @Override
+    public String appletStoreNotify(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        // 读取参数
+        InputStream inputStream = request.getInputStream();
+        String requestStr = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+        // 解析xml成map
+        Map<String, String> packageParams = XmlUtil.xmlToMap(requestStr);
+        //获取订单信息
+        String attachStr = packageParams.get("attach");
+        Map<String, String> attachStrMap = JsonUtil.toMap(attachStr, Map.class, String.class);
+        if (attachStrMap == null || attachStrMap.isEmpty()) {
+            log.info("回调参数中attach值为空");
+            return null;
+        }
+        //商户号id
+        String merchantNo = attachStrMap.get("merchantNo");
+        PayMerchant payMerchant = payMerchantService.getOne(new LambdaQueryWrapper<PayMerchant>()
+                .eq(PayMerchant::getMerchantNo, merchantNo));
+        Map<String, String> payConfigMap = JsonUtil.toMap(payMerchant.getPayConfig(), Map.class, String.class);
+        // 判断签名是否正确
+        String mySign = WxPayUtil.generateSignature(packageParams, payConfigMap.get("apiKey"));
+        if (!Objects.equals(mySign, packageParams.get("sign"))) {
+            log.error("通知签名验证失败, muSign : {}, sign : {}", mySign, packageParams.get("sign"));
+            return null;
+        }
+        log.info("小程序商城支付成功回调");
+        // 处理业务开始
+        Map<String, String> xmlMap = new HashMap<>();
+        xmlMap.put("return_code", "SUCCESS");
+        xmlMap.put("return_msg", "OK");
+        // 处理业务完毕
+        BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
+        log.info("返回给腾讯的回调结果, ss : {}", XmlUtil.mapToXml(xmlMap));
+        out.write(XmlUtil.mapToXml(xmlMap).getBytes());
+        out.flush();
+        out.close();
+        return HttpStatusEnum.SUCCESS.getMsg();
+    }
+
     private Map<Object, Object> payParamMap(String orderId, String appId, String apiKey, Map<String, String> successMap) {
         //支付id
         String prepayId = successMap.get("prepay_id");

+ 0 - 10
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/OrderPayService.java

@@ -53,16 +53,6 @@ public interface OrderPayService {
      */
     String notify(HttpServletRequest request, HttpServletResponse response, Integer payType) throws IOException;
 
-    /**
-     * applet通知
-     *
-     * @param request  请求
-     * @param response 响应
-     * @return {@link String}
-     * @throws IOException ioexception
-     */
-    String appletNotify(HttpServletRequest request, HttpServletResponse response) throws IOException;
-
     /**
      * 异步回调
      *

+ 13 - 1
game-module/game-sdk/src/main/java/com/zanxiang/sdk/service/PayApplicationService.java

@@ -7,6 +7,8 @@ import com.zanxiang.sdk.domain.dto.PayApplicationDTO;
 import com.zanxiang.sdk.domain.params.MiniAppPayParam;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * 支付商城小程序
@@ -31,5 +33,15 @@ public interface PayApplicationService extends IService<PayApplication> {
      * @param request  请求
      * @return {@link ResultMap}
      */
-    ResultMap miniAppPay(MiniAppPayParam payParam, HttpServletRequest request);
+    ResultMap appletStorePay(MiniAppPayParam payParam, HttpServletRequest request);
+
+    /**
+     * applet通知
+     *
+     * @param request  请求
+     * @param response 响应
+     * @return {@link String}
+     * @throws IOException ioexception
+     */
+    String appletStoreNotify(HttpServletRequest request, HttpServletResponse response) throws IOException;
 }