Esempio n. 1
0
        private void button5_Click_1(object sender, EventArgs e)
        {
            PropSecOrderParam param = new PropSecOrderParam();

            param.shopType     = "1";
            param.AMOUNT       = "12";
            param.paymentAmout = "0";
            param.SC10009      = "W000000001";
            param.SC10010      = "01";
            param.SC10007      = "XQ00000221";
            param.SC10008      = SC10008;
            param.merchantNo   = merchantNo;
            PropSecOrderInfo info = access.order(param);

            PayAccess payAccess = new PayAccess();
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters.Add("serviceType", "5_2");
            parameters.Add("realAmout", info.msgrsp.realAmout);
            parameters.Add("tr.shop_type", "1");
            parameters.Add("tr.cloud_no", info.msgrsp.orderNo);
            parameters.Add("terminalNo", SysConfigHelper.readerNode("ClientNo"));
            parameters.Add("ipAddress", SysConfigHelper.readerNode("PayName"));
            PayResultInfo payinfo = payAccess.PayResNewAcc(parameters);

            StringBuilder result1 = new StringBuilder(2048);
            StringBuilder result2 = new StringBuilder(2048);
            IntPtr        status  = PropSwwyBLL.WF002(
                new StringBuilder("02"),                       //业务类型
                new StringBuilder("01"),                       //卡片种类
                new StringBuilder("01"),                       //卡片版本
                new StringBuilder(""),                         //,业务步骤
                new StringBuilder(""),                         //卡片唯一识别号
                new StringBuilder(""),                         //物业公司编号
                new StringBuilder(""),                         //小区编号
                new StringBuilder("W000000001"),               //表具产商编号
                new StringBuilder("8"),                        //端口号
                result1,                                       //返回说明
                new StringBuilder(payinfo.SC20003.ToString()), //业务输入信息
                result2                                        //业务返回信息
                );
            string result = Marshal.PtrToStringAnsi(status);

            MessageBox.Show(result);
            PropSecCardJson card = new PropSec().JsonToModel(result2.ToString());

            //SC10007 = card.G_0806;
            SC10008 = card.G_1802;
            listViewAdd("写卡:" + "状态:" + result.ToString() + "返回说明:" + result1.ToString() + "返回信息:" + result2.ToString());

            //IntPtr intPtr = ReturnString();
            //string str = Marshal.PtrToStringAnsi(intPtr);
        }
Esempio n. 2
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public PayResultInfo payStart(PayParam p)
        {
            //密码键盘工具类
            PasswordBLL pwdBLL = new PasswordBLL();
            //交易数据访问类
            PayAccess payAccess = new PayAccess();
            //支付结果
            PayResultInfo payResultInfo = null;

            try
            {
                Dictionary <string, string> parameters = new Dictionary <string, string>();
                //缴费类型
                parameters.Add("serviceType", p.serviceType);
                //交易金额
                parameters.Add("realAmout", p.rechageAmount);
                //交易类型,纸币,银行卡,万通卡
                parameters.Add("tr.shop_type", isWtLkl(p.icParams));
                if (PayStaticParam.payType == -1)
                {//电子现金支付相关参数
                    //获取批次号
                    p.batchNo = LKLProcedure.GetBatchNo();
                    //获取支付报文
                    parameters.Add("tr.data", PayBLL.PayMessage(ref p));
                    //批次流水号
                    parameters.Add("dzls", p.batchNo + p.WtLklorderNo);
                }
                //云平台交易流水号
                parameters.Add("tr.cloud_no", p.orderNo);
                if ("4".Equals(p.serviceType))
                {
                    //万通卡支付相关参数
                    if (SysBLL.IsTest.Equals("正式"))
                    {
                        parameters.Add("terminalno", "XNJ00002");
                        parameters.Add("terminal", ConfigurationManager.AppSettings["MechineNo"]);
                    }
                    else
                    {
                        parameters.Add("terminalno", "UU000002");
                        parameters.Add("terminal", ConfigurationManager.AppSettings["MechineNo"]);
                    }
                }
                else
                {
                    parameters.Add("terminalNo", p.terminalNo);
                }
                //设置其余参数
                initParam(parameters, p);
                //发起支付
                payResultInfo = payAccess.PayResNewAcc(parameters);
                //纸币交易到此为止
                if (PayStaticParam.payType == 0)
                {
                    if ("0000".Equals(payResultInfo.code))
                    {
                        //支付成功
                        log.Write("--------------------交易结束--------------------");
                        return(payResultInfo);
                    }
                    else
                    {
                        payResultInfo.code = "9999";
                        log.Write("--------------------交易结束--------------------");
                        return(payResultInfo);
                    }
                }
                if (isNull(payResultInfo) || ("9991".Equals(payResultInfo.code)))
                {
                    //冲正
                    CorrectParam correctParam = new CorrectParam();
                    //缴费类型
                    correctParam.serviceType = p.serviceType;
                    //支付类型
                    correctParam.shop_type = isWtLkl(p.icParams);
                    //云平台交易流水
                    correctParam.cloud_no = p.orderNo;
                    for (int i = 1; i <= 3; i++)
                    {
                        //获取冲正报文
                        correctParam.data = Util.JumpUtil.CorrectJump(p);
                        //发起冲正
                        PayResultInfo payResultInfoacc = payAccess.CorrectAcc(correctParam);
                        if ("0000".Equals(payResultInfoacc.code))
                        {
                            break;
                        }
                    }
                    payResultInfo.code = "9991";
                    return(payResultInfo);
                }
                else if ("9955".Equals(payResultInfo.code))
                {
                    //密码错误
                    SysBLL.PasswordErrorInfo = "密码错误,请重新输入!";
                    log.Write("密码错误");
                    log.Write("--------------------交易结束--------------------");
                    if (p.icParams == null)
                    {
                        //打开键盘,同时交易页面跳转到输入密码页面,万通
                        pwdBLL.OpenKeyboard(SysConfigHelper.readerNode("ZT598Port"), "9600", p.WtNo);
                        return(payResultInfo);
                    }
                    else
                    {
                        //打开键盘,同时交易页面跳转到输入密码页面,银行卡
                        pwdBLL.OpenKeyboard(SysConfigHelper.readerNode("ZT598Port"), "9600", p.icParams["cardNo"]);
                        return(payResultInfo);
                    }
                }
                else if ("9951".Equals(payResultInfo.code))
                {
                    //余额不足
                    log.Write("余额不足");
                    return(payResultInfo);
                }
                else if ("9900".Equals(payResultInfo.code))
                {
                    //发起退款
                    refund(ref payResultInfo, p);
                    return(payResultInfo);
                }
                else if ("0000".Equals(payResultInfo.code))
                {
                    //支付成功
                    log.Write("--------------------交易结束--------------------");
                    //银行卡给万通卡充值成功后,测试环境下会在其他服务页面中显示银行卡退款按钮,可进行退款操作
                    if (SysBLL.IsTest.Equals("测试"))
                    {
                        if (p.serviceType.Equals("4"))
                        {
                            //发起退款
                            RefundTest refundTest = new RefundTest();
                            refundTest.refundPayResultInfo = payResultInfo;
                            refundTest.refundPayParam      = p;
                            PayStaticParam.refundTest.Add(refundTest);
                        }
                    }
                    return(payResultInfo);
                }
                else
                {
                    return(payResultInfo);
                }
            }
            catch (Exception ex)
            {
                log.Write("error:99:支付失败:" + ex.Message + ex.InnerException);
                return(payResultInfo);
            }
        }