Пример #1
0
        /// <summary>
        /// 根据参数构造返回结果
        /// </summary>
        /// <param name="order"></param>
        public PayBuyerScanDynaResponse(TradeOrder order, SxfBuildPayTokenResponse rsp)
            : base(order)
        {
            Return_Code = PayTradeHelper.TransCodeBySxf(rsp.RspCod);
            Return_Msg  = rsp.RspMsg;
            Sign_Type   = PayConst.DEF_SIGNTYPE;
            Version     = PayConst.DEF_VERSION;

            Out_Trade_No = rsp.PayOrderNo;
            Pay_Token    = rsp.PayToken;
            QRCode_Url   = rsp.ImageUrl;
        }
Пример #2
0
        /// <summary>
        /// 构造退款申请响应商户基本信息
        /// </summary>
        /// <param name="order"></param>
        public RefundApplyResponse(TradeOrder order, SxfRefundApplyResponse rsp)
            : base(order)
        {
            Return_Code = PayTradeHelper.TransCodeBySxf(rsp.RspCod);
            Return_Msg  = rsp.RspMsg;
            Sign_Type   = PayConst.DEF_SIGNTYPE;
            Version     = PayConst.DEF_VERSION;

            Refund_Status = (PayTradeHelper.Convert2EnumString <RefundState>(PayTradeHelper.Convert2EnumValue <SxfRefundState>(rsp.RefundResult))).ToUpper();
            Out_Refund_No = rsp.OutRefundNo;
            Refund_Amount = rsp.RefundAmount;
        }
Пример #3
0
        /// <summary>
        /// 根据参数构造返回结果
        /// </summary>
        /// <param name="order"></param>
        /// <param name="rsp"></param>
        public PayMerchScanResponse(TradeOrder order, SxfScanPayResponse rsp)
            : base(order)
        {
            Return_Code = PayTradeHelper.TransCodeBySxf(rsp.RspCod);
            Return_Msg  = rsp.RspMsg;
            Sign_Type   = PayConst.DEF_SIGNTYPE;
            Version     = PayConst.DEF_VERSION;

            Out_Trade_No   = rsp.PayOrderNo;
            Receipt_Amount = PayTradeHelper.FromCent2Yuan(rsp.TxAmt);
            Pay_Status     = (PayTradeHelper.Convert2EnumString <PayState>(PayTradeHelper.Convert2EnumValue <SxfPayState>(rsp.PayResult))).ToUpper();
            Pay_Channel    = rsp.PayChannel;
        }
Пример #4
0
 public TradeResult(SxfScanPayResponse sxfRsp)
 {
     CreateDT      = DateTime.Now;
     MchId3        = sxfRsp.MerchantId;
     OutTradeNo    = sxfRsp.PayOrderNo;
     PayChannel    = PayTradeHelper.Convert2EnumValue <PayChannel>(sxfRsp.PayChannel);
     ReceiptAmount = sxfRsp.TxAmt * PayConst.CENT_2_YUAN_RATE;
     TradeState    = PayTradeHelper.Convert2EnumValue <SxfPayState>(sxfRsp.PayResult);
     SignType      = sxfRsp.SignType;
     TradeDate     = DateTime.Now.ToString("yyyyMMdd");
     TradeTime     = DateTime.Now.ToString("HHmmss");
     TradeType     = (short)QctTradeType.Income;
     Signature     = sxfRsp.Signature;
     Version       = sxfRsp.Version;
 }
Пример #5
0
 /// <summary>
 /// 退款通知对象转换为退款结果对象
 /// </summary>
 /// <param name="sxfRfdNotify"></param>
 /// <returns></returns>
 public TradeResult(SxfRefundNotifyRequest sxfRfdNotify)
 {
     CreateDT      = DateTime.Now;
     MchId3        = sxfRfdNotify.MerchantId;
     StoreId3      = sxfRfdNotify.ShopId;
     OutTradeNo    = sxfRfdNotify.RfdOrderNo;
     PayChannel    = PayTradeHelper.Convert2EnumValue <PayChannel>(sxfRfdNotify.PayChannel);
     ReceiptAmount = sxfRfdNotify.RfdAmt * PayConst.CENT_2_YUAN_RATE;
     TradeState    = PayTradeHelper.Convert2EnumValue <SxfRefundState>(sxfRfdNotify.RfdResult);
     SignType      = sxfRfdNotify.SignType;
     TradeDate     = sxfRfdNotify.RfdDate;
     TradeTime     = sxfRfdNotify.RfdTime;
     TradeType     = (short)QctTradeType.Expense;
     Signature     = sxfRfdNotify.Signature;
     Version       = sxfRfdNotify.Version;
 }
