package com.tenwa.lease.app.quartzmession; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.UUID; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.alibaba.fastjson.JSONObject; import com.amarsoft.are.jbo.JBOException; import com.amarsoft.are.util.StringFunction; import com.amarsoft.awe.util.ASResultSet; import com.amarsoft.awe.util.SqlObject; import com.amarsoft.awe.util.Transaction; import com.amarsoft.dict.als.cache.CacheLoaderFactory; import com.base.util.QuartzUtil; import com.tenwa.httpclient.resources.WechatPropertiesUtil; import com.tenwa.util.SerialNumberUtil; /** * 1:微信公众号信息推送 * @author xiezhiwen */ public class WechatMessagePush implements Job{ private static final Logger logger = LogManager.getLogger(WechatMessagePush.class);// 引入logger日志 public void execute(JobExecutionContext arg0) throws JobExecutionException { Transaction Sqlca=null; String startime = StringFunction.getTodayNow(); Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); String curUserId = userId == null? "system" : userId.toString(); try{ Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); // 执行还款消息推送 String result1 = RefundRemindPush(Sqlca); String result2 = OverdueRefundRemindPush(Sqlca); Sqlca.commit(); logger.info("还款提醒发送状态<<<<<<<<<<<<<: "+result1); logger.info("逾期还款提醒发送状态<<<<<<<<<<: "+result2); QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.WechatMessagePush", "success", "成功", curUserId); }catch(Exception e){ logger.info("<<<<<<<<<<<<<<<<<<<<<<微信推送定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<微信推送定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<<<<<<<<微信推送定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.WechatMessagePush", "error", "失败", curUserId); try { Sqlca.rollback(); } catch (JBOException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { if(Sqlca!=null) { try { Sqlca.commit(); Sqlca.disConnect(); } catch (JBOException e) { e.printStackTrace(); } } } } /** * 1: 还款提醒发送 * @return * @throws Exception */ public String RefundRemindPush(Transaction Sqlca) throws Exception { // 定义全局对象 String contract_number=null;// 合同名称 String customer_num=null; // 客户编码 String cust_name=null; // 客户名称 String plan_list=null; // 客户名称 String mobile=null; // 手机号 String contract_id=null; // 合同id String customer_id=null; // 客户id String openid=null; // 微信标识 String link=null; // 详情链接 String type="1"; // 类型 String keyword1=null;// 还款日期 String keyword2=null;// 还款期次 String keyword3=null;// 还款金额 String keyword4=null;// String uuid=null; // 记录表id String first="尊敬的客户您好,本期还款信息如下:";// 内容头 String remark="请您在还款日前完成还款,感谢您的支持与配合,祝您生活愉快!";// 备注 String updSql=""; String insertSql=""; String msgid =null; String result="推送成功"; String batch=SerialNumberUtil.getWechatBatchNumber(Sqlca); int con=0; // 查询所有需要发送还款提醒的数据 String selSql="SELECT CI.CUSTOMERNAME AS CUST_NAME,WUI.MOBILE_,WUI.CERTID_,LCI.CONTRACT_NUMBER,CI.CUSTOMER_NUM,LRP.PLAN_LIST,LCI.ID AS CONTRACT_ID,CI.CUSTOMERID,WUI.OPENID,CONCAT('/wechat/menu?type=payments&id=',LCI.CONTRACT_NUMBER) AS LINK,CONCAT(CONVERT(YEAR(LRP.PLAN_DATE), CHAR),'年',CONVERT(MONTH(LRP.PLAN_DATE), CHAR),'月',CONVERT(DAY(LRP.PLAN_DATE), CHAR),'日') AS KEYWORD1,CONCAT('第', LRP.PLAN_LIST, '期') KEYWORD2,CONCAT(IFNULL(LRP.RENT, 0) - IFNULL(LRI.RENT, 0),'元') KEYWORD3 FROM WECHAT_USER_INFO WUI LEFT JOIN CUSTOMER_INFO CI ON CI.CERTID = WUI.CERTID_ LEFT JOIN LB_UNION_LESSEE LUL ON LUL.CUSTOMER_ID = CI.CUSTOMERID AND LUL.IS_MAIN = 'Y' LEFT JOIN LB_CONTRACT_INFO LCI ON LCI.ID = LUL.CONTRACT_ID AND LCI.CONTRACT_STATUS = '31' LEFT JOIN DISTRIBUTOR_INFO DI ON DI.DISTRIBUTOR_NO=LCI.DISTRIBUTOR_ID LEFT JOIN LC_RENT_PLAN LRP ON LRP.CONTRACT_ID = LCI.ID LEFT JOIN (SELECT CONTRACT_ID,PLAN_LIST,SUM(RENT) AS RENT FROM LC_RENT_INCOME GROUP BY CONTRACT_ID,PLAN_LIST) LRI ON LRI.CONTRACT_ID = LRP.CONTRACT_ID AND LRI.PLAN_LIST = LRP.PLAN_LIST WHERE WUI.BINDING_STATUS = 'Y' AND IFNULL(WUI.ATTENTION_STATUS, 'Y') <> 'N' AND DI.DISTRIBUTOR_NAME<>'辉煌国际融资租赁(天津)有限公司' AND (TIMESTAMPDIFF(DAY,DATE_FORMAT(NOW(), '%Y-%m-%d'),DATE_FORMAT(LRP.PLAN_DATE, '%Y-%m-%d')) <= 3 AND TIMESTAMPDIFF(DAY,DATE_FORMAT(NOW(), '%Y-%m-%d'),DATE_FORMAT(LRP.PLAN_DATE, '%Y-%m-%d')) >= 0) AND IFNULL(LRP.RENT, 0) - IFNULL(LRI.RENT, 0) > 0 AND NOT EXISTS (SELECT 1 FROM WECHAT_MESSAGE_RECORD WHERE OPENID = WUI.OPENID AND SEND_TYPE = '1' AND CONTRACT_NUMBER = LCI.CONTRACT_NUMBER AND PLAN_LIST = LRP.PLAN_LIST AND SEND_STATUS = 'Y') LIMIT 0, 50000 "; ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); while(rs.next()) { // 获取接口推送所需数据 con++; uuid = UUID.randomUUID().toString().replace("-", ""); openid=rs.getString("openid"); link=rs.getString("link"); keyword1=rs.getString("keyword1"); keyword2=rs.getString("keyword2"); keyword3=rs.getString("keyword3"); contract_number=rs.getString("contract_number"); customer_num=rs.getString("customer_num"); cust_name=rs.getString("cust_name"); mobile=rs.getString("mobile_"); plan_list=rs.getString("plan_list"); contract_id=rs.getString("contract_id"); customer_id=rs.getString("customerid"); // 查寻当条是否是历史失败的 selSql="SELECT openid FROM wechat_message_record WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='1'"; ASResultSet rs1 = Sqlca.getASResultSet(new SqlObject(selSql)); if(!rs1.next()) { insertSql="INSERT INTO WECHAT_MESSAGE_RECORD(ID,BATCH,OPENID,CONTRACT_NUMBER,CUSTOMER_NUM,CUST_NAME,PLAN_LIST,MODILE,SEND_DATE,SEND_TYPE,SEND_CONTENT,SEND_STATUS,CONTRACT_ID,CUSTOMER_ID) VALUES('"+uuid+"',CONCAT('"+batch+"','-','"+con+"'),'"+openid+"','"+contract_number+"','"+customer_num+"','"+cust_name+"','"+plan_list+"','"+mobile+"',DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),'1',CONCAT('"+first+"','还款日期: ','"+keyword1+"',',还款期数: ','"+keyword2+"',',还款金额: ','"+keyword3+"',', ','"+remark+"'),'N','"+contract_id+"','"+customer_id+"')"; Sqlca.executeSQL(new SqlObject(insertSql)); } try { msgid = WechatMessagePush.WechatPush(openid,link,type,first,keyword1,keyword2,keyword3,keyword4,remark); System.out.println(con); } catch (Exception e) { result="推送失败"; e.printStackTrace(); } // 成功改状态, 失败改时间 if(msgid!=null) { updSql="UPDATE wechat_message_record SET MSGID='"+msgid+"',SEND_DATE=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),SEND_STATUS='Y' WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='1'"; Sqlca.executeSQL(new SqlObject(updSql)); }else { result="推送失败"; updSql="UPDATE wechat_message_record SET SEND_DATE=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),SEND_STATUS='N' WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='1'"; Sqlca.executeSQL(new SqlObject(updSql)); } } return result+String.valueOf(con); } /** * 2: 逾期 还款提醒发送 * @return * @throws Exception */ public String OverdueRefundRemindPush(Transaction Sqlca) throws Exception { // 定义全局对象 String contract_number=null;// 合同名称 String customer_num=null; // 客户编码 String cust_name=null; // 客户名称 String plan_list=null; // 客户名称 String mobile=null; // 手机号 String contract_id=null; // 合同id String customer_id=null; // 客户id String openid=null; // 微信标识 String link=null; // 详情链接 String type="2"; // 类型 String keyword1=null; // 还款日期 String keyword2=null; // 应还金额 String keyword3=null; // 逾期金额 String keyword4=null; // 罚息金额 String uuid=null; // 记录表id String first="亲爱的用户您好,您本期应还金额尚未归还,以下是您的账单信息:"; // 内容头 String remark="您已逾期,逾期会产生利息并影响您的个人信用。为了更好地维护您的相关权益,请尽快还款。如需协商 ,请联系客服。"; // 备注 String updSql=""; String insertSql=""; String msgid =null; String result="推送成功"; String batch=SerialNumberUtil.getWechatBatchNumber(Sqlca); int con=0; // 查询所有需要发送还款提醒的数据 //String selSql="SELECT CI.CUSTOMERNAME AS CUST_NAME,WUI.MOBILE_,WUI.CERTID_,LCI.CONTRACT_NUMBER,CI.CUSTOMER_NUM,LRP.PLAN_LIST,LCI.ID AS CONTRACT_ID,CI.CUSTOMERID,WUI.OPENID,CONCAT('/wechat/menu?type=payments&id=',LCI.CONTRACT_NUMBER) AS LINK,CONCAT(CONVERT(YEAR(LRP.PLAN_DATE), CHAR),'年',CONVERT(MONTH(LRP.PLAN_DATE), CHAR),'月',CONVERT(DAY(LRP.PLAN_DATE), CHAR),'日') AS KEYWORD1,CONCAT(ROUND((LRP.RENT + ROUND(IFNULL(getRentPenalty3(LRP.PAYMENT_NUMBER,LRP.PLAN_LIST,IFNULL(LRI.HIRE_DATE,DATE_FORMAT(NOW(), '%y/%m/%d'))),0),2)) - (IFNULL(LRI.RENT, 0) + IFNULL(LRI.PENALTY, 0)),2),'元') AS KEYWORD2,CONCAT((LRP.RENT - IFNULL(LRI.RENT, 0)),'元') AS KEYWORD3,CONCAT(ROUND(IFNULL(getRentPenalty(LRP.PAYMENT_NUMBER,LRP.PLAN_LIST,IFNULL(LRI.HIRE_DATE,DATE_FORMAT(NOW(), '%y/%m/%d'))),0),2),'元') AS KEYWORD4 FROM WECHAT_USER_INFO WUI LEFT JOIN CUSTOMER_INFO CI ON CI.CERTID = WUI.CERTID_ LEFT JOIN LB_UNION_LESSEE LUL ON LUL.CUSTOMER_ID = CI.CUSTOMERID AND LUL.IS_MAIN = 'Y' LEFT JOIN LB_CONTRACT_INFO LCI ON LCI.ID = LUL.CONTRACT_ID AND LCI.CONTRACT_STATUS = '31' LEFT JOIN DISTRIBUTOR_INFO DI ON DI.DISTRIBUTOR_NO=LCI.DISTRIBUTOR_ID LEFT JOIN (SELECT CONTRACT_ID,PLAN_LIST,MAX(PLAN_DATE) AS PLAN_DATE,MAX(PAYMENT_NUMBER) AS PAYMENT_NUMBER,SUM(RENT) AS RENT,SUM(IFNULL(PENALTY, 0)) AS PENALTY FROM LC_RENT_PLAN WHERE TIMESTAMPDIFF(DAY,DATE_FORMAT(PLAN_DATE, '%Y-%m-%d'),DATE_FORMAT(NOW(), '%Y-%m-%d')) >= 3 GROUP BY CONTRACT_ID,PLAN_LIST) LRP ON LRP.CONTRACT_ID = LCI.ID LEFT JOIN (SELECT CONTRACT_ID,PLAN_LIST,SUM(RENT) AS RENT,SUM(IFNULL(PENALTY, 0)) AS PENALTY,MAX(HIRE_DATE) AS HIRE_DATE FROM LC_RENT_INCOME GROUP BY CONTRACT_ID,PLAN_LIST) LRI ON LRI.CONTRACT_ID = LRP.CONTRACT_ID AND LRI.PLAN_LIST = LRP.PLAN_LIST WHERE WUI.BINDING_STATUS = 'Y' AND IFNULL(WUI.ATTENTION_STATUS,'Y')<>'N' AND DI.DISTRIBUTOR_NAME<>'辉煌国际融资租赁(天津)有限公司' AND (IFNULL(LRP.RENT, 0)+ ROUND(IFNULL(getRentPenalty3(LRP.PAYMENT_NUMBER,LRP.PLAN_LIST,IFNULL(LRI.HIRE_DATE,DATE_FORMAT(NOW(), '%y/%m/%d'))),0),2)- IFNULL(LRI.RENT, 0) - IFNULL(LRI.PENALTY, 0)) > 0 AND NOT EXISTS (SELECT 1 FROM WECHAT_MESSAGE_RECORD WHERE OPENID = WUI.OPENID AND SEND_TYPE = '2' AND CONTRACT_NUMBER = LCI.CONTRACT_NUMBER AND PLAN_LIST = LRP.PLAN_LIST AND SEND_STATUS = 'Y') ORDER BY LRP.PLAN_LIST LIMIT 0, 50000 "; String selSql="SELECT CI.CUSTOMERNAME AS CUST_NAME,WUI.MOBILE_,WUI.CERTID_,LCI.CONTRACT_NUMBER,CI.CUSTOMER_NUM,LRP.PLAN_LIST,LCI.ID AS CONTRACT_ID,CI.CUSTOMERID,WUI.OPENID,CONCAT('/wechat/menu?type=payments&id=',LCI.CONTRACT_NUMBER) AS LINK,CONCAT(CONVERT(YEAR(LRP.PLAN_DATE), CHAR),'年',CONVERT(MONTH(LRP.PLAN_DATE), CHAR),'月',CONVERT(DAY(LRP.PLAN_DATE), CHAR),'日') AS KEYWORD1,CONCAT(ROUND((LRP.RENT + ROUND(IFNULL(getRentPenalty(LRP.PAYMENT_NUMBER,LRP.PLAN_LIST,DATE_FORMAT(NOW(), '%Y/%m/%d')),0),2)) - (IFNULL(LRI.RENT, 0) + IFNULL(LRI.PENALTY, 0)),2),'元') AS KEYWORD2,CONCAT((LRP.RENT - IFNULL(LRI.RENT, 0)),'元') AS KEYWORD3,CONCAT(ROUND(IFNULL(getRentPenalty(LRP.PAYMENT_NUMBER,LRP.PLAN_LIST,DATE_FORMAT(NOW(), '%Y/%m/%d')),0)-IFNULL(LRI.PENALTY, 0),2),'元') AS KEYWORD4 FROM WECHAT_USER_INFO WUI LEFT JOIN CUSTOMER_INFO CI ON CI.CERTID = WUI.CERTID_ LEFT JOIN LB_UNION_LESSEE LUL ON LUL.CUSTOMER_ID = CI.CUSTOMERID AND LUL.IS_MAIN = 'Y' LEFT JOIN LB_CONTRACT_INFO LCI ON LCI.ID = LUL.CONTRACT_ID AND LCI.CONTRACT_STATUS = '31' LEFT JOIN DISTRIBUTOR_INFO DI ON DI.DISTRIBUTOR_NO=LCI.DISTRIBUTOR_ID LEFT JOIN (SELECT CONTRACT_ID,PLAN_LIST,MAX(PLAN_DATE) AS PLAN_DATE,MAX(PAYMENT_NUMBER) AS PAYMENT_NUMBER,SUM(RENT) AS RENT,SUM(IFNULL(PENALTY, 0)) AS PENALTY FROM LC_RENT_PLAN WHERE TIMESTAMPDIFF(DAY,DATE_FORMAT(PLAN_DATE, '%Y-%m-%d'),DATE_FORMAT(NOW(), '%Y-%m-%d')) >= 3 GROUP BY CONTRACT_ID,PLAN_LIST) LRP ON LRP.CONTRACT_ID = LCI.ID LEFT JOIN (SELECT CONTRACT_ID,PLAN_LIST,SUM(RENT) AS RENT,SUM(IFNULL(PENALTY, 0)) AS PENALTY,MAX(HIRE_DATE) AS HIRE_DATE FROM LC_RENT_INCOME GROUP BY CONTRACT_ID,PLAN_LIST) LRI ON LRI.CONTRACT_ID = LRP.CONTRACT_ID AND LRI.PLAN_LIST = LRP.PLAN_LIST WHERE WUI.BINDING_STATUS = 'Y' AND IFNULL(WUI.ATTENTION_STATUS,'Y')<>'N' AND DI.DISTRIBUTOR_NAME<>'辉煌国际融资租赁(天津)有限公司' AND (IFNULL(LRP.RENT, 0)- IFNULL(LRI.RENT, 0)) > 0 AND NOT EXISTS (SELECT 1 FROM WECHAT_MESSAGE_RECORD WHERE OPENID = WUI.OPENID AND SEND_TYPE = '2' AND CONTRACT_NUMBER = LCI.CONTRACT_NUMBER AND PLAN_LIST = LRP.PLAN_LIST AND SEND_STATUS = 'Y') ORDER BY LRP.PLAN_LIST LIMIT 0, 50000 "; ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); // 循环, 逐条发送 while(rs.next()) { con++; // 获取接口推送所需数据 uuid = UUID.randomUUID().toString().replace("-", ""); openid=rs.getString("openid"); link=rs.getString("link"); keyword1=rs.getString("keyword1"); keyword2=rs.getString("keyword2"); keyword3=rs.getString("keyword3"); keyword4=rs.getString("keyword4"); contract_number=rs.getString("contract_number"); customer_num=rs.getString("customer_num"); cust_name=rs.getString("cust_name"); mobile=rs.getString("mobile_"); plan_list=rs.getString("plan_list"); contract_id=rs.getString("contract_id"); customer_id=rs.getString("customerid"); // 查寻当条是否是历史失败的 selSql="SELECT openid FROM wechat_message_record WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='2'"; ASResultSet rs1 = Sqlca.getASResultSet(new SqlObject(selSql)); if(!rs1.next()) { insertSql="INSERT INTO WECHAT_MESSAGE_RECORD(ID,BATCH,OPENID,CONTRACT_NUMBER,CUSTOMER_NUM,CUST_NAME,PLAN_LIST,MODILE,SEND_DATE,SEND_TYPE,SEND_CONTENT,SEND_STATUS,CONTRACT_ID,CUSTOMER_ID) VALUES('"+uuid+"',CONCAT('"+batch+"','-','"+con+"'),'"+openid+"','"+contract_number+"','"+customer_num+"','"+cust_name+"','"+plan_list+"','"+mobile+"',DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),'2',CONCAT('"+first+"','还款日期: ','"+keyword1+"',',还款金额: ','"+keyword2+"',',逾期金额: ','"+keyword3+"',',罚息金额: ','"+keyword4+"',',','"+remark+"'),'N','"+contract_id+"','"+customer_id+"')"; Sqlca.executeSQL(new SqlObject(insertSql)); } try { msgid = WechatMessagePush.WechatPush(openid,link,type,first,keyword1,keyword2,keyword3,keyword4,remark); System.out.println(con); } catch (Exception e) { result="推送失败"; e.printStackTrace(); } // 成功改状态, 失败改时间 if(msgid!=null) { updSql="UPDATE wechat_message_record SET MSGID='"+msgid+"',SEND_DATE=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),SEND_STATUS='Y' WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='2'"; Sqlca.executeSQL(new SqlObject(updSql)); }else { result="推送失败"; updSql="UPDATE wechat_message_record SET SEND_DATE=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'),SEND_STATUS='N' WHERE OPENID='"+openid+"' AND CONTRACT_NUMBER='"+contract_number+"' AND PLAN_LIST='"+plan_list+"' AND SEND_TYPE='2'"; Sqlca.executeSQL(new SqlObject(updSql)); } } return result+String.valueOf(con); } /** * 3: 调用消息推送接口 */ public synchronized static String WechatPush(String openid,String link,String type,String first,String keyword1,String keyword2,String keyword3,String keyword4,String remark) throws Exception { String strURL = WechatPropertiesUtil.getConfigValue("WechatURL"); URL url = new URL(strURL); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setDoOutput(true); httpConn.setDoInput(true); httpConn.setRequestProperty("Content-Type", "application/json"); httpConn.setRequestMethod("POST"); httpConn.connect(); OutputStreamWriter out = new OutputStreamWriter(httpConn.getOutputStream(), "UTF-8"); // 发送请求参数 JSONObject json = new JSONObject(); json.put("openid", openid);// 微信的uuid json.put("type", type);// 推送类型 json.put("link", link);// 推送详情的连接,绑定成功的推送参数为空 JSONObject data = new JSONObject(); data.put("first", first);// 推送的头部 data.put("keyword1", keyword1);// 关键字1 data.put("keyword2", keyword2);// 关键字2 data.put("keyword3", keyword3);// 关键字3 data.put("keyword4", keyword4);// 关键字4 data.put("remark", remark);// 备注 json.put("data", data); out.write(json.toString()); out.flush(); out.close(); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); } catch (Exception e) { e.printStackTrace(); logger.info("<<<<<<<<<<<<<<<获取回执信息失败>>>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<获取回执信息失败>>>>>>>>>>>>>>>>>>>"); logger.info("<<<<<<<<<<<<<<<获取回执信息失败>>>>>>>>>>>>>>>>>>>"); throw new Exception("推送失败!"); } String line; StringBuffer buffer = new StringBuffer(); while ((line = reader.readLine()) != null) { buffer.append(line); } reader.close(); httpConn.disconnect(); logger.info("微信接口返回信息" + buffer.toString()); JSONObject resultjson = JSONObject.parseObject(buffer.toString()); String msgid = null; if (resultjson.get("errcode").toString().equals("0")) {// 推送成功 msgid = resultjson.get("msgid").toString(); } else {// 推送失败 throw new Exception("推送失败"); } return msgid; } }