package com.jysoft.weChat.service; import java.net.URLEncoder; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jysoft.AccessTokenServlet; import com.jysoft.weChat.util.HttpUtil; import com.jysoft.weChat.util.MessageUtil; import com.jysoft.weChat.util.Wechatconfig; import com.jysoft.weChat.vo.ContentVo; import com.jysoft.weChat.vo.TemplateMessageVo; import com.nationalelectirc.Constant.Constant; import com.nationalelectirc.utils.RestResult; import com.nationalelectirc.utils.Utils; import com.nationalelectric.greenH5.utils.SmsUtils; import com.sgcc.uap.persistence.IHibernateDao; import com.sgcc.uap.persistence.util.SqlFileUtil; import net.sf.json.JSONObject; /** * @author yeping * @date 2019-10-15 * @功能 微信服务号功能集中管理类 */ @Service public class WechatService { @Autowired private IHibernateDao hibernateDao; /******************************************* 模板推送功能 ************************************************************/ /** * 模板消息推送功能 * * @param alarmResult * * @throws Exception */ // public void sendTemplateMessage(IFResult alarmResult) throws Exception { // // List> openidList = findUserOpnid(); // // String access_token = Wechatconfig.accessToken.getTokenName(); // String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token; // // Map data = new HashMap(); // // data.put("first", new ContentVo(alarmResult.getContent(), "#173177")); // data.put("keyword2", new ContentVo(alarmResult.getDate(), "#black")); // data.put("keyword1", new ContentVo(alarmResult.getAlarmType(), "#black")); // data.put("remark", new ContentVo("查看详情", "#173177")); // // xp0b_vaeeWC2I6SM6FvC0kBoocRrhyJBK41HenGmUhw 模板ID // // for (Map one : openidList) { // String openId = ParseUtil.parseText(one.get("OPEN_ID")); // if (openId.length() > 0) { // TemplateMessageVo temp = new TemplateMessageVo(openId, "xp0b_vaeeWC2I6SM6FvC0kBoocRrhyJBK41HenGmUhw", Wechatconfig.DNS + Wechatconfig.messageUrl + "?warnId=" + alarmResult.getAlarmID(), "#173177", data); // temp.setData(data); // String jsonString = JSONObject.fromObject(temp).toString().replace("day", "Day"); // String result = HttpUtil.postHttpsResponse(url, jsonString); // System.out.println(result); // } // } // } // 需要推送预警用户(推送给所有注册用户) // TODO @SuppressWarnings({ "unchecked", "deprecation" }) public List> findUserOpnid() { List> list = hibernateDao.queryForListWithSql(SqlFileUtil.get("findOpenid")); return list; } /******************************************* 微信注册页面功能 ************************************************************/ /** * @author YEP * @date 2019-11-01 * @desc 保存用户信息 */ public RestResult saveWechatUser(String name, String phone, String openid, String IDNumber, String headimgUrl) { // 验证验证码时效性 // Map map = (Map) request.getSession().getAttribute(yzmid); // long time = ParseUtil.parseLong(map.get("time")); // if (new Date().getTime() - time > 60000) { // // return new RestResult("0", "验证码过期"); // } // String oldCode = ParseUtil.parseText(map.get("code")); // if (!yzm.equals(oldCode)) { // return new RestResult("0", "验证码输入不正确"); // } // 根据手机号码查找用户,查找到用户后,将用户的openid保存到数据库 String findOneSql = "select count(1) from green_user_info a where a.is_deleted='N' and a.idnumber=?"; System.out.println(findOneSql); int count = hibernateDao.queryForIntWithSql(findOneSql,new Object[] {IDNumber}); if (count > 0) { // 更新用户信息 String updateUserSql = "update green_user_info set wxopenid=?, mobile=?,real_name=?,wx_profile=?,gmt_modified=sysdate() where idnumber=? and is_deleted='N'"; hibernateDao.executeSqlUpdate(updateUserSql, new Object[] { openid, phone, name, IDNumber ,headimgUrl}); } else { // 插入用户信息 String insertUserSql = "insert into green_user_info (id,real_name,mobile,idnumber,wxopenid,wx_profile,is_deleted,gmt_created) values (?,?,?,?,?,?,'N',sysdate())"; String id = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); hibernateDao.executeSqlUpdate(insertUserSql, new Object[] { id, name, phone, IDNumber, openid ,headimgUrl}); } return new RestResult("1", "用户注册成功"); } @SuppressWarnings({ "deprecation", "unchecked" }) public Map findUserByOpenid(String openid) { Map rMap = hibernateDao.queryForMapWithSql(SqlFileUtil.get("findUserByOpenid"), new Object[] { openid }); return rMap; } public RestResult getCodeInfo(String phone) { // 验证码 String code = MessageUtil.getVerifyCode(); String key = UUID.randomUUID().toString().replaceAll("-",""); try { Map res = new HashMap(); res.put("time", new Date().getTime()); res.put("code", code); Utils.map.put(key, res); //session.setAttribute(key, res); // 短信发送 String content = new String("验证码:" + code + "。如非本人操作,请忽略此短信。"); String state = SmsUtils.sendSms(phone, content); System.out.println(code); return new RestResult(state, key); } catch (Exception e) { e.printStackTrace(); return new RestResult(Constant.FAILED, key); } } /** * 模板消息推送功能 * * @param data:推送内容;tempId:推送模板ID;openid 推送者openid;detailUrl:详细信息条状url;color:跳转详情url * * @throws Exception */ public void sendTemplateMessage(Map data, String tempId, String openid, String detailUrl, String color) throws Exception { String access_token = Wechatconfig.accessToken.getTokenName(); String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token; if (openid.length() > 0) { TemplateMessageVo temp = new TemplateMessageVo(openid, tempId, detailUrl, color, data); temp.setData(data); String jsonString = JSONObject.fromObject(temp).toString().replace("day", "Day"); String result = HttpUtil.postHttpsResponse(url, jsonString); System.out.println(result); } } // 模版消息推送公用版 public void publishMsg(Map data, String toUserOpenId, Integer type) throws Exception { // String tempId = ""; // 模版id // String detailUrl = Wechatconfig.DETAIL_URL; // 详情地址 // if (type.equals(1)) { // 访客申请 推送给 被访人 // tempId = Wechatconfig.VISITOR_REQ_TEMP; // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // //+ URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.fksqUrl+"?openId='"+toUserOpenId+"'") + "&state=STATE#wechat_redirect"; // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } else if (type.equals(2)) { // 被访人审核后 通知 访客审核结果 // tempId = Wechatconfig.VISITOR_RES_TEMP; // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } else if (type.equals(3)) { // tempId = Wechatconfig.USER_UPD_TEMP; // 用户注册成功 通知 管理员审核 // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } // else if (type.equals(4)) { // tempId = Wechatconfig.CAR_PARK_TIP; // 用户注册成功 通知 管理员审核 // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } // else if (type.equals(5)) { // tempId = Wechatconfig.VISITOR_OVER; // 用户注册成功 通知 管理员审核 // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // }else if(type.equals(6)){ // tempId = Wechatconfig.SERVICE_NOTICE;//服务通知 (理发、取车、评价) // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } // else if(type.equals(7)){ // tempId = Wechatconfig.PICKUP_GOODS;//服务通知 (理发、取车、评价) // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } // else if(type.equals(8)){ // tempId = Wechatconfig.CHANGE_APPOINTMENT; // detailUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + Wechatconfig.appId + "&response_type=code" + "&scope=snsapi_userinfo" + "&redirect_uri="// // + URLEncoder.encode(Wechatconfig.DNS + Wechatconfig.zhhqUrl) + "&state=STATE#wechat_redirect"; // } // if (!tempId.equals("")) { // String access_token = Wechatconfig.accessToken.getTokenName(); // if (access_token == null || access_token.equals("")) { // Wechatconfig.accessToken = AccessTokenServlet.getAccessToken(); // access_token = Wechatconfig.accessToken.getTokenName(); // } // String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token; // if (toUserOpenId.length() > 0) { // TemplateMessageVo temp = new TemplateMessageVo(toUserOpenId, tempId, detailUrl, "#173177", data); // temp.setData(data); // String jsonString = JSONObject.fromObject(temp).toString().replace("day", "Day"); // String result = HttpUtil.postHttpsResponse(url, jsonString); // // System.out.println(result); // JSONObject rJsonObject = JSONObject.fromObject(result); // if (rJsonObject.getInt("errcode") == 0) { // System.out.println("success"); // } else if (rJsonObject.getInt("errcode") == 40001 || rJsonObject.getInt("errcode") == 41001) { // System.out.println("token过期 重新获取 "); // Wechatconfig.accessToken = AccessTokenServlet.getAccessToken(); // access_token = Wechatconfig.accessToken.getTokenName(); // url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + access_token; // TemplateMessageVo temp1 = new TemplateMessageVo(toUserOpenId, tempId, detailUrl, "#173177", data); // temp.setData(data); // String jsonString1 = JSONObject.fromObject(temp1).toString().replace("day", "Day"); // String result1 = HttpUtil.postHttpsResponse(url, jsonString1); // System.out.println("token 重新获取后发送消息结果:"+result1); // } // } // } } }