Пример #6
0
        public NotifyRefundRequest(TradeOrder order, TradeResult result)
        {
            Charset   = PayConst.DEF_CHARSET;
            Mch_Id    = order.CID;
            Store_Id  = order.SID;
            Device_Id = order.DeviceId;
            Sign_Type = PayConst.SXF_DEF_SIGNTYPE;
            Version   = PayConst.DEF_VERSION;

            Method        = PayConst.QCTTRADE_NOTIFY_REFUND;
            Out_Trade_No  = result.OutTradeNo;
            Refund_Amount = result.ReceiptAmount;
            Refund_Status = (PayTradeHelper.Convert2EnumString <RefundState>(result.TradeState)).ToUpper();
            Pay_Channel   = PayTradeHelper.Convert2EnumString <PayChannel>(result.PayChannel).ToUpper();
            Refund_Date   = PayTradeHelper.Convert2DateFormat(result.TradeDate, result.TradeTime, "yyyy-MM-dd HH:mm:ss");
        }
Пример #7
0
        /// <summary>
        /// 根据TradeOrder构造Sxf主扫支付动态支付订单
        /// </summary>
        /// <param name="order"></param>
        public SxfBuildPayTokenRequest(TradeOrder order, string payNotifyUrl) : base(order)
        {
            CharSet  = PayConst.SXF_DEF_CHARSET;
            SignType = PayConst.SXF_DEF_SIGNTYPE;
            Version  = PayConst.SXF_DEF_VERSION;

            Type         = PayConst.SXF_TYPE_BUILDPAYTOKEN;
            PayOrderNo   = order.OutTradeNo;
            TxDate       = order.CreateDT.ToString("yyyyMMdd");
            TxAmt        = PayTradeHelper.FromYuan2Cent(order.TotalAmount);
            UserMobile   = order.BuyerMobile;
            PayNotifyUrl = payNotifyUrl;
            OrderType    = PayConst.SXF_DEF_ORDERTYPE;
            GoodsName    = order.GoodsName;
            GoodDesc     = order.GoodsDesc;
        }
Пример #8
0
        public object SubmitQROrder(PayBuyerScanStaticRequest reqModel)
        {
            var errMsg = PayTradeHelper.TryValidateObject(reqModel);

            if (string.IsNullOrWhiteSpace(errMsg))
            {
                //取得商户当前系统时间
                var orderDate = DateTime.Now;
                //商户订单号
                String orderId = OrderHelper.GetMaxOutOrderNo();
                //商户订单日期

                var reqObj = new PayBuyerScanDynaRequest();
                reqObj.Mch_Id         = reqModel.Mch_Id;
                reqObj.Store_Id       = reqModel.Store_Id;
                reqObj.Device_Id      = "";
                reqObj.Method         = PayConst.QCTTRADE_PAY_QRORDER;
                reqObj.Charset        = PayConst.DEF_CHARSET;
                reqObj.Sign_Type      = PayConst.DEF_SIGNTYPE;
                reqObj.Version        = PayConst.DEF_VERSION;
                reqObj.Out_Trade_No   = orderId;
                reqObj.Create_Date    = orderDate;
                reqObj.Total_Amount   = reqModel.Total_Amount;
                reqObj.Pay_Notify_Url = "";
                reqObj.Buyer_Mobile   = "";
                reqObj.Goods_Name     = "购物消费";
                reqObj.Goods_Desc     = reqModel.Goods_Desc;
                reqObj.Sign           = "nosignrequest";

                OrderBuilder <PayBuyerScanDynaRequest, PayBuyerScanDynaResponse> buyerOrder = new OrderBuilderForBuyerScanDyna();
                var result = buyerOrder.Build(reqObj);
                if (!result.Successed)
                {
                    return(View("PayError"));
                }
                else
                {
                    Response.Redirect(buyerOrder.RspModel.Pay_Token);
                    return(View());
                    //return Json(buyerOrder.RspModel.Pay_Token);
                }
            }
            else
            {
                return(View("PayError", QctPayReturn.Fail(msg: errMsg)));
            }
        }
