package com.kidgrow.oprationcenter.controller.weixin; import com.kidgrow.common.model.ResultBody; import com.kidgrow.common.utils.QRCodeUtil; import com.kidgrow.common.utils.StringUtils; import com.kidgrow.oprationcenter.model.SaasClientPay; import com.kidgrow.oprationcenter.service.ISaasClientPayService; import com.kidgrow.oprationcenter.service.WxService; import com.kidgrow.oprationcenter.weixin.MyConfig; import com.kidgrow.oprationcenter.weixin.WXPay; import com.kidgrow.oprationcenter.weixin.WXPayUtil; import com.kidgrow.oprationcenter.weixin.WeiXinOfficPayProperties; 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.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.*; @Slf4j @RestController @RequestMapping("/wxController") @Api(tags = "复诊相关操作") public class WxController { /** * @param map * @return */ @Autowired ISaasClientPayService iSaasClientPayService; @Resource WeiXinOfficPayProperties weiXinOfficPayProperties; @Autowired WxService wxService; /** * 测试微信的预支付接口 * @param map * @return * @throws Exception */ @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",UUID.randomUUID().toString().replaceAll("-",""));//商户订单号 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.setPayPrice(1); saasClientPay.setCreateHospitalName(""); saasClientPay.setOutTradeNo(jsonObject.get("out_trade_no")); saasClientPay.setPayTime(new Date()); saasClientPay.setPayStatus(0); saasClientPay.setPayMethod(0); saasClientPay.setDiaId("1"); saasClientPay.setCreateTime(new Date()); boolean save = iSaasClientPayService.saveOrUpdate(saasClientPay); String s = QRCodeUtil.creatRrCode(resultStr, 200, 200, 0).replaceAll("\n","").replaceAll("\r",""); return ResultBody.ok().data(s); } /** * 微信的回调接口 * @param request * @param response * @return * @throws Exception */ @RequestMapping("/callback") public String OrderCallBack(HttpServletRequest request, HttpServletResponse response) throws Exception { InputStream inStream = request.getInputStream(); ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inStream.read(buffer)) != -1) { outSteam.write(buffer, 0, len); } String resultxml = new String(outSteam.toByteArray(), "utf-8"); Map requestMap = WXPayUtil.xmlToMap(resultxml); String callback = wxService.callback(requestMap); return callback; } 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(); } }