From 26cd8c7b2bc7a725a3de28d3ed883a6f54da84f1 Mon Sep 17 00:00:00 2001
From: DESKTOP-71BH0QO\L、ming <172680469@qq.com>
Date: 星期二, 20 四月 2021 16:59:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java            |    8 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java                          |   25 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopGoodsDTO.java                              |    3 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java                    |    2 
 springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java                                           |    3 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java   |  154 +++++++++-
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java                           |   15 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java                                  |   21 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/PayUtil.java                                                |  191 ++++++++++++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java                                        |   20 +
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/config/WxMaProperties.java                                      |   15 +
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java                                         |   44 ++
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOperLogServiceImpl.java |    6 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java                                             |   79 +++++
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java                                |    3 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java            |    2 
 springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopOrderCreateDTO.java                        |    3 
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java                                                |   21 +
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java                            |   17 +
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java   |    2 
 springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/GoodsApi.java                                 |   84 +++++
 springcloud_k8s_panzhihuazhihuishequ/common/pom.xml                                                                                              |   10 
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java            |   13 
 springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java                             |    3 
 springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java                                          |  100 ++++++
 25 files changed, 807 insertions(+), 37 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java
index 4d5f529..0f28c5c 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java
@@ -1,17 +1,24 @@
 package com.panzhihua.applets.api;
 
+import com.panzhihua.applets.config.WxMaProperties;
 import com.panzhihua.common.controller.BaseController;
 import com.panzhihua.common.model.dtos.shop.*;
 import com.panzhihua.common.model.vos.LoginUserInfoVO;
 import com.panzhihua.common.model.vos.R;
 import com.panzhihua.common.model.vos.shop.*;
 import com.panzhihua.common.service.community.CommunityService;
+import com.panzhihua.common.utlis.PayUtil;
 import io.swagger.annotations.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @auther lyq
@@ -26,6 +33,8 @@
 
     @Resource
     private CommunityService communityService;
+    @Resource
+    private WxMaProperties properties;
 
     @ApiOperation(value = "分页查询店铺" , response = PageShopStoreVO.class)
     @PostMapping("pageshopstore")
@@ -148,6 +157,7 @@
         }
         orderCreateDTO.setUserId(loginUserInfo.getUserId());
         orderCreateDTO.setPhone(loginUserInfo.getPhone());
+        orderCreateDTO.setOpenId(loginUserInfo.getOpenid());
         return communityService.orderCreate(orderCreateDTO);
     }
 
@@ -206,5 +216,16 @@
         return communityService.orderStatistics(loginUserInfo.getUserId());
     }
 
