/// <summary> /// 公交卡充值 /// </summary> /// <param name="param"></param> /// <returns></returns> public BusCpuCardInfo BusCpuCard(BusCpuCardParam param) { BusCpuCardInfo busCpuCardInfo = new BusCpuCardInfo(); Dictionary <String, String> parameters = new Dictionary <String, String>(); parameters.Add("authcode", param.authcode); parameters.Add("servicename", param.servicename); parameters.Add("trandateTime", param.trandateTime); parameters.Add("reqsn", param.resqn); parameters.Add("paymentno", param.paymentno); parameters.Add("paymentAmout", param.paymentAmout); parameters.Add("billDate", param.billDate); parameters.Add("merchantNo", param.merchantNo); parameters.Add("orderno", param.orderno); parameters.Add("payCode", param.payCode); parameters.Add("trandeNo", param.trandeNo); parameters.Add("inapdu", param.inapdu); parameters.Add("step", param.step); parameters.Add("money", param.money); parameters.Add("serno", param.serno); parameters.Add("appsid", param.appsid); parameters.Add("btype", param.btype); parameters.Add("opno", param.opno); parameters.Add("scode", param.scode); parameters.Add("terno", param.terno); parameters.Add("tradeno", param.tradeno); parameters.Add("loginId", param.loginId); parameters.Add("CMTYPE", param.CMTYPE); parameters.Add("WMONEY", param.WMONEY); parameters.Add("APDUSUM", param.APDUSUM); parameters.Add("APDUDATA", param.APDUDATA); parameters.Add("APDUSW", param.APDUSW); parameters.Add("RETDATA", param.RETDATA); string jsonText = jsonText = HttpHelper.getHttp(SysConfigHelper.readerNode("BusCpuCardName"), parameters, null); JObject jsonObj = (JObject)JsonConvert.DeserializeObject(jsonText); JObject msgrsp = (JObject)JsonConvert.DeserializeObject(jsonObj["msgrsp"].ToString()); JObject cpumsg = (JObject)JsonConvert.DeserializeObject(jsonObj["cpumsg"].ToString()); JObject msghead = (JObject)JsonConvert.DeserializeObject(jsonObj["msghead"].ToString()); busCpuCardInfo.msgrsp = JsonConvert.DeserializeObject <BusCpuCardMsgrsp>(msgrsp.ToString()); busCpuCardInfo.msghead = JsonConvert.DeserializeObject <BusCpuCardMsghead>(msghead.ToString()); busCpuCardInfo.cpumsg = JsonConvert.DeserializeObject <BusCpuCardCpumsg>(cpumsg.ToString()); BusPayParam.busShopNo = busCpuCardInfo.msgrsp.MERCHANTNO; BusPayParam.busClient = busCpuCardInfo.msgrsp.TERMINALNO; return(busCpuCardInfo); }
public static BusCpuCardInfo GetOrder(BusReChangeParam busReChangeParam, BusCpuCardParam param, string paycode) { Boolean isSuccess = false; //签到 BusRegisterInfo busRegisterInfo = BusAccess.BusRegister(); if (busRegisterInfo.cpumsg.OUTPUT != null) { isSuccess = true; } if (isSuccess == false) { throw new WtException(WtExceptionCode.Bus.BUS_PAY); } isSuccess = false; //公交卡充值 param.authcode = SysBLL.Authcode;; // 认证码 not null param.servicename = "DD006"; //交易类型编号 not null param.trandateTime = SysBLL.getYYYYMMDDHHMMSSTime(); //交易日期:YYYYMMDDHHMMSS not null param.resqn = SysBLL.getSerialNum(); //请求流水号 not null param.paymentno = busReChangeParam.paymentno; //用户名 用户编号 not null param.paymentAmout = busReChangeParam.paymentAmout + "00"; //账单金额 not null param.billDate = DateTime.Now.Year.ToString(); //账单日期 not null param.merchantNo = "S000000200"; //缴费单位编号 not null param.step = "0"; //执行第几步 Not null param.money = busReChangeParam.paymentAmout + "00"; //充值金额 Not null param.serno = SysBLL.getSerialNum().Substring(0, 12); //业务流水号 not null param.appsid = busReChangeParam.appsid; //应用序列号 param.btype = "1931"; //业务类型 not null param.opno = busRegisterInfo.cpumsg.OUTPUT.OPNO; //操作员卡号 not null param.scode = busRegisterInfo.cpumsg.OUTPUT.SCODE; //签到码 not null param.terno = SysBLL.getMac(); //终端编号 Not null param.loginId = SysBLL.getCpuNo(); //设备ID param.CMTYPE = "0"; param.WMONEY = busReChangeParam.wmoney; param.inapdu = "no"; param.tradeno = busReChangeParam.trandeNo; //param.payCode = paycode; //param.orderno = busReChangeParam.orderno; BusInterface access = new BusInterface(); BusCpuCardInfo busCpuCardInfo1 = access.BusCpuCard(param); // orderno = busCpuCardInfo1.msgrsp.orderno; return(busCpuCardInfo1); }
private void pay() { log.Write("--------------------交易开始--------------------"); log.Write("----------缴费类型:公交"); try { WantongBLL wt = new WantongBLL(); string wtCard = ""; string icParamsJson = ""; string order = ""; string orderparam = ""; string serialStr = ""; string reconcStr = ""; string result = ""; string jsonPayParam = ""; string busCard = ""; string batchNo = ""; string payMoney = ""; //交易日志,订单编号 string orderNo = ""; //交易日志,商户类型 string shopType = ""; string shopNo = ""; string trandNo = ""; PasswordBLL pwdBLL = new PasswordBLL(); Dictionary <string, string> map = null; string payCode = "Z000000003";//payCode = "Z000000005"; string ClientNo = ""; string terminalNo = SysConfigHelper.readerNode("ClientNo"); if (icParams != null) { payCode = "Z000000005"; terminalNo = SysConfigHelper.readerNode("LklClientNo"); } WintopPayParam witonPay = new WintopPayParam(); witonPay.price = payParam.UserInputMoney; witonPay.pwd = payParam.Pwd; busCard = Payment.BusPayParam.BusNo; BusReChangeParam busReChangeParam = new BusReChangeParam(); busReChangeParam.appsid = payParam.Output.APPSID; busReChangeParam.paymentAmout = payParam.UserInputMoney; busReChangeParam.paymentno = busCard; busReChangeParam.wmoney = payParam.Output.WMONEY; busReChangeParam.trandeNo = SysBLL.getHHMMSSITime10(); //busReChangeParam.orderno = orderNo; log.Write("发起公交充值"); BusCpuCardParam param = new BusCpuCardParam(); BusCpuCardInfo busCpuCardInfo = BusAccess.GetOrder(busReChangeParam, param, payCode); Payment.BusPayParam.BusCpuCardInfo = busCpuCardInfo; string cloudNo = busCpuCardInfo.msgrsp.orderno; //向后台发送订单记录 if (icParams == null) { orderNo = Wanton.GetOrderNo(); //tradeRecord.branch_termail_no = SysConfigHelper.readerNode("ClientNo"); ClientNo = BusPayParam.busShopNo + "|" + SysConfigHelper.readerNode("ClientNo"); } else { orderNo = LKLProcedure.GetOrderNo(); ClientNo = BusPayParam.busShopNo + "|" + BusPayParam.busClient; } //支付 try { if (icParams == null) { log.Write("交易类型:万通交易"); //万通卡号 //orderNo = SysBLL.GetRnd(6, true, false, false, false, ""); shopNo = orderNo + "|" + SysConfigHelper.readerNode("ClientNo") + "|" + SysConfigHelper.readerNode("ShopNo"); witonPay.orderNo = orderNo; witonPay.price = payParam.UserInputMoney; wtCard = wt.GetCardNo(); witonPay.wintopNo = wtCard; pwdBLL.SetCryptMode(1);//万通卡加密方式 log.Write("万通卡号:" + witonPay.wintopNo); log.Write("交易金额:" + witonPay.price); log.Write("终端交易流水号" + orderNo); log.Write("开始支付"); witonPay.pwd = payParam.Pwd; map = Wanton.pay(witonPay, BusPayParam.busShopNo); shopType = "1"; jsonPayParam = JsonConvert.SerializeObject(witonPay); map.Add("payParam", jsonPayParam); } else { log.Write("交易类型:拉卡拉交易"); //银行卡 //orderNo = SysBLL.GetOrderNo(); shopNo = orderNo + "|" + SysConfigHelper.readerNode("ClientNo") + "|" + SysConfigHelper.readerNode("ShopNo"); batchNo = SysBLL.GetBatchNo(); pwdBLL.SetCryptMode(0);//银行卡加密方式 payMoney = payParam.UserInputMoney; log.Write("银行卡号:" + icParams["cardNo"]); log.Write("交易金额:" + payMoney); log.Write("终端交易流水号" + orderNo); log.Write("开始支付"); map = wtPayBLL.LKLProcedure.PayOrder(payParam.Pwd, payMoney, icParams, orderNo, batchNo, BusPayParam.busShopNo, BusPayParam.busClient); shopType = "0"; icParamsJson = JsonConvert.SerializeObject(icParams); map.Add("bankParam", icParamsJson); } map.Add("orderType", "5"); //1、广电 2、水务3、燃气4、电力5、公交6、万通卡7、热力 map.Add("payType", shopType); //拉卡拉是0,万通是1 map.Add("payOrderNo", orderNo); map.Add("busCardNo", busCard); //如果万通支付成功 if (!map["recode"].Equals("00")) { if ("55".Equals(map["recode"])) { SysBLL.PasswordErrorInfo = "密码错误,请重新输入!"; log.Write("密码错误"); log.Write("--------------------交易结束--------------------"); if (icParams == null) { pwdBLL.OpenKeyboard(SysConfigHelper.readerNode("ZT598Port"), "9600", wtCard); this.Dispatcher.Invoke(new Action(() => { Util.JumpUtil.jumpCommonPage("FormInputPassword"); })); return; } else { pwdBLL.OpenKeyboard(SysConfigHelper.readerNode("ZT598Port"), "9600", icParams["cardNo"]); this.Dispatcher.Invoke(new Action(() => { Util.JumpUtil.jumpCommonPage("FormInputPassword"); })); return; } } else if ("51".Equals(map["recode"])) { log.Write("余额不足"); exit("余额不足"); return; } else { log.Write("支付失败:返回码:" + map["recode"]); exit("充值失败,请重新缴费,或退卡"); return; } } } catch (Exception ex) { log.Write("支付异常,发起冲正:" + ex.Message); //冲正 if (icParams == null) { //万通冲正 for (int i = 1; i <= 3; i++) { try { Dictionary <string, string> mapCor = Wanton.correct(witonPay, BusPayParam.busShopNo); if (mapCor == null) { mapCor = new Dictionary <string, string>(); } mapCor.Add("payParam", jsonPayParam); mapCor.Add("orderType", "5"); //1、广电 2、水务3、燃气4、电力5、公交6、万通卡7、热力 mapCor.Add("payType", shopType); //拉卡拉是0,万通是1 mapCor.Add("payOrderNo", orderNo); mapCor.Add("busCardNo", busCard); if (mapCor["recode"].Equals("00")) { log.Write("冲正成功"); break; } else { log.Write("冲正失败,返回码:" + mapCor["recode"]); } } catch (Exception) { log.Write("冲正失败"); } finally { Thread.Sleep(wtPayUtils.Fibonacci(i) * 1000); } } exit("充值失败,请重新缴费,或退卡"); return; } else { for (int i = 1; i <= 3; i++) { try { //拉卡拉冲正 Dictionary <string, string> ret = LKLProcedure.correct(icParams, payMoney, orderNo, batchNo); if (ret == null) { ret = new Dictionary <string, string>(); } ret.Add("payParam", jsonPayParam); ret.Add("orderType", "5"); //1、广电 2、水务3、燃气4、电力5、公交6、万通卡7、热力 ret.Add("payType", shopType); //拉卡拉是0,万通是1 ret.Add("payOrderNo", orderNo); ret.Add("busCardNo", busCard); if (ret["recode"].Equals("00")) { log.Write("冲正成功"); break; } else { log.Write("冲正失败,返回码:" + ret["recode"]); } } catch (Exception ex8) { log.Write("冲正失败"); } finally { Thread.Sleep(wtPayUtils.Fibonacci(i) * 1000); } } exit("充值失败,请重新缴费,或退卡"); return; } } string busOrderNo = ""; string recode = ""; //发送订单,充值 try { trandNo = map["cloudOrderNo"]; busCpuCardInfo = BusAccess.ReCharge(busCpuCardInfo, param); if (busCpuCardInfo.cpumsg.OUTPUT != null) { try { order = JsonConvert.SerializeObject(busCpuCardInfo); map.Add("payres", order); orderparam = JsonConvert.SerializeObject(busReChangeParam); map.Add("payresparam", orderparam); map.Add("state", "消费成功"); map.Add("type", "1");//1消费,2冲正,3消费撤销 serialStr = JsonConvert.SerializeObject(map); reconcStr = busCpuCardInfo.msgrsp.orderno + "|" + busCard + "|" + busCpuCardInfo.msghead.reqsn + "|" + orderNo + "|" + busCpuCardInfo.msgrsp.paymentAmout + "|" + SysBLL.getYYYYMMDDHHMMSSTime() + "|" + busCpuCardInfo.msgrsp.Tac + "|" + busCpuCardInfo.msghead.reqsn + "|" + payParam.Output.WMONEY + ""; result = HttpHelper.sendPaymentLog(serialStr, reconcStr, shopNo, shopType, "1"); } catch (Exception ex) { log.Write("发送对账信息异常:" + ex.Message); } finally { log.Write("交易成功,交易信息:" + reconcStr); log.Write("--------------------交易结束--------------------"); //支付成功 this.Dispatcher.Invoke(new Action(() => { Util.JumpUtil.jumpCommonPage("FormBusStep08_success"); })); } return; } throw new Exception(); } catch (Exception ex3) { log.Write("支付通知交易异常:" + ex3.Message); //string refund = map["_2"] + "|" + map["_4"] + "|" + map["_59"] + "|" + ""; //退款 string conName = "公交卡退费申请"; //string payOrderNo = busCpuCardInfo.msgrsp.orderno; //tring payOrderNo = busOrderNo.ToString(); string payOrderNo = cloudNo; string transType = "02"; string serviceName = "TK001"; try { if (icParams == null) { //string sendPaymentLogResult = HttpHelper.sendPaymentLog(serialStr, reconcStr, shopNo, shopType); //JObject paymentLogObject = JObject.Parse(sendPaymentLogResult);//用于获取后台生成的ID string refundRequestState = "0";//是否需要向云平台发起退款申请 } else { //string sendPaymentLogResult = HttpHelper.sendPaymentLog(serialStr, reconcStr, shopNo, shopType); //JObject paymentLogObject = JObject.Parse(sendPaymentLogResult);//用于获取后台生成的ID string refundRequestState = "1";//是否需要向云平台发起退款申请 } } catch (Exception ex) { log.Write("退款异常:" + ex.Message); } finally { payFail("充值失败,请重新缴费,或退卡"); } return; } } catch (Exception ex5) { log.Write("交易异常:" + ex5.Message); exit("充值失败,请重新缴费,或退卡"); return; } }
public static BusCpuCardInfo ReCharge(BusCpuCardInfo busCpuCardInfo1, BusCpuCardParam param) { try{ BusInterface access = new BusInterface(); Boolean isSuccess = false; if (busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU != null) { isSuccess = true; } if (isSuccess == false) { throw new WtException(WtExceptionCode.Bus.BUS_PAY); } isSuccess = false; param.orderno = busCpuCardInfo1.msgrsp.orderno; //订单编号 null 循环最后一步传递 param.payCode = "Z000000004"; //支付渠道编码 null 循环最后一步传递 param.trandeNo = SysBLL.getSerialNum(); //支付渠道交易流水号 null 循环最后一步传递 param.inapdu = "yes"; //指令 不定 第一步不需要传,当服务端有 OUTAPDU 指令后,将 OUTAPDU 指令执行并上传 INAPDU 指令 string status = busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; param.step = busCpuCardInfo1.cpumsg.OUTPUT.STEP; //执行指令 BusCardBLL bus = new BusCardBLL(); string port = SysConfigHelper.readerNode("CRT603Port"); //int openRet = CRT603.CRT603Vx_OpenConnection(Int32.Parse(port), 19200); //上电 int iOutAtrLen = 0; byte[] byOutAtrData = new byte[1024]; int chipRet = CRT603.CRT603Vx_RF_chipPower(ref iOutAtrLen, byOutAtrData); string apduData = ""; string APDUDATA = ""; string APDUSW = ""; string RETDATA = ""; int APDUSUM = 0; string result = ""; string last = ""; List <BusCpuCardAPDU> apdu = busCpuCardInfo1.cpumsg.OUTPUT.OUTAPDU.APDU; for (int i = 0; i < apdu.Count; i++) { APDUDATA = APDUDATA + apdu[i].APDUDATA + "|"; result = bus.sendApdu(apdu[i].APDUDATA); last = result.Substring(result.Length - 4); APDUSW = APDUSW + last + "|"; result = result.Remove(result.Length - 4, 4); if (result.Length == 0) { result = last; } if (apduData != null) { RETDATA = RETDATA + result + "|"; } Thread.Sleep(10); APDUSUM++; } //CRT603.CRT603Vx_CloseConnection(); APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); BusCpuCardInfo busCpuCardInfo2 = null; while (true) { param.APDUDATA = APDUDATA; param.APDUSW = APDUSW; param.RETDATA = RETDATA; param.APDUSUM = APDUSUM.ToString(); if ("-1".Equals(param.step)) { busCpuCardInfo2.msgrsp.Tac = param.RETDATA; } //结果 if (status.Equals("01")) { busCpuCardInfo2 = access.BusCpuCard(param); return(busCpuCardInfo2); } busCpuCardInfo2 = access.BusCpuCard(param); if (busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU != null) { isSuccess = true; } if (isSuccess == false) { throw new WtException(WtExceptionCode.Bus.BUS_PAY); } isSuccess = false; APDUDATA = ""; APDUSW = ""; RETDATA = ""; APDUSUM = 0; List <BusCpuCardAPDU> apdu2 = busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU.APDU; for (int i = 0; i < apdu2.Count; i++) { APDUDATA = APDUDATA + apdu2[i].APDUDATA + "|"; result = bus.sendApdu(apdu2[i].APDUDATA); last = result.Substring(result.Length - 4); result = result.Remove(result.Length - 4, 4); APDUSW = last + APDUSW + "|"; //执行apdu RETDATA = RETDATA + result + "|"; APDUSUM++; } APDUDATA = APDUDATA.Remove(APDUDATA.Length - 1, 1); APDUSW = APDUSW.Remove(APDUSW.Length - 1, 1); RETDATA = RETDATA.Remove(RETDATA.Length - 1, 1); param.step = busCpuCardInfo2.cpumsg.OUTPUT.STEP; status = busCpuCardInfo2.cpumsg.OUTPUT.OUTAPDU.LASTAPDU; } } catch { return(null); } }