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 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 jsonObject=new HashMap<>(); Map 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 stringStringMap = wxPay.fillRequestData(jsonObject); Map 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 map) throws Exception { Map 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 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 getRequestMap(Map requestParams){ Map 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 map=null; ResultBody save = weixinController.save(map); String data = (String)save.getData(); } }