Пример #9
0
 /// <summary>
 /// 验证Model格式
 /// </summary>
 /// <returns></returns>
 public string TryValidateObject()
 {
     //var result = string.Empty;
     //var context = new ValidationContext(this, null, null);
     //var results = new List<ValidationResult>();
     //var resultState = Validator.TryValidateObject(this, context, results, true);
     //if (!resultState)
     //{
     //    results.ForEach(o =>
     //    {
     //        result += "," + o.ToString();
     //    });
     //    if (result.Length > 0)
     //        result = result.Substring(1);
     //}
     //return result;
     return(PayTradeHelper.TryValidateObject(this));
 }
Пример #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="merchStore"></param>
        /// <returns></returns>
        public RefundQueryResponse ToRefundQueryResponse(MerchantStoreChannelModel merchStore)
        {
            var obj = new RefundQueryResponse()
            {
                Mch_Id          = merchStore.MchId,
                Device_Id       = this.TerminalId,
                Refund_Trade_No = this.RfdOrderNo,
                Refund_Date     = PayTradeHelper.Convert2DateFormat(this.RfdDate, this.RfdTime, "yyyy-MM-dd HH:mm:ss"),
                Refund_Status   = (PayTradeHelper.Convert2EnumString <RefundState>(PayTradeHelper.Convert2EnumValue <SxfRefundState>(this.RfdStatus))).ToUpper(),
                Return_Code     = PayTradeHelper.TransCodeBySxf(this.RspCod),
                Return_Msg      = this.RspMsg,
                Store_Id        = merchStore.SID,
                Sign_Type       = this.SignType,
                Refund_Amount   = this.RfdAmt,
                Version         = PayConst.DEF_VERSION
            };

            return(obj);
        }
Пример #11
0
        /// <summary>
        /// 转换为BasePayQueryOrderList
        /// </summary>
        /// <param name="merchStore"></param>
        /// <returns></returns>
        public List <BasePayQueryResponse> ToBasePayQueryRspOrderList(MerchantStoreChannelModel merchStore)
        {
            var orderList = new List <BasePayQueryResponse>();

            if (this.OrderList != null)
            {
                foreach (var item in this.OrderList)
                {
                    orderList.Add(new BasePayQueryResponse()
                    {
                        Buyer_Mobile = item.UserMobile,
                        Order_Type   = item.OrderType,
                        Out_Trade_No = item.PayOrderNo,
                        Pay_Channel  = item.PayChannel,
                        Pay_Date     = PayTradeHelper.Convert2DateFormat(item.PayDate, item.PayTime, "yyyy-MM-dd HH:mm:ss"),
                        Pay_Status   = (PayTradeHelper.Convert2EnumString <PayState>(PayTradeHelper.Convert2EnumValue <SxfPayState>(item.PayStatus))).ToUpper(),
                        Total_Amount = item.TxAmt
                    });
                }
            }
            return(orderList);
        }
Пример #12
0
        /// <summary>
        /// 转换为PayBatchQueryResponse
        /// </summary>
        /// <param name="merchStore"></param>
        /// <returns></returns>
        public PayBatchQueryResponse ToPayBatchQueryRsp(MerchantStoreChannelModel merchStore)
        {
            var obj = new PayBatchQueryResponse()
            {
                Buyer_Mobile = this.UserMobile,
                Mch_Id       = merchStore.MchId,
                Device_Id    = this.TerminalId,
                Order_Type   = this.OrderType,
                Return_Code  = PayTradeHelper.TransCodeBySxf(this.RspCod),
                Return_Msg   = this.RspMsg,
                Store_Id     = merchStore.SID,
                Sign_Type    = this.SignType,
                Version      = PayConst.DEF_VERSION,
                Start_Date   = this.StartDate,
                End_Date     = this.EndDate,
                Page_Num     = this.PAG_NO,
                Page_Size    = this.PER_PAG_CNT,
                Order_List   = this.ToBasePayQueryRspOrderList(merchStore)
            };

            return(obj);
        }
