forked from kidgrow-microservices-platform

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.kidgrow.oprationcenter.controller.weixin;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kidgrow.common.model.ResultBody;
import com.kidgrow.common.utils.DateUtils;
import com.kidgrow.common.utils.QRCodeUtil;
import com.kidgrow.common.utils.StringUtils;
import com.kidgrow.oprationcenter.config.weixin.MyConfig;
import com.kidgrow.oprationcenter.config.weixin.WXPay;
import com.kidgrow.oprationcenter.config.weixin.WXPayUtil;
import com.kidgrow.oprationcenter.config.weixin.WeiXinOfficPayProperties;
import com.kidgrow.oprationcenter.model.SaasClientPay;
import com.kidgrow.oprationcenter.service.ISaasClientPayService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
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.util.*;
 
 
@Slf4j
@RestController
@RequestMapping("/wxController")
@Api(tags = "复诊相关操作")
public class WxController  {
    /**
     * @param map
     * @return
     */
    @Autowired
    ISaasClientPayService iSaasClientPayService;
    @Resource
    WeiXinOfficPayProperties weiXinOfficPayProperties;
 
    @ApiOperation(value = "保存")
    @PostMapping("pay")
    public ResultBody save(@RequestBody Map<String,Object> map) throws Exception {
        Long hospitalId = MapUtils.getLong(map, "hospitalId");
        Long doctorId = MapUtils.getLong(map, "doctorId");
        Long diaId = MapUtils.getLong(map, "diaId");
        if (hospitalId!=null) {
            return ResultBody.failed().data("请输入医院id");
        }
        if (doctorId!=null) {
            return ResultBody.failed().data("请输入医生id");
        }
        if (diaId!=null) {
            return ResultBody.failed().data("请输入诊断记录ID");
        }
        Map<String,String> jsonObject=new HashMap<>();
        Map<String,Object> mapto=new HashMap<>();
        jsonObject.put("body","腾讯");//商品描述
        jsonObject.put("out_trade_no","20150806123434");//商户订单号
        jsonObject.put("total_fee","1");//标价金额
        jsonObject.put("spbill_create_ip","192.168.2.240");//终端IP
//        jsonObject.put("notify_url",myConfig.getPayNotifyUrl());//通知地址
        jsonObject.put("notify_url","http://open.zuul.kidgrow.cloud/api-record/wxController/callback");//通知地址
        jsonObject.put("trade_type","NATIVE");//交易类型
        MyConfig wxPayConfig= new MyConfig(weiXinOfficPayProperties);
 
        WXPay wxPay=new WXPay(wxPayConfig);
        Map<String, String> stringStringMap = wxPay.fillRequestData(jsonObject);
        Map<String, String> result = wxPay.unifiedOrder(stringStringMap);
        String resultStr = result.get("code_url");
        if(result.get("code_url")==null|| StringUtils.isBlank(resultStr)){
            return ResultBody.failed().data("生成二维码失败");
        }
        SaasClientPay saasClientPay=new SaasClientPay();
        saasClientPay.setId(UUID.randomUUID().toString().replaceAll("_", ""));
        saasClientPay.setCreateHospitalDepartment("");
        saasClientPay.setCreateHospitalDepartid("");
        saasClientPay.setCreateHospitalId(Long.valueOf(1L));
        saasClientPay.setPayPrice(1);
        saasClientPay.setCreateHospitalName("");
        saasClientPay.setOutTradeNo(jsonObject.get("out_trade_no"));
        saasClientPay.setPayTime(new Date());
        saasClientPay.setPayStatus(0);
        saasClientPay.setPayMethod(0);
        saasClientPay.setDiaId("1");
        boolean save = iSaasClientPayService.saveOrUpdate(saasClientPay);
        String s = QRCodeUtil.creatRrCode(resultStr, 200, 200, 0).replaceAll("\n","").replaceAll("\r","");
        return ResultBody.ok().data(s);
    }
    @RequestMapping("/callback")
    public void OrderCallBack(HttpServletRequest request, HttpServletResponse response,Map<String,Object> map) throws Exception {
        Map<String, String> requestMap = this.getRequestMap(request.getParameterMap());
        log.error("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww");
        log.error(requestMap.toString());
        log.error("wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww");
        log.error(map.toString());
        log.error("eeeeeeeeeeeeeeeeeeeeee");
        if(WXPayUtil.isSignatureValid(requestMap, "GSFcX6WdgRTAS6154EW14WE3SGBSER49")){
            //支付成功
            if(requestMap.get("result_code").equals("SUCCESS")){
                //更新状态 out_trade_no
                QueryWrapper queryWrapper = new QueryWrapper();
                queryWrapper.eq("out_trade_no",requestMap.get("out_trade_no"));
                queryWrapper.eq("pay_status",0);
                List<SaasClientPay> list = iSaasClientPayService.list(queryWrapper);
                if(!list.isEmpty()){
                    SaasClientPay saasClientPay = list.get(0);
                    saasClientPay.setPayTime(DateUtils.parseDate(requestMap.get("time_end")));
                    saasClientPay.setPayStatus(2);
                    saasClientPay.setTradeNo(requestMap.get("transaction_id"));
                    boolean b = iSaasClientPayService.saveOrUpdate(saasClientPay);
                }
            }
        }else {
            System.out.println("验签失败");
        }
    }
    private Map<String,String> getRequestMap(Map<String,String[]> requestParams){
        Map<String,String> params = new HashMap<>();
        for (String name : requestParams.keySet()) {
            String[] values = requestParams.get(name);
            String valueStr = "";
            for (int i = 0; i < values.length; i++) {
                valueStr = (i == values.length - 1) ? valueStr + values[i]
                        : valueStr + values[i] + ",";
            }
            params.put(name, valueStr);
            System.out.println(name+" ==> "+valueStr);
        }
        return params;
    }
    public static void main(String[] args) throws Exception {
        WxController weixinController=new WxController();
        Map<String,Object> map=null;
        ResultBody save = weixinController.save(map);
        String data = (String)save.getData();
    }
 
}