private void BeginRefund(Hashtable htParams) { try { #region 组织请求入参 Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("TransCode", "09"); dic.Add("TransMoney", CheckMoney(htParams, "MONEY")); dic.Add("TransNo", PadRight("", 6)); dic.Add("MachineID", PadRight("", 10)); dic.Add("OperatorID", PadRight(SysOperatorInfo.OperatorID, 10)); dic.Add("ReferenceNo", PadRight(htParams["REFERENCENO"].ToString(), 15)); dic.Add("AuthNo", PadRight("", 6)); dic.Add("OldTransDate", Convert.ToDateTime(htParams["OPERATETIME"]).ToString("YYYYMMDD")); dic.Add("CardType", "H"); dic.Add("IndexNo", PadRight(htParams["POSNO"].ToString(), 76)); dic.Add("Track2", PadRight("", 37)); dic.Add("Track3", PadRight("", 104)); dic.Add("OldTransCode", PadRight("", 2)); dic.Add("OldTerminalID", PadRight("", 15)); dic.Add("OldAuthNo", PadRight("", 15)); dic.Add("PayAccountID", PadRight("", 3)); dic.Add("StoreID", PadRight("", 20)); dic.Add("ReceiptID", PadRight("", 30)); dic.Add("OrderID", PadRight("", 15)); dic.Add("OldBatchNo", PadRight("", 6)); dic.Add("OldTransTime", PadRight("", 6)); dic.Add("OldTransMoney", PadRight("", 12)); dic.Add("ServerIP", PadRight("", 15)); dic.Add("ListenPort", PadRight("", 6)); string strInput = dic.GetValueString(); #endregion #region 平台接口调用 LogService.GlobalInfoMessage("退货交易调用入参:" + strInput); StringBuilder sb = new StringBuilder(1000); //int iResult = SingleeMethods.CardTransCBK(strInput, sb, null, IntPtr.Zero); int iResult = SingleeMethods.CardTransDllWin(strInput, sb); string strOutput = sb.ToString(); LogService.GlobalInfoMessage("退货交易调用出参:" + strOutput); #endregion #region 解析请求出参 byte[] bytes = System.Text.Encoding.Default.GetBytes(strOutput); string retCode = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 0, 6)); string retMsg = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 6, 40)); #endregion #region 交易结果处理 if (retCode == "000000") { string transNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 46, 6)); string authNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 52, 6)); string batchNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 58, 6)); string bankCardID = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 64, 19)); string expDate = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 83, 4)); string bankNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 87, 2)); string referenceNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 89, 12)); string terminalNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 101, 15)); string merchantID = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 116, 15)); string transMoney = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 131, 12)); string indexNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 143, 16)); string customField = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 159, 74)); string sendCardBankCode = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 234, 7)); string bankDate = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 241, 8)); string bankTime = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 249, 6)); #region 交易成功 LogService.GlobalInfoMessage("退货交易调用成功。" + retMsg); #region 把交易数据写入数据库 string seqNo = htParams["SEQNO"].ToString(); string diagnoseID = htParams["DIAGNOSEID"].ToString(); string cardID = htParams["CARDID"].ToString(); DateTime dtn; string strDate = string.Empty; if (!string.IsNullOrEmpty(bankDate.Trim())) { strDate = bankDate.Substring(0, 4) + "-" + bankDate.Substring(4, 2) + "-" + bankDate.Substring(6, 2) + " " + bankTime.Substring(0, 2) + ":" + bankTime.Substring(2, 2); } DateTime payDateTime = DateTime.TryParse(strDate, out dtn) ? dtn : DateTime.Now; decimal payMoney = decimal.Parse(transMoney.TrimStart('0')); TBankhisexchangeTransData dataPayment = new TBankhisexchangeTransData() { Hisseqno = seqNo + "R", Hisstate = "0", Bankseqno = transNo, Bankstate = "1", DIAGNOSEID = diagnoseID, Hisid = cardID, Usetype = "退款", DataSources = "自助", BusinessType = "POS退款", Operatorid = SysOperatorInfo.OperatorID, Operatetime = payDateTime, TerminalNo = terminalNo, Trfamt = "-" + payMoney.ToString("0.##"), ITEM1 = bankCardID, ITEM2 = batchNo, ITEM3 = string.Empty, Ohisseqno = referenceNo, MerchantID = merchantID, }; TBankhisexchangeTransFacade facBankTrans = new TBankhisexchangeTransFacade(); facBankTrans.Insert(dataPayment); LogService.GlobalInfoMessage("退款交易数据保存完成。"); #endregion #endregion } else { #region 交易失败 LogService.GlobalInfoMessage("退货交易调用失败。" + retMsg); throw new Exception(retMsg); #endregion } #endregion } catch (Exception e) { LogService.GlobalInfoMessage("银行退款失败。" + e.Message); throw; } }
private void BeginPay(Hashtable htParams) { String strErrorMsg = string.Empty; try { #region 组织请求入参 Dictionary <string, string> dic = new Dictionary <string, string>(); dic.Add("TransCode", "01"); dic.Add("TransMoney", CheckMoney(htParams, "MONEY")); dic.Add("TransNo", PadRight("", 6)); dic.Add("MachineID", PadRight("", 10)); dic.Add("OperatorID", PadRight(SysOperatorInfo.OperatorID, 10)); dic.Add("ReferenceNo", PadRight("", 15)); dic.Add("AuthNo", PadRight("", 6)); dic.Add("OldTransDate", PadRight("", 8)); dic.Add("CardType", "H"); dic.Add("IndexNo", PadRight(htParams["POSNO"].ToString(), 76)); dic.Add("Track2", PadRight("", 37)); dic.Add("Track3", PadRight("", 104)); dic.Add("OldTransCode", PadRight("", 2)); dic.Add("OldTerminalID", PadRight("", 15)); dic.Add("OldAuthNo", PadRight("", 15)); dic.Add("PayAccountID", PadRight("", 3)); dic.Add("StoreID", PadRight("", 20)); dic.Add("ReceiptID", PadRight("", 30)); dic.Add("OrderID", PadRight("", 15)); dic.Add("OldBatchNo", PadRight("", 6)); dic.Add("OldTransTime", PadRight("", 6)); dic.Add("OldTransMoney", PadRight("", 12)); dic.Add("ServerIP", PadRight("", 15)); dic.Add("ListenPort", PadRight("", 6)); string strInput = dic.GetValueString(); #endregion #region 平台接口调用 LogService.GlobalInfoMessage("消费交易调用入参:" + strInput); StringBuilder sb = new StringBuilder(1000); //int iResult = SingleeMethods.CardTransCBK(strInput, sb, new SingleeMethods.EnterPasswordCallBack(EnterPasswordHandler), frmPwd.Handle); int iResult = SingleeMethods.CardTransDllWin(strInput, sb); string strOutput = sb.ToString(); LogService.GlobalInfoMessage("消费交易调用出参:" + strOutput); #endregion #region 解析请求出参 byte[] bytes = System.Text.Encoding.Default.GetBytes(strOutput); string retCode = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 0, 6)); string retMsg = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 6, 40)); #endregion #region 交易结果处理 if (retCode == "000000") { string transNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 46, 6)); string authNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 52, 6)); string batchNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 58, 6)); string bankCardID = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 64, 19)); string expDate = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 83, 4)); string bankNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 87, 2)); string referenceNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 89, 12)); string terminalNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 101, 15)); string merchantID = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 116, 15)); string transMoney = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 131, 12)); string indexNo = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 143, 16)); string customField = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 159, 74)); string sendCardBankCode = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 234, 7)); string bankDate = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 241, 8)); string bankTime = System.Text.Encoding.Default.GetString(SingleeMethods.SubByte(bytes, 249, 6)); #region 交易成功 LogService.GlobalInfoMessage("消费交易调用成功。" + retMsg); #region 广播出参 htParams.Add("REFERENCENO", referenceNo); htParams.Add("BANKCARDID", bankCardID); htParams.Add("BANKSEQNO", transNo); #endregion #region 把交易数据写入数据库 string seqNo = htParams["SEQNO"].ToString(); string diagnoseID = htParams["DIAGNOSEID"].ToString(); string cardID = htParams["CARDID"].ToString(); //string strDateTime = DateTime.Now.ToString(); //if (!string.IsNullOrEmpty(bankDate.Trim())) //{ // strDateTime=bankDate.Substring(0, 4) + "-" + bankDate.Substring(4, 2) + "-" + bankDate.Substring(6, 2) + " " + bankTime.Substring(0, 2) + ":" + bankTime.Substring(2, 2) + ":" + bankTime.Substring(4, 2); //} //DateTime payDateTime = Convert.ToDateTime(strDateTime); try { DateTime dtn; string strDate = string.Empty; if (!string.IsNullOrEmpty(bankDate.Trim())) { strDate = bankDate.Substring(0, 4) + "-" + bankDate.Substring(4, 2) + "-" + bankDate.Substring(6, 2) + " " + bankTime.Substring(0, 2) + ":" + bankTime.Substring(2, 2); } DateTime payDateTime = DateTime.TryParse(strDate, out dtn) ? dtn : DateTime.Now; decimal payMoney = decimal.Parse(transMoney.TrimStart('0')); TBankhisexchangeTransData dataPayment = new TBankhisexchangeTransData() { InterfaceName = "锡盟新利银医接口", Hisseqno = seqNo, Hisstate = "0", Bankseqno = transNo, Bankstate = "1", DIAGNOSEID = diagnoseID, Hisid = cardID, Usetype = "消费", DataSources = "自助", BusinessType = "POS扣款", Operatorid = SysOperatorInfo.OperatorID, Operatetime = payDateTime, TerminalNo = terminalNo, Trfamt = payMoney.ToString("0.##"), ITEM1 = bankCardID, ITEM2 = batchNo, ITEM3 = string.Empty, Ohisseqno = referenceNo, MerchantID = merchantID, }; TBankhisexchangeTransFacade facBankTrans = new TBankhisexchangeTransFacade(); facBankTrans.Insert(dataPayment); LogService.GlobalInfoMessage("消费交易数据保存完成。"); } catch (Exception ex) { LogService.GlobalInfoMessage("消费交易数据保存失败"); #region 打印交易凭证 //PrintInfo(htParams); SkynetMessage.MsgInfo("预交金充值失败,需要撤销银行交易,请按POS机提示操作,点击确定后,请重新插入银行卡"); Revoke(htParams); #endregion //throw new Exception(string.Format("消费交易数据保存失败!已调用撤销方法!,错误:{0}",ex.Message)); throw new Exception(string.Format("银行交易失败,充值金额已退回卡,请重新充值!")); } #endregion #endregion } #region 交易失败 else if (retCode == "C41003") { strErrorMsg = "取消交易,请重新操作!"; } else if (retCode == "C85006") { strErrorMsg = "密码错误,请重新操作!"; } else if (retCode == "C40006") { strErrorMsg = "读卡错误,请检查卡片是否插错!"; } else if (retCode == "C99999") { strErrorMsg = "银行卡余额不足,交易失败!"; } else { strErrorMsg = string.Format("消费交易调用失败:{0}", retMsg); } if (!string.IsNullOrEmpty(strErrorMsg)) { LogService.GlobalInfoMessage(strErrorMsg); //SkynetMessage.MsgInfo(strErrorMsg); //Voice voice = new Voice(); //voice.PlayText(strErrorMsg); //voice.EndJtts(); throw new Exception(strErrorMsg); } #endregion #endregion } catch (Exception e) { LogService.GlobalInfoMessage(e.Message); //SkynetMessage.MsgInfo(e.Message); throw new Exception(string.Format("{0}", e.Message)); } }