package com.kidgrow.oprationcenter.controller.weixin; import cn.hutool.http.HttpUtil; 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.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; 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; @Value("${wechat.miniapp.appid}") private String APPID; @Value("${wechat.miniapp.secret}") private String SECRET; @Value("${wechat.apiUrl}") private String APIURL; /** * 测试微信的预支付接口 * @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; } /** * 公众号或者小程序获取 openid * @param code * @return */ @GetMapping("/getOpenId") public ResultBody getOpenId(@RequestParam("code")String code){ if (StringUtils.isBlank(code)) { return ResultBody.failed("请输入code"); } Map map=new HashMap<>(); map.put("appid",APPID); map.put("secret",SECRET); map.put("js_code",code); map.put("grant_type","authorization_code"); String s = HttpUtil.get(APIURL + "/sns/jscode2session?", map); return ResultBody.ok().data(s); } 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(); } }