Пример #13
0
        /// <summary>
        /// 转换为单笔支付订单查询响应Model
        /// </summary>
        /// <param name="merchStore"></param>
        /// <returns></returns>
        public PayQueryResponse ToPayQueryResponse(MerchantStoreChannelModel merchStore)
        {
            var obj = new PayQueryResponse()
            {
                Buyer_Mobile = this.UserMobile,
                Mch_Id       = merchStore.MchId,
                Device_Id    = this.TerminalId,
                Order_Type   = this.OrderType,
                Out_Trade_No = this.PayOrderNo,
                Pay_Channel  = this.PayChannel,
                Pay_Date     = PayTradeHelper.Convert2DateFormat(this.PayDate, this.PayTime, "yyyy-MM-dd HH:mm:ss"),
                Pay_Status   = (PayTradeHelper.Convert2EnumString <PayState>(PayTradeHelper.Convert2EnumValue <SxfPayState>(this.PayStatus))).ToUpper(),
                Return_Code  = this.RspCod,
                Return_Msg   = this.RspMsg,
                Store_Id     = merchStore.SID,
                Sign_Type    = this.SignType,
                Total_Amount = this.TxAmt,
                Version      = PayConst.DEF_VERSION
            };

            return(obj);
        }
Пример #14
0
 /// <summary>
 /// 发送请求
 /// </summary>
 /// <returns></returns>
 public QctPayReturn SendPost <TSxfReqModel, TSxfRspModel>(string url, TSxfReqModel sxfReqModel)
     where TSxfReqModel : SxfBaseTradeRequest
     where TSxfRspModel : SxfBaseTradeResponse
 {
     //var resultStr = string.Empty;
     try
     {
         var postResult = PayHelper.SendPost(url, PaySignHelper.ToDicAndSign(sxfReqModel, MerchModel.SecretKey3, "signature"));
         if (postResult.Successed)
         {
             var resultObj = JsonConvert.DeserializeObject <TSxfRspModel>(postResult.Data.ToString());
             if (resultObj.IsSuccess())
             {
                 return(QctPayReturn.Success(data: resultObj));
             }
             else
             {
                 //处理返回失败结果
                 LogEngine.WriteError(string.Format("发送交易请求成功但返回交易错误信息:请求参数:{0},返回参数:{1}]", sxfReqModel.ToJson(), postResult), null, LogModule.支付交易);
                 if (string.IsNullOrWhiteSpace(resultObj.RspMsg))
                 {
                     resultObj.RspMsg = "服务器请求失败";
                 }
                 return(QctPayReturn.Fail(PayTradeHelper.TransCodeBySxf(resultObj.RspCod), resultObj.RspMsg));
             }
         }
         else
         {
             return(postResult);
         }
     }
     catch (Exception ex)
     {
         return(ResultFail(msg: "订单请求失败", logMsg: string.Format("发送交易请求异常:服务器异常,请求参数:{0},异常信息:{1}]", sxfReqModel.ToJson(), ex.Message)));
     }
 }
