/// <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; }
/// <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; }
/// <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; }
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; }
/// <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; }
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"); }
/// <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; }
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))); } }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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))); } }
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); }