package com.happy.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.happy.Model.*; import com.happy.Unitil_nsh.TLinx2Util; import com.happy.Unitil_nsh.TLinxAESCoder; import com.happy.Unitil_nsh.TestParams; import com.happy.common.wx.WxUtil; import com.happy.dao.ElecDao; import com.happy.service.ElecService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.TreeMap; @Service("ElecService") public class ElecServiceImpl implements ElecService { @Autowired public ElecDao elecDao; public ElecDao getElecDao() { return elecDao; } public void setElecDao(ElecDao elecDao) { this.elecDao = elecDao; } public List querySchool(){ return elecDao.querySchool(); } public List queryBuild(String school){ return elecDao.queryBuild(school); } public List queryFloors(String school, String build){ return elecDao.queryFloors(school, build); } public List queryDom(String school, String build, String floors){ return elecDao.queryDom(school, build, floors); } public List queryBuildByDom(String dom){ return elecDao.queryBuildByDom(dom); } public List queryUser_id(String school, String dom){ return elecDao.queryUser_id(school, dom); } public List queryBuildByPoint(String pointid){ return elecDao.queryBuildByPoint(pointid); } public JSONObject payOrder(String outNo, String pmtTag, String pmtName, String ordName, Integer originalAmount, Integer discountAmount, Integer ignoreAmount, Integer tradeAmount, String tradeAccount, String tradeNo, String tradeResult, String remark, String authCode, String tag, String jumpUrl, String notifyUrl,String sub_openid) { JSONObject resultjson = new JSONObject(); // 初始化参数 String timestamp = new Date().getTime() / 1000 + ""; // 时间 try { // 固定参数 TreeMap postmap = new TreeMap(); // 请求参数的map postmap.put("open_id", TestParams.OPEN_ID); postmap.put("timestamp", timestamp); TreeMap datamap = new TreeMap(); // data参数的map datamap.put("out_no", outNo); datamap.put("pmt_tag", pmtTag); datamap.put("pmt_name", pmtName); datamap.put("ord_name", ordName); datamap.put("original_amount", originalAmount + ""); datamap.put("discount_amount", discountAmount + ""); datamap.put("ignore_amount", ignoreAmount + ""); datamap.put("trade_amount", tradeAmount + ""); datamap.put("trade_account", tradeAccount); datamap.put("trade_no", tradeNo); datamap.put("trade_result", tradeResult); datamap.put("remark", remark); datamap.put("tag", tag); datamap.put("notify_url", notifyUrl); datamap.put("sub_appid", WeiXinUtil.appid_elcn); datamap.put("sub_openid", sub_openid); datamap.put("JSAPI","1"); /** * 1 data字段内容进行AES加密,再二进制转十六进制(bin2hex) */ TLinx2Util.handleEncrypt(datamap, postmap); /** * 2 请求参数签名 按A~z排序,串联成字符串,先进行sha1加密(小写),再进行md5加密(小写),得到签名 */ TLinx2Util.handleSign(postmap); /** * 3 请求、响应 */ String rspStr = TLinx2Util.handlePost(postmap, TestParams.PAYORDER); //System.out.println("====post响应字符串= " + rspStr); /** * 4 验签 有data节点时才验签 */ JSONObject respObject = JSONObject.parseObject(rspStr); //System.out.println("====响应错误码:" + respObject.get("errcode")); //System.out.println("====响应错误提示:" + respObject.get("msg")); //System.out.println(respObject); Object dataStr = respObject.get("data"); if (!rspStr.isEmpty() && (dataStr != null)) { if (TLinx2Util.verifySign(respObject)) { // 验签成功 /** * 5 AES解密,并hex2bin */ String respData = TLinxAESCoder.decrypt(dataStr.toString(), TestParams.OPEN_KEY); System.out.println("=================响应data内容= " + respData); JSONObject jsonObject = JSONObject.parseObject(respData); System.out.println("appid: "+jsonObject); //Object tradeQrcode = jsonObject.get("trade_qrcode"); resultjson.put("timeStamp", jsonObject.get("timeStamp")); resultjson.put("nonceStr", jsonObject.get("nonceStr")); resultjson.put("appId", jsonObject.get("appId")); resultjson.put("signType", jsonObject.get("signType")); resultjson.put("package", jsonObject.get("package")); resultjson.put("paySign", jsonObject.get("paySign")); return resultjson; //System.out.println("=================支付二维码地址= " + tradeQrcode.toString()); //System.out.println("=================trade_result= " + jsonObject.get("trade_result").toString()); } else { //System.out.println("==========验签失败=========="); return resultjson; } } else { //System.out.println("==========没有返回data数据=========="); return resultjson; } } catch (Exception e) { e.printStackTrace(); return resultjson; } } public List queryAll(){ return elecDao.queryAll(); } public List queryDetailAll(){ return elecDao.queryDetailAll(); } public List queryUse(){ return elecDao.queryUse(); } public int updateUseState(String pointid, String dataTime){ return elecDao.updateUseState(pointid, dataTime); } public List queryRe(){ return elecDao.queryRe(); } // 金额要设置两处 public static void main(String[] args) { String orderNo = WxUtil.mchOrderNo(); System.out.println(orderNo); JSONObject j = new ElecServiceImpl().payOrder(orderNo, "WeixinJXYL", null, "自定义订单名称", 1, 0, 0, 1, null, null, null, null, null, "附加数据", null, "http://www.baidu.com/tlinx2apidemo1/callback/scanpay_cashier/payResult", ""); System.out.println(j); } public int insertDetail(Detail_elc detail_elc){ return elecDao.insertDetail(detail_elc); } public List queryByTimeAndPoint(String pointid, String dataTime){ return elecDao.queryByTimeAndPoint(pointid, dataTime); } public int updateUse(String pointid, String dataTime, double use_elc){ return elecDao.updateUse(pointid, dataTime, use_elc); } public List queryByPointAndDay(String pointid, String day_time){ return elecDao.queryByPointAndDay(pointid,day_time); } public int updateRe(String pointid, String dataTime, double recharge_elc){ return elecDao.updateRe(pointid, dataTime, recharge_elc); } public int updateReState(String pointid, String dataTime){ return elecDao.updateReState(pointid,dataTime); } public List queryUsable(){ return elecDao.queryUsable(); }; public int updateUsable(String pointid, String dataTime, double usable_elc){ return elecDao.updateUsable(pointid,dataTime,usable_elc); }; public int updateUsableState(String pointid, String dataTime){ return elecDao.updateUsableState(pointid, dataTime); } public List queryDayPower(String dom, String sqlx){ return elecDao.queryDayPower(dom, sqlx); } }