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<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",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<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.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<String, String> 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<String,Object> 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<String,Object> map=null;
|
ResultBody save = weixinController.save(map);
|
String data = (String)save.getData();
|
}
|
|
}
|