Sfoglia il codice sorgente

H5下单接口修改

小么熊🐻 1 anno fa
parent
commit
2d590a7cae

+ 71 - 0
nbjk-admin/src/main/java/com/miaxis/app/controller/wx/WxController.java

@@ -296,6 +296,77 @@ public class WxController extends BaseController {
     }
 
 
+
+    /**
+     * 微信公众号支付获取预订单id
+     */
+    @PostMapping(value = "/gzhPrepareOrder")
+    @ApiOperation("微信公众号支付下单")
+    public Response<JSONObject> gzhPrepareOrder(@RequestBody WxOrderDTO wxOrderDTO) throws Exception{
+        UserInfo userInfo = SecurityUtils.getLoginUser().getStudent();
+        if(wxOrderDTO.getGoodsType()==1) {
+            int count = vipUserExamService.getUserExamByUnionIdAndGoodsId(userInfo.getUnionId(), wxOrderDTO.getGoodsId());
+            if (count > 0) {
+                throw new CustomException("您已购买过该考场,退回上个页面,重新进入。");
+            }
+            ExamInfo examInfo = examInfoService.getById(wxOrderDTO.getGoodsId());
+            //创建本地微信订单
+            WxOrder order = new WxOrder();
+            String orderCode = getOrderCode(userInfo.getId());
+            order.setGoodsId(wxOrderDTO.getGoodsId());
+            order.setGoodsName(examInfo.getName());
+            order.setGoodsType(1);
+            order.setOutTradeNo(orderCode);
+            order.setUserId(userInfo.getId());
+            order.setXcxOpenid(userInfo.getXcxOpenid());
+            order.setAppOpenid(userInfo.getAppOpenid());
+            order.setGzhOpenid(userInfo.getGzhOpenid());
+            order.setUnionId(userInfo.getUnionId());
+            order.setPhoneType(wxOrderDTO.getPhoneType()); //手机类型 1:苹果 2:安卓
+            order.setForeType(wxOrderDTO.getForeType()); //前端类型 1:app 2:小程序 3:公众号
+            order.setTotal(examInfo.getPrice());
+            order.setOrderStatus(OrderStatusEnum.PROCESSING.getCode());
+            wxOrderService.save(order);
+            return Response.success(placeGzhJsWxOrder(order, examInfo.getName()));
+        } else if (wxOrderDTO.getGoodsType()==2) {
+            throw new CustomException("请正确传入GoodsType,GoodsType=2未开发");
+        } else {
+            throw new CustomException("请正确传入GoodsType。");
+        }
+    }
+
+
+    /**
+     *
+     * @param order
+     * @param goodsName
+     * @return
+     * @throws Exception
+     */
+    private JSONObject placeGzhJsWxOrder(WxOrder order, String goodsName) throws Exception {
+        HttpPost httpPost = initHttpPost(wxpayConfig.getV3JsUrl());
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        ObjectMapper objectMapper = new ObjectMapper();
+        ObjectNode rootNode = objectMapper.createObjectNode();
+        rootNode.put("mchid",wxpayConfig.getMerchantId())
+                .put("appid", gzhAppId)
+                .put("description", goodsName)
+                .put("notify_url", notifyUrl)
+                .put("out_trade_no", order.getOutTradeNo());
+        rootNode.putObject("amount").put("total", order.getTotal());
+        rootNode.putObject("payer").put("openid", order.getXcxOpenid());
+        objectMapper.writeValue(bos, rootNode);
+        httpPost.setEntity(new StringEntity(rootNode.toString(), "utf-8"));
+        HttpResponse response = httpClient.execute(httpPost);
+        String bodyAsString = EntityUtils.toString(response.getEntity());
+        if (JSONObject.parseObject(bodyAsString).get("prepay_id") == null){
+            throw new CustomException(JSONObject.parseObject(bodyAsString).get("message").toString());
+        }
+        return getWxParamJson(bodyAsString);
+
+    }
+
+
     /**
      * 微信小程序或公众号内  JSAPI下单
      * 生成调用调起微信支付所需参数

+ 14 - 0
nbjk-admin/src/test/java/com/miaxis/test/TestXml.java

@@ -0,0 +1,14 @@
+package com.miaxis.test;
+
+import com.miaxis.common.utils.wx.MessageUtil;
+
+public class TestXml {
+
+
+    public static void main(String[] args) throws Exception {
+       String bbq =  MessageUtil.initVideo("1","2","66");
+        System.out.println(bbq);
+    }
+
+
+}

+ 54 - 0
nbjk-common/src/main/java/com/miaxis/common/utils/XmlUtil.java

@@ -122,6 +122,60 @@ public class XmlUtil {
     }
 
 
+
+
+    /**
+     * 微信回复视频 map转换xml
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static String mapToXmlVideo(Map<String, String> data) throws Exception {
+        log.info("----mapToXml-----"+data);
+        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+        DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder();
+        org.w3c.dom.Document document = documentBuilder.newDocument();
+        org.w3c.dom.Element root = document.createElement("xml");
+        document.appendChild(root);
+
+        org.w3c.dom.Element toUserName = document.createElement("ToUserName");
+        toUserName.setTextContent(data.get("ToUserName"));
+        root.appendChild(toUserName);
+        org.w3c.dom.Element fromUserName = document.createElement("FromUserName");
+        fromUserName.setTextContent(data.get("FromUserName"));
+        root.appendChild(fromUserName);
+        org.w3c.dom.Element createTime = document.createElement("CreateTime");
+        createTime.setTextContent(data.get("CreateTime"));
+        root.appendChild(createTime);
+        org.w3c.dom.Element msgType = document.createElement("MsgType");
+        msgType.setTextContent(data.get("MsgType"));
+        root.appendChild(msgType);
+        org.w3c.dom.Element video = document.createElement("Video");
+        root.appendChild(video);
+        org.w3c.dom.Element mediaId = document.createElement("MediaId");
+        mediaId.setTextContent(data.get("MediaId"));
+        video.appendChild(mediaId);
+
+        TransformerFactory tf = TransformerFactory.newInstance();
+        Transformer transformer = tf.newTransformer();
+        DOMSource source = new DOMSource(document);
+        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+        StringWriter writer = new StringWriter();
+        StreamResult result = new StreamResult(writer);
+        transformer.transform(source, result);
+        String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");
+        try {
+            writer.close();
+        } catch (Exception ex) {
+
+        }
+        log.info("----mapToXml-return-----"+output);
+        return output;
+    }
+
+
+
     /**
      * XML格式字符串转换为Map
      *

+ 20 - 0
nbjk-common/src/main/java/com/miaxis/common/utils/wx/MessageUtil.java

@@ -70,6 +70,26 @@ public class MessageUtil {
     }
 
 
+    /**
+     * 回复视频消息
+     * @param fromUserName
+     * @param toUserName
+     * @param mediaId
+     * @return
+     * @throws Exception
+     */
+    public static String initVideo(String fromUserName, String toUserName, String mediaId) throws Exception{
+        // 返回消息时ToUserName的值与FromUserName的互换
+        Map<String, String> returnMap = new HashMap<>();
+        returnMap.put("ToUserName", fromUserName);
+        returnMap.put("FromUserName", toUserName);
+        returnMap.put("CreateTime", new Date().getTime()+"");
+        returnMap.put("MsgType", "video");
+        returnMap.put("MediaId", mediaId);
+        return XmlUtil.mapToXmlVideo(returnMap);
+    }
+
+
     /**
      * 回复图文消息
      * @param fromUserName 开发者微信号

+ 4 - 4
nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxGzhServiceImpl.java

@@ -133,9 +133,9 @@ public class WxGzhServiceImpl implements IWxGzhService {
 //            cn.hutool.json.JSONObject jsonObjectData = new cn.hutool.json.JSONObject("{\"CreateTime\":1666169539,\"ToUserName\":\"gh_8e0c71ce615b\",\"MsgType\":\"text\",\"MsgId\":23853813438069304,\"Content\":\"a12345\",\"FromUserName\":\"o_DwY68a6UHmFhmovdFB0gANaC_U\"}");
             log.info("2-----jsonObjectData------"+jsonObjectData);
 
-            //开发者微信号
+            //接收方账号(收到的OpenID)
             String toUserName = jsonObjectData.getStr("ToUserName");
-            //发送方帐号(一个OpenID)
+            //开发者微信号
             String fromUserName = jsonObjectData.getStr("FromUserName");
             // 区分消息类型
             String msgType = jsonObjectData.getStr("MsgType");
@@ -175,10 +175,10 @@ public class WxGzhServiceImpl implements IWxGzhService {
                     //存在Ticket为扫码关注
                     if (org.apache.commons.lang3.StringUtils.isNotEmpty(jsonObjectData.getStr("Ticket"))){
                         log.info("3.1.2..");
-                        result =  MessageUtil.initText(fromUserName,toUserName," ");
+                        result =  MessageUtil.initVideo(fromUserName,toUserName," ");
 
                     }else {
-                        result =  MessageUtil.initText(fromUserName, toUserName, "欢迎关注财仝驾考,右下角菜单可自助学习哦!");
+                        result =  MessageUtil.initVideo(fromUserName, toUserName, "欢迎关注财仝驾考,右下角菜单可自助学习哦!");
                     }
                     return result;
                 }  else if (MessageUtil.MESSAGE_UNSUBSCRIBE.equals(event)) { // 取消订阅事件