Пример #15
0
        public object GetTradeDataPaging(NameValueCollection reqParams, out int totalCount)
        {
            var queryParams = new
            {
                InputSelect1   = reqParams["InputSelect1"] == null ? "" : reqParams["InputSelect1"].ToString(),
                InputSelect2   = reqParams["InputSelect2"] == null ? "" : reqParams["InputSelect2"].ToString(),
                InputValue1    = reqParams["InputValue1"] == null ? "" : reqParams["InputValue1"].Trim(),
                InputValue2    = reqParams["InputValue2"] == null ? "" : reqParams["InputValue2"].Trim(),
                SourceType     = reqParams["SourceType"] == null ? "" : reqParams["SourceType"].ToString(),
                ChannelNo      = reqParams["ChannelNo"] == null ? "" : reqParams["ChannelNo"].ToString(),
                StartTradeDate = reqParams["StartTradeDate"] == null ? "" : reqParams["StartTradeDate"].ToString(),
                EndTradeDate   = reqParams["EndTradeDate"] == null ? "" : reqParams["EndTradeDate"].ToString(),
            };

            #region query
            var query = TradeOrderRepst.GetQuery();
            if (!queryParams.InputValue1.IsNullOrEmpty())
            {
                switch (queryParams.InputSelect1)
                {
                case "1":    //商户订单号
                    query = query.Where(q => q.OutTradeNo == queryParams.InputValue1);
                    break;   //交易流水号

                case "2":
                    query = query.Where(q => q.TradeNo == queryParams.InputValue1);
                    break;

                default:
                    break;
                }
            }
            if (!queryParams.InputValue2.IsNullOrEmpty())
            {
                var outVal = 0;
                switch (queryParams.InputSelect2)
                {
                case "1":    //商户号
                    int.TryParse(queryParams.InputValue2, out outVal);
                    query = query.Where(q => q.CID == outVal);
                    break;    //门店号

                case "2":
                    query = query.Where(q => q.SID == queryParams.InputValue2);
                    break;

                case "3":    //设备号
                    query = query.Where(q => q.DeviceId == queryParams.InputValue2);
                    break;

                case "4":    //第三方商户号
                    query = query.Where(q => q.MchId3 == queryParams.InputValue2);
                    break;

                case "5":    //第三方门店号
                    query = query.Where(q => q.StoreId3 == queryParams.InputValue2);
                    break;

                default:
                    break;
                }
            }
            if (!queryParams.SourceType.IsNullOrEmpty())
            {//所属体系
                var value = (short)PaySourceType.CloudQctErp;
                short.TryParse(queryParams.SourceType, out value);
                query = query.Where(q => q.SourceType == value);
            }
            //if (!queryParams.PayChannel.IsNullOrEmpty())
            //{//支付渠道
            //    var value = (short)PayChannel.WX;
            //    short.TryParse(queryParams.PayChannel, out value);
            //    query = query.Where(q => q.PayChannel == value);
            //}
            if (!queryParams.ChannelNo.IsNullOrEmpty())
            {//支付通道
                var value = 0;
                int.TryParse(queryParams.ChannelNo, out value);
                query = query.Where(q => q.ChannelNo == value);
            }
            if (!queryParams.StartTradeDate.IsNullOrEmpty())
            {//订单时间开始时间
                var value = queryParams.StartTradeDate.Replace("-", "");
                var date  = Convert.ToDateTime(queryParams.StartTradeDate);
                //query = query.Where(q => String.Compare(q.TradeDate, value, StringComparison.Ordinal) >= 0);
                query = query.Where(q => q.CreateDT >= date);
            }
            if (!queryParams.EndTradeDate.IsNullOrEmpty())
            {//订单时间开始时间
                var value = queryParams.EndTradeDate.Replace("-", "");
                var date  = Convert.ToDateTime(queryParams.EndTradeDate).AddDays(1);
                //query = query.Where(q => String.Compare(q.TradeDate, value, StringComparison.Ordinal) <= 0);
                query = query.Where(q => q.CreateDT < date);
            }
            var query1 = (from s in query
                          join jpcm in PChannelManageRepst.GetQuery() on s.ChannelNo equals jpcm.ChannelNo into ipcm
                          from pcm in ipcm.DefaultIfEmpty()
                          select new TradeOrderExt()
            {
                Id = s.Id,
                TradeNo = s.TradeNo,
                OutTradeNo = s.OutTradeNo,
                CID = s.CID,
                SID = s.SID,
                DeviceId = s.DeviceId,
                MchId3 = s.MchId3,
                StoreId3 = s.StoreId3,
                DeviceId3 = s.DeviceId3,
                FeeType = s.FeeType,
                PayChannel = s.PayChannel,
                ChannelNo = s.ChannelNo,
                ChannelCode = pcm.ChannelCode,
                SourceType = s.SourceType,
                TradeType = s.TradeType,
                TotalAmount = s.TotalAmount,
                TradeDate = s.TradeDate,
                TradeTime = s.TradeTime,
                State = s.State,
                CreateDT = s.CreateDT
            });

            #endregion

            totalCount = query1.Count();
            var source = query1.ToPageList <TradeOrderExt>();
            var data   = from s in source
                         select new TradeOrderExt()
            {
                Id            = s.Id,
                TradeNo       = s.TradeNo,
                OutTradeNo    = s.OutTradeNo,
                CID           = s.CID,
                SID           = s.SID,
                DeviceId      = s.DeviceId,
                MchId3        = s.MchId3,
                StoreId3      = s.StoreId3,
                DeviceId3     = s.DeviceId3,
                FeeType       = s.FeeType,
                PayChannel    = s.PayChannel,
                ChannelNo     = s.ChannelNo,
                ChannelCode   = s.ChannelCode,
                SourceType    = s.SourceType,
                TradeType     = s.TradeType,
                TotalAmount   = s.TotalAmount,
                TradeDate     = s.TradeDate,
                TradeDateTime = PayTradeHelper.Convert2DateFormat(s.TradeDate, s.TradeTime, "yyyy-MM-dd HH:mm:ss"),
                TradeTime     = s.TradeTime,
                State         = s.State,
                CreateDT      = s.CreateDT
            };
            return(data);
        }