コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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));
            }
        }