huanghongfa
2021-04-20 ac0a5107a0cfa9e2198176d6cdf33f6516edda12
小程序商城模块对接微信支付api
19个文件已修改
1个文件已删除
1个文件已添加
489 ■■■■■ 已修改文件
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/resources/bootstrap.yml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/pom.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/shop/ComShopOrderVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/XMLUtils.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComShopGoodsDAO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/dos/ComShopOrderPayDO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopOrderService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopGoodsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/JWTAuthenticationTokenFilter.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/zuul/src/main/java/com/panzhihua/zuul/filters/SercuritFilter.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ShopApi.java
@@ -7,12 +7,18 @@
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
@@ -213,9 +219,12 @@
    @ApiOperation(value = "小程序微信调起支付")
    @PostMapping("wxpay")
    public R wxPay(@RequestBody OrderPayDTO orderPayDTO){
        return R.ok();
        LoginUserInfoVO loginUserInfo = this.getLoginUserInfo();
        if(loginUserInfo == null){
            return R.fail("请重新登陆");
        }
        orderPayDTO.setOpenId(loginUserInfo.getOpenid());
        return communityService.wxPay(orderPayDTO);
    }
}
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/WxCallbackApi.java
@@ -1,16 +1,21 @@
package com.panzhihua.applets.api;
import com.panzhihua.common.utlis.PayUtil;
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;
import java.util.Map;
/**
 * @auther lyq
@@ -22,10 +27,12 @@
@RequestMapping("/wx/")
public class WxCallbackApi {
    @PostMapping("notify")
    @Resource
    private CommunityService communityService;
    @PostMapping("wxNotify")
    public void payCallback(HttpServletRequest request, HttpServletResponse response) {
        log.info("微信回调接口方法 start");
        log.info("微信回调接口 操作逻辑 start");
        log.info("微信支付回调start");
        String inputLine = "";
        String notityXml = "";
        try {
@@ -35,18 +42,31 @@
            //关闭流
            request.getReader().close();
            log.info("微信回调内容信息:"+notityXml);
            //解析成Map
            Map<String,String> map = PayUtil.doXMLParse(notityXml);
            //判断 支付是否成功
            if("SUCCESS".equals(map.get("result_code"))){
                log.info("微信回调返回是否支付成功:是");
                //获得 返回的商户订单号
                String outTradeNo = map.get("out_trade_no");
                log.info("微信回调返回商户订单号:"+outTradeNo);
                //访问DB
//                WechatAppletGolfPayInfo payInfo = appletGolfPayInfoMapper.selectByPrimaryKey(outTradeNo);
                log.info("微信回调 根据订单号查询订单状态:");
                if("0".equals("0")){
            //解析成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();
@@ -59,14 +79,21 @@
                    PrintWriter writer = response.getWriter();
                    //返回
                    writer.print(buffer.toString());
                }
            }else{
                log.info("微信回调返回支付失败");
                }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();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
springcloud_k8s_panzhihuazhihuishequ/applets/src/main/resources/bootstrap.yml
@@ -25,8 +25,5 @@
    appid: wx0cef797390444b75
    secret: c7ea9aaa7e391a487e8a5b9ba61045d1
    msgDataFormat: JSON
    payKey: 01A9CB2234D7CBD0AC61B75EB1263805
    mchId: 1608439275
    notifyUrl: http://387405oo37.zicp.vip/api/applets/wx/notify
springcloud_k8s_panzhihuazhihuishequ/common/pom.xml
@@ -120,9 +120,9 @@
            <version>2.0.5</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>
    </dependencies>
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/constants/PayCpmstant.java
@@ -9,4 +9,12 @@
    //微信支付统一下单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";
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/OrderPayDTO.java
@@ -15,4 +15,7 @@
    @ApiModelProperty(value = "订单号")
    private String orderNo;
    @ApiModelProperty(value = "订单号",hidden = true)
    private String openId;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/shop/WxPayNotifyOrderDTO.java
New file
@@ -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;
}
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;
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/CommunityService.java
@@ -2092,4 +2092,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);
}
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/HttpClientUtil.java
@@ -119,8 +119,7 @@
            String line = "";
            StringBuffer sb = new StringBuffer();
            for (line = br.readLine(); line != null; line = br.readLine()) {
                sb.append(br.readLine());
                System.out.println(line);
                sb.append(line);
            }
            return sb.toString();
        } catch (MalformedURLException e) {
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/WxPayUtils.java
@@ -1,56 +1,61 @@
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 body, String openid, String outTradeNo, BigDecimal money) throws Exception{
    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", "wx0cef797390444b75");
        params.put("appid", appid);
        params.put("body", body);
        params.put("mch_id", "1608439275");
        params.put("mch_id", mchId);
        params.put("nonce_str",nonceStr);
        params.put("notify_url", "http://387405oo37.zicp.vip/api/applets/wx/notify");
        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("UTF-8", params, "01A9CB2234D7CBD0AC61B75EB1263805"));//MD5签名
        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);
        System.out.println(resXml);
        log.info("请求微信支付返回参数:" + resXml);
        JSONObject data = XMLUtils.xml2Json(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("OK")){
        if(data.get("return_msg").equals(PayCpmstant.RETURN_MSG) && data.get("return_code").equals(PayCpmstant.RETURN_CODE)){
            //将微信统一下单成功的参数拼接再签名
            //统一下单返回prepay_id
            String prepay_id = "prepay_id=" + data.getString("prepay_id");
            String prepayId = "prepay_id=" + data.getString("prepay_id");
            //时间戳
            Long timeStamp = System.currentTimeMillis()/1000;
            //封装需要签名的字段
            SortedMap<Object, Object> payParams = new TreeMap<>();
            params.put("appid", "wx0cef797390444b75");
            params.put("nonce_str",nonceStr);
            params.put("package",nonceStr);
            params.put("signType",nonceStr);
            params.put("timeStamp",nonceStr);
            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",prepay_id);
            result.put("signType","MD5");
            result.put("paySign",PayUtil.createSign("UTF-8", payParams, "01A9CB2234D7CBD0AC61B75EB1263805"));
            result.put("package",prepayId);
            result.put("signType",PayCpmstant.SIGN_TYPE);
            result.put("paySign",PayUtil.createSign(PayCpmstant.DEFAULT_ENCODING, payParams, payKey));
        }
        return result.toJSONString();
    }
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/XMLUtils.java
File was deleted
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ShopApi.java
@@ -467,5 +467,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);
    }
}
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);
}
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{" +
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComShopGoodsService.java
@@ -42,8 +42,6 @@
     */
    R pageGoodsList(PageComShopGoodsDTO pageComShopGoodsDTO);
    /**
     * 编辑商品
     *
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);
}
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));
    }
    /**
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComShopOrderServiceImpl.java
@@ -20,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;
@@ -54,7 +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;
    /**
     * 订单预览
@@ -181,7 +194,6 @@
    public R orderCreate(ComShopOrderCreateDTO orderCreateDTO){
        //创建返回参数
        ComShopOrderVO shopOrderVO = new ComShopOrderVO();
        //查询用户收货地址
        ComShopUserAddressDO userAddressDO = comShopUserAddressDAO.selectById(orderCreateDTO.getReceiverId());
        if(userAddressDO == null){
@@ -195,10 +207,8 @@
        String orderNo = OrderNoUtils.NextOrderNo(userId);
        //配送方式
        Integer deliveryType = 0;
        //订单总金额
        BigDecimal orderTotal = BigDecimal.ZERO;
        //创建订单商品信息
        List<ComShopOrderGoodsDO> orderGoodsDOList = new ArrayList<>();
        if(!orderCreateDTO.getOrderGoodsList().isEmpty()){
@@ -234,12 +244,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);
@@ -256,14 +264,12 @@
            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);
@@ -277,14 +283,18 @@
            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("",orderCreateDTO.getOpenId(),orderNo,orderTotal);
            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());
        }
@@ -635,9 +645,6 @@
        return R.ok(ipage);
    }
    @Override
    public R capitalDetailByStore(Long id) {
        if(id==null){
@@ -646,4 +653,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);
    }
}
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
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;