最近在老家出差,老家电网改革,使用了智能电表,把老式电表全部换了还给了一个客户号,
终于也可以在支付宝什么的交电费了,但我们那里支付宝还不能查询剩余多少钱,这让人很恼火,
于是就来国家电网http://www.95598.cn/person/index.shtml 查询了一下,发现需要客户号、查询密码、验证码,客户号我知道,查询密码是不知道的,随便输入,提示错误,
于是打95598问了下客服,得知了默认密码是6个8,查询了一下,出来消息了,但想每次都上电脑上查,貌似有点不方便,就想自己做一个模拟提交的,
模拟提交就要解决验证码识别的问题,看看也不复杂,就捣鼓了一会,然后分析提交的信息及url,
然后看到一个http://www.95598.cn/95598/per/shortCut/getShortCutAccount 这个地址,只传了2个参数,一个客户号,还有一个不知道是什么,
就直接测试了下这个url,post提交了两个参数,然后居然信息直接出来了,
还是josn格式。。。客户名称、电表地址、电表号,余额、违约金、欠费信息,还有部分类型的客户居然还带近期的电费记录,
到这我就想问特么你之前验证的查询密码和验证码了 干什么用的? 只是个慌子吗?我书都的少,你别骗我,這么大一个国家电网,居然这个查询密码是个渣?
好吧 代码我也上上来吧,但没什么技术含量了
/// <summary> /// 获取电费 /// </summary> /// <param name="consNo">客户号</param> /// <returns></returns> public static void GetPowerRate<T>(T consNo) { HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("http://www.95598.cn/95598/per/shortCut/getShortCutAccount"); httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; httpWebRequest.Method = "POST"; var data = System.Text.Encoding.UTF8.GetBytes(string.Format("consNo={0}&orgNo=43101", consNo)); using (Stream stream = httpWebRequest.GetRequestStream()) { stream.Write(data, 0, data.Length); stream.Close(); } data = null; Result result = new Result(); try { HttpWebResponse webResponse = httpWebRequest.GetResponse() as HttpWebResponse; using (System.IO.StreamReader stream = new StreamReader(webResponse.GetResponseStream())) { result = Newtonsoft.Json.JsonConvert.DeserializeObject<Result>(stream.ReadToEnd()); } httpWebRequest = null; webResponse.Close(); webResponse = null; } catch { } result.billInfo.consNo = consNo.ToString(); Write(result); }
返回json 示例:
"{/"statusCode/":200,/"orgNo/":/"43101/",/"billInfo/":{/"errorCode/":null,/"count/":/"21/",/"errorMessage/":null,/"orgNo/":/"xxx52/",/"consNo/":/"1xxx4/",/"consName/":/"唐xx/",/"elecAddr/":/"岳麓-长沙市岳麓区望岳路xxx/",/"consSortCode/":/"城网低压居民/",/"rtnCode/":null,/"rtnMsg/":null,/"acctOrgNo/":null,/"purchaseType/":/"普通缴费/",/"balLists/":[{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000360600225/",/"rcvblAmt/":/"27.64/",/"owePenalty/":/"0/",/"rcvedAmt/":/"27.64/",/"oweAmt/":/"0/",/"rcvblYm/":/"201412/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000384456503/",/"rcvblAmt/":/"27.64/",/"owePenalty/":/"0/",/"rcvedAmt/":/"27.64/",/"oweAmt/":/"0/",/"rcvblYm/":/"201501/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000417908221/",/"rcvblAmt/":/"1.76/",/"owePenalty/":/"0/",/"rcvedAmt/":/"1.76/",/"oweAmt/":/"0/",/"rcvblYm/":/"201503/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000458719783/",/"rcvblAmt/":/"32.93/",/"owePenalty/":/"0/",/"rcvedAmt/":/"32.93/",/"oweAmt/":/"0/",/"rcvblYm/":/"201505/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000475907830/",/"rcvblAmt/":/"33.52/",/"owePenalty/":/"0/",/"rcvedAmt/":/"33.52/",/"oweAmt/":/"0/",/"rcvblYm/":/"201506/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000494109461/",/"rcvblAmt/":/"114.13/",/"owePenalty/":/"0/",/"rcvedAmt/":/"114.13/",/"oweAmt/":/"0/",/"rcvblYm/":/"201507/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000517111477/",/"rcvblAmt/":/"84.67/",/"owePenalty/":/"0/",/"rcvedAmt/":/"5.87/",/"oweAmt/":/"78.8/",/"rcvblYm/":/"201508/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000400353270/",/"rcvblAmt/":/"11.76/",/"owePenalty/":/"0/",/"rcvedAmt/":/"11.76/",/"oweAmt/":/"0/",/"rcvblYm/":/"201502/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2015000435879133/",/"rcvblAmt/":/"8.23/",/"owePenalty/":/"0/",/"rcvedAmt/":/"8.23/",/"oweAmt/":/"0/",/"rcvblYm/":/"201504/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2013000201613636/",/"rcvblAmt/":/"148.59/",/"owePenalty/":/"0/",/"rcvedAmt/":/"148.59/",/"oweAmt/":/"0/",/"rcvblYm/":/"201312/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000206170080/",/"rcvblAmt/":/"288.76/",/"owePenalty/":/"0/",/"rcvedAmt/":/"288.76/",/"oweAmt/":/"0/",/"rcvblYm/":/"201401/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000213433834/",/"rcvblAmt/":/"178.57/",/"owePenalty/":/"0/",/"rcvedAmt/":/"178.57/",/"oweAmt/":/"0/",/"rcvblYm/":/"201402/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000220409307/",/"rcvblAmt/":/"0.59/",/"owePenalty/":/"0/",/"rcvedAmt/":/"0.59/",/"oweAmt/":/"0/",/"rcvblYm/":/"201403/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000224346917/",/"rcvblAmt/":/"9.41/",/"owePenalty/":/"0/",/"rcvedAmt/":/"9.41/",/"oweAmt/":/"0/",/"rcvblYm/":/"201404/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000235525969/",/"rcvblAmt/":/"22.34/",/"owePenalty/":/"0/",/"rcvedAmt/":/"22.34/",/"oweAmt/":/"0/",/"rcvblYm/":/"201405/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000250824152/",/"rcvblAmt/":/"24.7/",/"owePenalty/":/"0/",/"rcvedAmt/":/"24.7/",/"oweAmt/":/"0/",/"rcvblYm/":/"201406/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000265451425/",/"rcvblAmt/":/"32.34/",/"owePenalty/":/"0/",/"rcvedAmt/":/"32.34/",/"oweAmt/":/"0/",/"rcvblYm/":/"201407/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000287619069/",/"rcvblAmt/":/"100.55/",/"owePenalty/":/"0/",/"rcvedAmt/":/"100.55/",/"oweAmt/":/"0/",/"rcvblYm/":/"201408/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000302284130/",/"rcvblAmt/":/"97.02/",/"owePenalty/":/"0/",/"rcvedAmt/":/"97.02/",/"oweAmt/":/"0/",/"rcvblYm/":/"201409/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000329656994/",/"rcvblAmt/":/"34.1/",/"owePenalty/":/"0/",/"rcvedAmt/":/"34.1/",/"oweAmt/":/"0/",/"rcvblYm/":/"201410/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null},{/"statusCode/":/"非锁定/",/"rcvblAmtId/":/"2014000342784003/",/"rcvblAmt/":/"23.52/",/"owePenalty/":/"0/",/"rcvedAmt/":/"23.52/",/"oweAmt/":/"0/",/"rcvblYm/":/"201411/",/"rcvedPenalty/":null,/"billType/":/"正常电费/",/"addBal/":null}],/"acctBal/":/"0/",/"chargeBal/":null,/"freezeBal/":null,/"oweAmtSum/":/"78.8/",/"owePenaltySum/":/"0/",/"purchaseInfos/":null,/"levDisBeginYm/":null,/"levDisEndYm/":null,/"levDisAmt/":null,/"isLevDisFlag/":null,/"limitReason/":null},/"date/":/"2015-08-18/"}"////
示例中部分信息被我用xx代替了,
字段说明:
consN(客户号)、consName(客户姓名)、elecAddr(电表地址)、consSortCode类型、 acctBal(账户余额)、oweAmtSum(账户欠费)、
statusCode 固定为200 不管客户号有没有都是200 然后就是billInfo消息中如果consNo(客户号)为null则表示没有客户,
农村的返回稍微有点一样,但关键信息都有,今天不捣鼓了,洗洗睡了
新闻热点
疑难解答