+    @ApiOperation(value = "小程序微信调起支付")
+    @PostMapping("wxpay")
+    public R wxPay(@RequestBody OrderPayDTO orderPayDTO){
+        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
+        if(loginUserInfo == null){
+            return R.fail("请重新登陆");
+        }
+        orderPayDTO.setOpenId(loginUserInfo.getOpenid());
+        return communityService.wxPay(orderPayDTO);
+    }
+
 }
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java
new file mode 100644
index 0000000..19d8662
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java
@@ -0,0 +1,100 @@
+package com.panzhihua.applets.api;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.model.dtos.shop.WxPayNotifyOrderDTO;
+import com.panzhihua.common.service.community.CommunityService;
+import com.panzhihua.common.utlis.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.json.XML;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @auther lyq
+ * @create 2021-04-14 15:02:49
+ * @describe 微信支付回到函数
+ */
+@Slf4j
+@RestController
+@RequestMapping("/wx/")
+public class WxCallbackApi {
+
+    @Resource
+    private CommunityService communityService;
+
+    @PostMapping("wxNotify")
+    public void payCallback(HttpServletRequest request, HttpServletResponse response) {
+        log.info("微信支付回调start");
+        String inputLine = "";
+        String notityXml = "";
+        try {
+            while((inputLine = request.getReader().readLine()) != null){
+                notityXml += inputLine;
+            }
+            //关闭流
+            request.getReader().close();
+            log.info("微信回调内容信息:"+notityXml);
+            //解析成Json
+            org.json.JSONObject xmlJson = XML.toJSONObject(notityXml);
+            if(StringUtils.isNotEmpty(xmlJson.toString())){
+                JSONObject resultData = JSON.parseObject(xmlJson.get("xml").toString());
+                //成功支付订单
+                if(resultData.getString("result_code").equals("SUCCESS") && resultData.getString("return_code").equals("SUCCESS")){
+                    WxPayNotifyOrderDTO notifyOrderDTO = new WxPayNotifyOrderDTO();
+                    //订单号
+                    String orderTradeNo = resultData.getString("out_trade_no");
+                    notifyOrderDTO.setOrderTradeNo(orderTradeNo);
+                    //微信支付订单号
+                    String wxTradeNo = resultData.getString("transaction_id");
+                    notifyOrderDTO.setWxTradeNo(wxTradeNo);
+                    //订单金额
+                    String totalFee = resultData.getString("total_fee");
+                    notifyOrderDTO.setTotalFee(totalFee);
+                    //支付完成时间
+                    String payTime = resultData.getString("time_end");
+                    notifyOrderDTO.setPayTime(payTime);
+                    //现金支付金额
+                    String cashFee = resultData.getString("cash_fee");
+                    notifyOrderDTO.setCashFee(cashFee);
+
+                    //根据订单号修改订单信息
+                    communityService.wxOrderPayNotify(notifyOrderDTO);
+
+                    //封装 返回值
+                    StringBuffer buffer = new StringBuffer();
+                    buffer.append("<xml>");
+                    buffer.append("<return_code>SUCCESS</return_code>");
+                    buffer.append("<return_msg>OK</return_msg>");
+                    buffer.append("</xml>");
+
+                    //给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功
+                    PrintWriter writer = response.getWriter();
+                    //返回
+                    writer.print(buffer.toString());
+                }else{//未成功支付订单
+                    //封装 返回值
+                    StringBuffer buffer = new StringBuffer();
+                    buffer.append("<xml>");
+                    buffer.append("<return_code>FAIL</return_code>");
+                    buffer.append("<return_msg>FAIL</return_msg>");
+                    buffer.append("</xml>");
+
+                    //给微信服务器返回 成功标示 否则会一直询问 咱们服务器 是否回调成功
+                    PrintWriter writer = response.getWriter();
+                    //返回
+                    writer.print(buffer.toString());
+                }
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/config/WxMaProperties.java b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/config/WxMaProperties.java
index 6ff4b0c..a10e9e4 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/config/WxMaProperties.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/config/WxMaProperties.java
@@ -40,4 +40,19 @@
      * 消息格式,XML或者JSON
      */
     private String msgDataFormat;
+
+    /**
+     * 商户号
+     */
+    private String mchId;
+
+    /**
+     * 微信支付密钥
+     */
+    private String payKey;
+
+    /**
+     * 微信支付回调地址
+     */
+    private String notifyUrl;
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/pom.xml b/springcloud_k8s_panzhihuazhihuishequ/common/pom.xml
index e853291..3b2ea5f 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/pom.xml
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/pom.xml
@@ -114,6 +114,16 @@
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>httpclient</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.jdom</groupId>
+            <artifactId>jdom2</artifactId>
+            <version>2.0.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20160810</version>
+        </dependency>
     </dependencies>
 
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java
new file mode 100644
index 0000000..ddd29b3
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java
@@ -0,0 +1,20 @@
+package com.panzhihua.common.constants;
+
+/**
+ * 微信支付通用常量
+ *
+ * @author LYQ
+ */
+public class PayCpmstant {
+
+    //微信支付统一下单url地址
+    public static final String UNIFIEDORDER_URL="https://api.mch.weixin.qq.com/pay/unifiedorder";
+    //微信支付默认编码格式
+    public static final String DEFAULT_ENCODING="UTF-8";
+    //微信支付返回支付成功CODE
+    public static final String RETURN_CODE="SUCCESS";
+    //微信支付返回支付成功MSG
+    public static final String RETURN_MSG="OK";
+    //微信支付默认加密格式
+    public static final String SIGN_TYPE="MD5";
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopGoodsDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopGoodsDTO.java
index 074b47d..470074e 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopGoodsDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopGoodsDTO.java
@@ -30,4 +30,7 @@
 
     @ApiModelProperty("配送方式(1.商家配送  2.快递物流)")
     private Integer deliveryType;
+
+    @ApiModelProperty(hidden = true)
+    private Long userId;
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopOrderCreateDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopOrderCreateDTO.java
index 410477e..139325c 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopOrderCreateDTO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/ComShopOrderCreateDTO.java
@@ -21,6 +21,9 @@
     @ApiModelProperty(value = "用户手机号",hidden = true)
     private String phone;
 
+    @ApiModelProperty(value = "用户openId",hidden = true)
+    private String openId;
+
     @ApiModelProperty(value = "用户收货地址id",required = true)
     private Long receiverId;
 
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java
new file mode 100644
index 0000000..dadc021
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java
@@ -0,0 +1,21 @@
+package com.panzhihua.common.model.dtos.shop;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @auther lyq
+ * @create 2021-04-14 15:02:14
+ * @describe 订单支付请求参数
+ */
+@Data
+@ApiModel("订单支付请求参数")
+public class OrderPayDTO {
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单号",hidden = true)
+    private String openId;
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java
new file mode 100644
index 0000000..474beb1
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java
@@ -0,0 +1,25 @@
+package com.panzhihua.common.model.dtos.shop;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel("微信支付回调修改订单参数")
+public class WxPayNotifyOrderDTO {
+
+    @ApiModelProperty(value = "订单号")
+    private String orderTradeNo;
+
+    @ApiModelProperty(value = "微信交易订单号")
+    private String wxTradeNo;
+
+    @ApiModelProperty(value = "订单金额")
+    private String totalFee;
+
+    @ApiModelProperty(value = "支付完成时间")
+    private String payTime;
+
+    @ApiModelProperty(value = "现金支付金额")
+    private String cashFee;
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java
index 69b5446..69ae345 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java
@@ -16,4 +16,7 @@
     @ApiModelProperty(value = "订单金额")
     private BigDecimal orderTotal;
 
+    @ApiModelProperty(value = "请求支付返回参数")
+    private String payResult;
+
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
index 7b6f962..a7bf930 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -2101,4 +2101,19 @@
      */
     @PostMapping("/shop/pageShopFunds")
     R pageShopFunds(@RequestBody PageComShopFundsSearchDTO pageComShopFundsSearchDTO);
+
+    /**
+     * 微信支付订单回调
+     * @param wxPayNotifyOrderDTO   订单支付回调参数
+     */
+    @PostMapping("/shop/wxOrderPayNotify")
+    void wxOrderPayNotify(@RequestBody WxPayNotifyOrderDTO wxPayNotifyOrderDTO);
+
+    /**
+     * 点击去支付订单
+     * @param orderPayDTO   请求参数
+     * @return  支付对象
+     */
+    @PostMapping("/shop/wxPay")
+    R wxPay(@RequestBody OrderPayDTO orderPayDTO);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java
index a477862..7b7b08f 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java
@@ -13,7 +13,13 @@
 import org.apache.http.util.EntityUtils;
 import org.springframework.util.ObjectUtils;
 
+import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
 
 /**
  * @program: springcloud_k8s_panzhihuazhihuishequ
@@ -86,5 +92,43 @@
 
     }
 
+    /**
+     * 使用http请求调用接口,参数类型为xml
+     * @param urlStr    请求地址
+     * @param data  请求参数
+     * @return  调用结果
+     */
+    public static String httpsRequest(String urlStr,String data) {
+        try {
+            URL url = new URL(urlStr);
+            URLConnection con = url.openConnection();
+            con.setDoOutput(true);
+//            con.setRequestProperty("Pragma:", "no-cache");
+            con.setRequestProperty("Cache-Control", "no-cache");
+            con.setRequestProperty("Content-Type", "text/xml");
+
+            OutputStreamWriter out = new OutputStreamWriter(con
+                    .getOutputStream());
+            log.info("urlStr=" + urlStr);
+            log.info("xmlInfo=" + data);
+            out.write(new String(data.getBytes("UTF-8")));
+            out.flush();
+            out.close();
+            BufferedReader br = new BufferedReader(new InputStreamReader(con
+                    .getInputStream()));
+            String line = "";
+            StringBuffer sb = new StringBuffer();
+            for (line = br.readLine(); line != null; line = br.readLine()) {
+                sb.append(line);
+            }
+            return sb.toString();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
 
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/PayUtil.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/PayUtil.java
new file mode 100644
index 0000000..ea59469
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/PayUtil.java
@@ -0,0 +1,191 @@
+package com.panzhihua.common.utlis;
+
+import org.jdom2.input.SAXBuilder;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.security.MessageDigest;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class PayUtil {
+
+    /**
+     * 获取当前机器的ip
+     */
+    public static String getLocalIp() {
+        InetAddress ia = null;
+        String localip = null;
+        try {
+            ia = ia.getLocalHost();
+            localip = ia.getHostAddress();
+        } catch (UnknownHostException e) {
+            e.printStackTrace();
+        }
+        return localip;
+    }
+    @SuppressWarnings("rawtypes")
+    public static String getRequestXml(SortedMap<Object, Object> parameters) {
+        StringBuffer sb = new StringBuffer();
+        sb.append("<xml>");
+        Set es = parameters.entrySet();
+        Iterator it = es.iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            String k = (String) entry.getKey();
+            String v = (String) entry.getValue();
+            if ("attach".equalsIgnoreCase(k) || "body".equalsIgnoreCase(k) || "sign".equalsIgnoreCase(k)) {
+                sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");
+            } else {
+                sb.append("<" + k + ">" + v + "</" + k + ">");
+            }
+        }
+        sb.append("</xml>");
+        return sb.toString();
+    }
+    /**
+     * 创建签名Sign
+     */
+    @SuppressWarnings("rawtypes")
+    public static String createSign(String characterEncoding,SortedMap<Object, Object> parameters, String key) {
+        StringBuffer sb = new StringBuffer();
+        Set es = parameters.entrySet();
+        Iterator<?> it = es.iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            String k = (String) entry.getKey();
+            if (entry.getValue() != null || !"".equals(entry.getValue())) {
+                String v = String.valueOf(entry.getValue());
+                if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
+                    sb.append(k + "=" + v + "&");
+                }
+            }
+        }
+        sb.append("key=" + key);
+        String sign = "";
+        try {
+            sign = MD5(sb.toString());
+        }catch (Exception e){
+            return e.getMessage();
+        }
+        return sign;
+    }
+    /**
+     * 生成随机数
+     */
+    public static String makeUUID(int len) {
+        return UUID.randomUUID().toString().replaceAll("-", "").substring(0, len);
+    }
+    /**
+     * 生成订单号
+     */
+    public static String generateOrderNo() {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
+        return sdf.format(new Date()) + makeUUID(16);
+    }
+    /**
+     * 解析xml
+     */
+    public static Map doXMLParse(String strxml) throws Exception {
+        strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
+        if (StringUtils.isNotEmpty(strxml)) {
+            return null;
+        }
+        Map m = new HashMap();
+        InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
+        SAXBuilder builder = new SAXBuilder();
+        org.jdom2.Document doc = builder.build(in);
+        org.jdom2.Element root = doc.getRootElement();
+        List list = root.getChildren();
+        Iterator it = list.iterator();
+        while (it.hasNext()) {
+            org.jdom2.Element e = (org.jdom2.Element) it.next();
+            String k = e.getName();
+            String v = "";
+            List children = e.getChildren();
+            if (children.isEmpty()) {
+                v = e.getTextNormalize();
+            } else {
+                v = getChildrenText(children);
+            }
+            m.put(k, v);
+        }
+        //关闭流
+        in.close();
+        return m;
+    }
+    /**
+     * 获取子节点的xml
+     */
+    public static String getChildrenText(List children) {
+        StringBuffer sb = new StringBuffer();
+        if (!children.isEmpty()) {
+            Iterator it = children.iterator();
+            while (it.hasNext()) {
+                org.jdom2.Element e = (org.jdom2.Element) it.next();
+                String name = e.getName();
+                String value = e.getTextNormalize();
+                List list = e.getChildren();
+                sb.append("<" + name + ">");
+                if (!list.isEmpty()) {
+                    sb.append(getChildrenText(list));
+                }
+                sb.append(value);
+                sb.append("</" + name + ">");
+            }
+        }
+        return sb.toString();
+    }
+    /**
+     * 转换金额到整型
+     */
+    public static String moneyToIntegerStr(BigDecimal money) {
+        int amount = money.multiply(new BigDecimal((100)))
+                .setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        return String.valueOf(amount);
+    }
+    /**
+     * 微信下单,map to xml
+     * @param params 参数
+     * @return String
+     */
+    public static String mapToXml(Map<String, String> params) {
+        StringBuilder xml = new StringBuilder();
+        xml.append("<xml>");
+        for (Map.Entry<String, String> entry : params.entrySet()) {
+            String key   = entry.getKey();
+            String value = entry.getValue();
+            // 略过空值
+            if (StringUtils.isEmpty(value)) continue;
+            xml.append("<").append(key).append("><![CDATA[");
+            xml.append(entry.getValue());
+            xml.append("]]></").append(key).append(">");
+        }
+        xml.append("</xml>");
+        return xml.toString();
+    }
+
+    /**
+     * 生成 MD5
+     *
+     * @param data 待处理数据
+     * @return MD5结果
+     */
+    public static String MD5(String data) throws Exception {
+        java.security.MessageDigest md = MessageDigest.getInstance("MD5");
+        byte[] array = md.digest(data.getBytes("UTF-8"));
+        StringBuilder sb = new StringBuilder();
+        for (byte item : array) {
+            sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
+        }
+        return sb.toString().toUpperCase();
+    }
+
+
+    public static String create_timestamp() {
+        return Long.toString(System.currentTimeMillis() / 1000);
+    }
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
new file mode 100644
index 0000000..6200822
--- /dev/null
+++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
@@ -0,0 +1,79 @@
+package com.panzhihua.common.utlis;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.constants.PayCpmstant;
+import lombok.extern.slf4j.Slf4j;
+import org.json.XML;
+
+import java.math.BigDecimal;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+@Slf4j
+public class WxPayUtils {
+
+    public static String getUnifiedorder(String appid, String mchId, String payKey, String notifyUrl, String body, String openid, String outTradeNo, BigDecimal money){
+        String nonceStr = PayUtil.makeUUID(32);
+        SortedMap<Object, Object> params = new TreeMap<>();
+        params.put("appid", appid);
+        params.put("body", body);
+        params.put("mch_id", mchId);
+        params.put("nonce_str",nonceStr);
+        params.put("notify_url", notifyUrl);
+        params.put("openid", openid);
+        params.put("out_trade_no", outTradeNo);//商品订单号
+        params.put("spbill_create_ip", PayUtil.getLocalIp());//服务部署的ip
+        params.put("total_fee", PayUtil.moneyToIntegerStr(money));//费用的参数转型
+        params.put("trade_type", "JSAPI");//对接类型
+        params.put("sign", PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, params, payKey));//MD5签名
+        //转换成xml
+        String xmlData = PayUtil.getRequestXml(params);
+        //请求微信后台,获取支付id
+        String resXml = HttpClientUtil.httpsRequest(PayCpmstant.UNIFIEDORDER_URL, xmlData);
+        log.info("请求微信支付返回参数:" + resXml);
+
+        org.json.JSONObject resultData = XML.toJSONObject(resXml);
+        JSONObject data = JSON.parseObject(resultData.get("xml").toString());
+        JSONObject result = new JSONObject();
+        if(data.get("return_msg").equals(PayCpmstant.RETURN_MSG) && data.get("return_code").equals(PayCpmstant.RETURN_CODE)){
+            //将微信统一下单成功的参数拼接再签名
+            //统一下单返回prepay_id
+            String prepayId = "prepay_id=" + data.getString("prepay_id");
+            //时间戳
+            Long timeStamp = System.currentTimeMillis()/1000;
+            //封装需要签名的字段
+            SortedMap<Object, Object> payParams = new TreeMap<>();
+            payParams.put("appId", appid);
+            payParams.put("nonceStr",nonceStr);
+            payParams.put("package",prepayId);
+            payParams.put("signType",PayCpmstant.SIGN_TYPE);
+            payParams.put("timeStamp",timeStamp);
+            //将参数以及签名计算完成封装返回给前端
+            result.put("timeStamp",timeStamp);
+            result.put("nonceStr",nonceStr);
+            result.put("package",prepayId);
+            result.put("signType",PayCpmstant.SIGN_TYPE);
+            result.put("paySign",PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
+        }
+        return result.toJSONString();
+    }
+
+    public static SortedMap<Object, Object> prepayId(Map<String, String> map) {
+        SortedMap<Object, Object> parameters = new TreeMap<>();
+        parameters.put("appId", "");
+        parameters.put("timeStamp", PayUtil.create_timestamp());
+        parameters.put("nonceStr", map.get("nonce_str"));
+        parameters.put("package", "prepay_id=" + map.get("prepay_id"));
+        parameters.put("signType", "MD5");
+        String sign = PayUtil.createSign("UTF-8", parameters, "商户秘钥");
+        parameters.put("prepay_id", "prepay_id=" + map.get("prepay_id"));
+        parameters.put("paySign", sign);
+        return parameters;
+    }
+
+
+
+
+}
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java
index d93dacc..3a701af 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java
@@ -468,5 +468,22 @@
         return comShopOrderService.pageShopFunds(pageComShopFundsSearchDTO);
     }
 
+    /**
+     * 微信支付订单回调
+     * @param wxPayNotifyOrderDTO   订单支付回调参数
+     */
+    @PostMapping("/wxOrderPayNotify")
+    public void wxOrderPayNotify(@RequestBody WxPayNotifyOrderDTO wxPayNotifyOrderDTO){
+        comShopOrderService.wxOrderPayNotify(wxPayNotifyOrderDTO);
+    }
 
+    /**
+     * 点击去支付订单
+     * @param orderPayDTO   请求参数
+     * @return  支付对象
+     */
+    @PostMapping("/wxPay")
+    public R wxPay(@RequestBody OrderPayDTO orderPayDTO){
+        return  comShopOrderService.wxPay(orderPayDTO);
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java
index 58b0647..c638931 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java
@@ -80,6 +80,6 @@
             " </if> " +
             " order by sale desc,create_at desc " +
             " </script>")
-    IPage<ComShopGoodsVO> pageShopGoods(Page page, @Param("comShopGoodsDTO") ComShopGoodsDTO comShopGoodsDTO);
+    IPage<ComShopGoodsVO> pageShopGoodByApps(Page page, @Param("comShopGoodsDTO") ComShopGoodsDTO comShopGoodsDTO);
 
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java
index 58a2f95..6a010d2 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java
@@ -73,6 +73,14 @@
     @TableField(fill = FieldFill.UPDATE)
     private Date updateAt;
 
+    /**
+     * 支付状态(1.未支付 2.已支付)
+     */
+    public interface payStatus{
+        int no = 1;
+        int yes = 2;
+    }
+
     @Override
     public String toString() {
         return "ComShopOrderPayDO{" +
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java
index 1c95958..ecf1acd 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java
@@ -42,8 +42,6 @@
      */
     R pageGoodsList(PageComShopGoodsDTO pageComShopGoodsDTO);
 
-
-
     /**
      * 编辑商品
      *
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java
index d484a53..ca2e9de 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java
@@ -133,4 +133,17 @@
      * @return 资金订单数据
      */
     R pageShopFunds(PageComShopFundsSearchDTO pageComShopFundsSearchDTO);
+
+    /**
+     * 微信支付订单回调
+     * @param wxPayNotifyOrderDTO   订单支付回调参数
+     */
+    void wxOrderPayNotify(WxPayNotifyOrderDTO wxPayNotifyOrderDTO);
+
+    /**
+     * 用户点击去支付
+     * @param orderPayDTO   请求参数
+     * @return  返回支付对象
+     */
+    R wxPay(OrderPayDTO orderPayDTO);
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java
index 13603c2..37b06f7 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java
@@ -185,7 +185,7 @@
     @Override
     public R pageShopGoods(ComShopGoodsDTO comShopGoodsDTO){
         Page page = new Page<>(comShopGoodsDTO.getPageNum(),comShopGoodsDTO.getPageSize());
-        return R.ok(this.baseMapper.pageShopGoods(page,comShopGoodsDTO));
+        return R.ok(this.baseMapper.pageShopGoodByApps(page,comShopGoodsDTO));
     }
 
     /**
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOperLogServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOperLogServiceImpl.java
index 21d40a5..7495cb0 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOperLogServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOperLogServiceImpl.java
@@ -1,21 +1,15 @@
 package com.panzhihua.service_community.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.panzhihua.common.model.dtos.PageDTO;
 import com.panzhihua.common.model.vos.R;
-import com.panzhihua.common.model.vos.shop.PageShopStoreVO;
 import com.panzhihua.common.model.vos.shop.ShopOperLogVO;
 import com.panzhihua.service_community.dao.ComShopOperLogDAO;
-import com.panzhihua.service_community.dao.ComShopOrderDAO;
 import com.panzhihua.service_community.model.dos.ComShopOperLogDO;
-import com.panzhihua.service_community.model.dos.ComShopOrderDO;
-import com.panzhihua.service_community.model.dos.ComShopStoreDO;
 import com.panzhihua.service_community.service.ComShopOperLogService;
-import com.panzhihua.service_community.service.ComShopOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java
index dc59a90..cbc7636 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java
@@ -8,6 +8,7 @@
 import com.panzhihua.common.model.dtos.PageDTO;
 import com.panzhihua.common.model.dtos.shop.*;
 import com.panzhihua.common.model.vos.R;
+import com.panzhihua.common.utlis.WxPayUtils;
 import com.panzhihua.service_community.dao.ComShopOrderDAO;
 import com.panzhihua.service_community.model.dos.ComShopOrderDO;
 import com.panzhihua.common.model.vos.R;
@@ -19,11 +20,13 @@
 import com.panzhihua.service_community.service.ComShopOrderService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -53,6 +56,18 @@
     private ComShopOrderGoodsDAO comShopOrderGoodsDAO;
     @Resource
     private ComShopOrderDAO comShopOrderDAO;
+    @Resource
+    private ComShopOrderPayDAO comShopOrderPayDAO;
+    @Value("${min.app.isTest}")
+    private Boolean isTest;
+    @Value("${min.app.appid}")
+    private String appid;
+    @Value("${min.app.payKey}")
+    private String payKey;
+    @Value("${min.app.mchId}")
+    private String mchId;
+    @Value("${min.app.notifyUrl}")
+    private String notifyUrl;
 
     /**
      * 订单预览
@@ -161,11 +176,12 @@
             }
         }else{//查询到用户上一笔订单
             ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(shopOrders.get(0).getReceiverId());
-            ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO();
-            BeanUtils.copyProperties(userAddressDO,userAddressVO);
-            orderPreviewVO.setUserAddressVO(userAddressVO);
+            if(userAddressDO != null){
+                ComShopUserAddressVO userAddressVO = new ComShopUserAddressVO();
+                BeanUtils.copyProperties(userAddressDO,userAddressVO);
+                orderPreviewVO.setUserAddressVO(userAddressVO);
+            }
         }
-
         return R.ok(orderPreviewVO);
     }
 
@@ -179,7 +195,6 @@
     public R orderCreate(ComShopOrderCreateDTO orderCreateDTO){
         //创建返回参数
         ComShopOrderVO shopOrderVO = new ComShopOrderVO();
-
         //查询用户收货地址
         ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(orderCreateDTO.getReceiverId());
         if(userAddressDO == null){
@@ -193,10 +208,8 @@
         String orderNo = OrderNoUtils.NextOrderNo(userId);
         //配送方式
         Integer deliveryType = 0;
-
         //订单总金额
         BigDecimal orderTotal = BigDecimal.ZERO;
-
         //创建订单商品信息
         List<ComShopOrderGoodsDO> orderGoodsDOList = new ArrayList<>();
         if(!orderCreateDTO.getOrderGoodsList().isEmpty()){
@@ -232,12 +245,10 @@
                 orderTotal = orderTotal.add(orderGoodsDO.getGoodsAttrPrice().multiply(BigDecimal.valueOf(orderGoodsDO.getAmount())));
             }
         }
-
         //如果是购物车提交,需要将购物车内商品移除
         if(orderCreateDTO.getSubmitType().equals(ComShopOrderCreateDTO.submitType.cart)){
             comShopCartDAO.deleteBatchIds(orderCreateDTO.getCartIds());
         }
-
         //创建订单信息
         ComShopOrderDO shopOrderDO = new ComShopOrderDO();
         shopOrderDO.setOrderNo(orderNo);
@@ -254,18 +265,15 @@
             shopOrderDO.setRemark(orderCreateDTO.getRemark());
         }
         this.baseMapper.insert(shopOrderDO);
-
         if(!orderGoodsDOList.isEmpty()){
             orderGoodsDOList.forEach(orderGoods ->{
                 orderGoods.setOrderId(shopOrderDO.getId());
                 comShopOrderGoodsDAO.insert(orderGoods);
             });
         }
-
         //创建订单操作记录
         ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO();
         orderOperateDO.setOrderNo(orderNo);
-
         orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.create);
         orderOperateDO.setOperationTime(new Date());
         if(StringUtils.isNotEmpty(orderCreateDTO.getPhone())){
@@ -276,9 +284,21 @@
             orderOperateDO.setOperationBy("用户");
         }
         comShopOrderOperateDAO.insert(orderOperateDO);
-
         shopOrderVO.setOrderNo(orderNo);
         shopOrderVO.setOrderTotal(orderTotal);
+
+        try {
+            BigDecimal money = orderTotal;
+            if(isTest){
+                money = BigDecimal.valueOf(0.01);
+            }
+            //调用wx支付
+            String xml = WxPayUtils.getUnifiedorder(appid,mchId,payKey,notifyUrl,"商品购买",orderCreateDTO.getOpenId(),orderNo,money);
+            log.info("微信支付返回参数:" + xml);
+            shopOrderVO.setPayResult(xml);
+        }catch (Exception e){
+            log.error("调用微信支付异常,异常原因:" + e.getMessage());
+        }
         return R.ok(shopOrderVO);
     }
 
@@ -638,9 +658,6 @@
         return R.ok(ipage);
     }
 
-
-
-
     @Override
     public R capitalDetailByStore(Long id) {
         if(id==null){
@@ -649,4 +666,109 @@
         CapitalDetailVO vo = this.baseMapper.capitalDetailByStore(id);
         return R.ok(vo);
     }
+
+    /**
+     * 微信支付订单回调
+     * @param wxPayNotifyOrderDTO   订单支付回调参数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void wxOrderPayNotify(WxPayNotifyOrderDTO wxPayNotifyOrderDTO){
+        if(StringUtils.isEmpty(wxPayNotifyOrderDTO.getOrderTradeNo())){
+            log.error("微信支付回调失败,订单号为空");
+            return;
+        }
+
+        //查询订单
+        ComShopOrderDO shopOrderDO = this.baseMapper.selectOne(new QueryWrapper<ComShopOrderDO>().lambda().eq(ComShopOrderDO::getOrderNo,wxPayNotifyOrderDTO.getOrderTradeNo()));
+        if(shopOrderDO == null){
+            log.error("未查询到支付订单,订单回调失败,订单号:" + wxPayNotifyOrderDTO.getOrderTradeNo());
+            return;
+        }
+        shopOrderDO.setStatus(ComShopOrderDO.status.dfh);
+        shopOrderDO.setPayType(ComShopOrderDO.payType.wx);
+        shopOrderDO.setPayStatus(ComShopOrderDO.payStatus.yes);
+        shopOrderDO.setPayAmount(BigDecimal.valueOf(Integer.parseInt(wxPayNotifyOrderDTO.getCashFee()) * 100));
+        shopOrderDO.setWxTardeNo(wxPayNotifyOrderDTO.getWxTradeNo());
+        shopOrderDO.setPayTime(new Date(Long.parseLong(wxPayNotifyOrderDTO.getPayTime())));
+        this.baseMapper.updateById(shopOrderDO);
+
+        //查询订单商品
+        List<ComShopOrderGoodsDO> orderGoodsList = comShopOrderGoodsDAO.selectList(new QueryWrapper<ComShopOrderGoodsDO>().lambda().eq(ComShopOrderGoodsDO ::getOrderNo,shopOrderDO.getOrderNo()));
+        if(!orderGoodsList.isEmpty()){
+            int goodsNub = 0;
+            for (ComShopOrderGoodsDO orderGood:orderGoodsList) {
+                goodsNub += orderGood.getAmount();
+                //更新商品信息
+                ComShopGoodsDO goodsDO = comShopGoodsDAO.selectById(orderGood.getGoodsId());
+                if(goodsDO != null){
+                    goodsDO.setSale(goodsDO.getSale() + orderGood.getAmount());
+                    comShopGoodsDAO.updateById(goodsDO);
+                }
+
+                //更新商品规格
+                ComShopGoodsAttrDO goodsAttrDO = comShopGoodsAttrDAO.selectById(orderGood.getGoodsAttrId());
+                if(goodsAttrDO != null){
+                    goodsAttrDO.setSale(goodsAttrDO.getSale() + orderGood.getAmount());
+                    comShopGoodsAttrDAO.updateById(goodsAttrDO);
+                }
+            }
+
+            //更新店铺销量以及销售额
+            ComShopStoreDO storeDO = comShopStoreDAO.selectById(shopOrderDO.getStoreId());
+            if(storeDO != null){
+                storeDO.setSale(storeDO.getSale() + goodsNub);
+                storeDO.setSaleVolume(storeDO.getSaleVolume().add(shopOrderDO.getTotalAmount()));
+                comShopStoreDAO.updateById(storeDO);
+            }
+        }
+
+
+        //添加订单操作记录
+        ComShopOrderOperateDO orderOperateDO = new ComShopOrderOperateDO();
+        orderOperateDO.setOrderNo(shopOrderDO.getOrderNo());
+        orderOperateDO.setOperationType(ComShopOrderOperateDO.operationType.pay);
+        orderOperateDO.setOperationTime(new Date());
+        orderOperateDO.setOperationContent("用户支付订单");
+        orderOperateDO.setOperationBy("用户");
+        comShopOrderOperateDAO.insert(orderOperateDO);
+
+        //添加订单支付记录表
+        ComShopOrderPayDO orderPayDO = new ComShopOrderPayDO();
+        orderPayDO.setOrderNo(shopOrderDO.getOrderNo());
+        orderPayDO.setOrderAmount(shopOrderDO.getTotalAmount());
+        orderPayDO.setWxTradeNo(wxPayNotifyOrderDTO.getWxTradeNo());
+        orderPayDO.setPayStatus(ComShopOrderPayDO.payStatus.yes);
+        orderPayDO.setPayAmount(shopOrderDO.getPayAmount());
+        orderPayDO.setPayTime(shopOrderDO.getPayTime());
+        comShopOrderPayDAO.insert(orderPayDO);
+    }
+
+    /**
+     * 订单去支付
+     * @param orderPayDTO   请求参数
+     * @return  支付对象
+     */
+    public R wxPay(OrderPayDTO orderPayDTO){
+        //创建返回参数
+        ComShopOrderVO shopOrderVO = new ComShopOrderVO();
+        //查询订单
+        ComShopOrderDO orderDO = comShopOrderDAO.selectOne(new QueryWrapper<ComShopOrderDO>().lambda().eq(ComShopOrderDO::getOrderNo,orderPayDTO.getOrderNo()));
+        if(orderDO == null){
+            return R.fail("订单不存在");
+        }
+        try {
+            BigDecimal money = orderDO.getTotalAmount();
+            if(isTest){
+                money = BigDecimal.valueOf(0.01);
+            }
+            //调用wx支付
+            String xml = WxPayUtils.getUnifiedorder(appid,mchId,payKey,notifyUrl,"商品购买",orderPayDTO.getOpenId(),orderDO.getOrderNo(),money);
+            log.info("微信支付返回参数:" + xml);
+            shopOrderVO.setPayResult(xml);
+        }catch (Exception e){
+            log.error("调用微信支付异常,异常原因:" + e.getMessage());
+        }
+        return R.ok(shopOrderVO);
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/GoodsApi.java b/springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/GoodsApi.java
index b60f53c..80a3931 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/GoodsApi.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/shop_backstage/src/main/java/com/panzhihua/shop_backstage/api/GoodsApi.java
@@ -1,5 +1,7 @@
 package com.panzhihua.shop_backstage.api;
 
+import com.alibaba.fastjson.JSONObject;
+import com.panzhihua.common.constants.FtpConstants;
 import com.panzhihua.common.controller.BaseController;
 import com.panzhihua.common.model.dtos.shop.ComShopGoodsDTO;
 import com.panzhihua.common.model.vos.R;
@@ -8,15 +10,26 @@
 import com.panzhihua.common.model.vos.shop.ComShopOrderSearchVO;
 import com.panzhihua.common.model.vos.shop.ShopStoreVO;
 import com.panzhihua.common.service.community.CommunityService;
+import com.panzhihua.common.utlis.ClazzUtils;
+import com.panzhihua.common.utlis.SFTPUtil;
 import com.panzhihua.common.validated.PageGroup;
 import com.panzhihua.common.interfaces.ShopOperLog;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
 
 /**
  * @ClasssName GoodsApi 商品API
@@ -34,17 +47,36 @@
 
     @Resource
     private CommunityService communityService;
+    // FTP 登录用户名
+    @Value("${ftp.username}")
+    private String userName;
+    // FTP 登录密码
+    @Value("${ftp.password}")
+    private String password;
+    // FTP 服务器地址IP地址
+    @Value("${ftp.host}")
+    private String host;
+    // FTP 端口
+    @Value("${ftp.port}")
+    private int port;
+    @Value("${ftp.url}")
+    private String url;
 
     @ApiOperation(value = "商品分页搜索", response = ComShopGoodsVO.class)
     @PostMapping("/page")
     public R search(@RequestBody @Validated(PageGroup.class) ComShopGoodsDTO comShopGoodsDTO){
         R<ShopStoreVO> storeInfoR = communityService.getUserStoreInfo(getUserId());
-        ShopStoreVO shopStoreVO = storeInfoR.getData();
-        if(shopStoreVO==null){
-            return R.fail("用户无关联店铺");
+        if(R.isOk(storeInfoR)) {
+            ShopStoreVO shopStoreVO = JSONObject.parseObject(JSONObject.toJSONString(storeInfoR.getData()), ShopStoreVO.class);
+            if (shopStoreVO == null) {
+                return R.fail("用户无关联店铺");
+            }
+            comShopGoodsDTO.setStoreId(shopStoreVO.getId());
+            ClazzUtils.setIfStringIsEmpty(comShopGoodsDTO);
+            return communityService.pageShopGoods(comShopGoodsDTO);
+        }else{
+            return R.fail();
         }
-        comShopGoodsDTO.setStoreId(shopStoreVO.getId());
-        return communityService.pageShopGoods(comShopGoodsDTO);
     }
 
     @ApiOperation(value = "添加商品")
@@ -52,10 +84,18 @@
     @PostMapping("/add")
     public R search(@RequestBody AddShopGoodsVO addShopGoodsVO){
         R<ShopStoreVO> storeInofR = communityService.getUserStoreInfo(getUserId());
-        ShopStoreVO shopStoreVO = storeInofR.getData();
-        addShopGoodsVO.setStoreId(shopStoreVO.getId());
-        addShopGoodsVO.setName(shopStoreVO.getName());
-        return communityService.saveShopGoods(addShopGoodsVO);
+
+        if(R.isOk(storeInofR)) {
+            ShopStoreVO shopStoreVO = JSONObject.parseObject(JSONObject.toJSONString(storeInofR.getData()), ShopStoreVO.class);
+            if (shopStoreVO == null) {
+                return R.fail("用户无关联店铺");
+            }
+            addShopGoodsVO.setStoreId(shopStoreVO.getId());
+            //addShopGoodsVO.setName(shopStoreVO.getName());
+            return communityService.saveShopGoods(addShopGoodsVO);
+        }else{
+            return R.fail();
+        }
     }
 
     @ApiOperation(value = "编辑商品")
@@ -86,4 +126,30 @@
         return communityService.deleteShopGoods(id);
     }
 
+    @ApiOperation(value = "上传图片")
+    @PostMapping(value = "uploadimage", consumes = "multipart/*", headers = "content-type=multipart/form-date")
+    public R uploadImage(@RequestParam MultipartFile file, HttpServletRequest request) {
+        String name = file.getOriginalFilename();
+        List<String> formateList = Arrays.asList(
+                "avi", "flv", "mpg", "mpeg", "mpe", "m1v", "m2v", "mpv2", "mp2v", "dat", "ts", "tp", "tpr", "pva", "pss", "mp4", "m4v",
+                "m4p", "m4b", "3gp", "3gpp", "3g2", "3gp2", "ogg", "mov", "qt", "amr", "rm", "ram", "rmvb", "rpm");
+        String nameStr = name.split("\\.")[1];
+        if (formateList.contains(nameStr)) {
+            name = UUID.randomUUID().toString().replaceAll("-", "") + ".mp4";
+        } else {
+            name = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
+        }
+        try {
+            SFTPUtil sftp = new SFTPUtil(userName, password, host, port);
+            sftp.login();
+            InputStream is = file.getInputStream();
+            sftp.uploadMore(FtpConstants.FTPFILEPATH_IDCARD, name, is);
+            sftp.logout();
+            return R.ok(url + "/idcard/" + name);
+        } catch (Exception e) {
+            log.error("上传照片失败【{}】", e.getMessage());
+            return R.fail();
+        }
+
+    }
 }
diff --git a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java
index b55a731..07219e6 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java
@@ -76,8 +76,9 @@
         boolean useragreement = requestURI.contains("useragreement");
         boolean refreshToken = requestURI.contains("refreshToken");
         boolean logout = requestURI.contains("logout");
+        boolean wxPay = requestURI.contains("wxNotify");
         SafeboxRequestWrapper safeboxRequestWrapper = new SafeboxRequestWrapper(request);
-        if (login||doc||css||js||ui||swagger||ico||docs||error||refreshToken||useragreement) {
+        if (login||doc||css||js||ui||swagger||ico||docs||error||refreshToken||useragreement||wxPay) {
             //什么也不做
         } else {
             // 获取请求头中JWT的Token
diff --git a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java
index 8adb26e..8014cbe 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java
@@ -75,9 +75,10 @@
         boolean contains = requestUrl.contains("/api/applets/");
         boolean docs = !requestUrl.contains("docs");
         boolean login = !requestUrl.contains("login");
+        boolean wxNotify = !requestUrl.contains("wxNotify");
         boolean refreshToken = !requestUrl.contains("refreshToken");
         boolean useragreement = !requestUrl.contains("useragreement");
-        if (contains&&docs&&login&&refreshToken&&useragreement) {
+        if (contains&&docs&&login&&refreshToken&&useragreement&&wxNotify) {
             configAttributes.add(new SecurityConfig(SecurityConstants.ROLE_APPLETS));
         }
         return configAttributes;

--
Gitblit v1.7.1