示例#1
0
        /// <summary>
        /// 验证商户
        /// </summary>
        /// <param name="model"></param>
        /// <param name="merchant"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        private bool OrderVerify(string orderId, out PayOrder payOrder, out PayChannel payChannel, out string msg)
        {
            msg        = "";
            payChannel = null;
            payOrder   = null;

            var order = this._payOrderService.Get(c => c.OrderId == orderId);

            payOrder = order;

            if (order.IsNull())
            {
                msg = "订单不存在";
                return(false);
            }

            var channel = this._payChannelService.Get(c => c.ChannelId == order.ChannelId);

            payChannel = channel;

            if (channel.IsNull())
            {
                msg = "渠道不存在";
                return(false);
            }

            return(true);
        }
示例#2
0
文件: PayAlPaySm.cs 项目: dmhai/dxpay
        /// <summary>
        /// 根据参数,读取通道信息
        /// </summary>
        /// <param name="paymode">关联平台(1:安卓,2:ios,3:H5)</param>
        /// <param name="arid">风险配置表id</param>
        /// <param name="CacheTime">缓存时间</param>
        ///  <param name="appid">应用id</param>
        /// <returns></returns>

        public override PayChannelAbstract LoadChannel(int paymode, int arid, int CacheTime, int appid)
        {
            PayChannel payc = new PayChannel();

            payc.PassName = SelectPayChannel.SelectPass(7, paymode, arid, CacheTime, appid);
            return(payc);
        }
示例#3
0
        public ServiceResult Update(PayChannel model)
        {
            var result = new ServiceResult();

            this._payChannelReps.Update(model);

            return(result.IsSucceed("编辑支付渠道成功"));
        }
示例#4
0
        public ServiceResult Add(PayChannel model)
        {
            var result = new ServiceResult();

            this._payChannelReps.Add(model);

            return(result.IsSucceed("新增支付渠道成功"));
        }
示例#5
0
 public ActionResult AddForAjax(PayChannel model)
 {
     model.ChannelId  = Guid.NewGuid().ToString();
     model.CreateBy   = CurrentSysUser.UserName;
     model.CreateTime = DateTime.Now;
     model.FeeRate    = model.FeeRate / 100;
     return(Json(this._payChannelService.Add(model)));
 }
示例#6
0
        //занесение данных из объекта данных в контролы
        public void Build(PayChannel data)
        {
            Data = data;

            updating++; //включаем режим обновления

            tbNameChannel.Text = data.NameChannel;
            nudPriceHour.Value = data.PriceHour;

            updating--; //выключаем режим обновления
        }
示例#7
0
 public ActionResult EditForAjax(PayChannel model)
 {
     return(Json(this._payChannelService.Update(c => c.ChannelId == model.ChannelId, c => new PayChannel()
     {
         ChannelName = model.ChannelName,
         MerchantInfo = model.MerchantInfo,
         Remark = model.Remark,
         MinOrderAmount = model.MinOrderAmount,
         MaxOrderAmount = model.MaxOrderAmount,
         PaySite = model.PaySite,
         FeeRate = model.FeeRate / 100,
         Status = model.Status,
         UpdateBy = CurrentSysUser.UserName,
         UpdateTime = DateTime.Now
     })));
 }
示例#8
0
        public override PayResult Notify(IDictionary <string, string> dicParams, PayChannel channel)
        {
            var payResult = PayResult.IsFailed();

            if (dicParams["paystatus"].ToUpper() == "SUCCESS")
            {
                payResult.Success         = true;
                payResult.MerchantOrderNo = dicParams["customerbillno"];
                payResult.OrderAmount     = dicParams["preorderamount"].TryDecimal(0).Value;
                payResult.OrderNo         = dicParams["orderno"];
                payResult.IsVerify        = Verify(dicParams, channel);
            }
            else
            {
                payResult.Success = false;
            }
            return(payResult);
        }
示例#9
0
        public static string GetName(this PayChannel payChannel)
        {
            switch (payChannel)
            {
            case PayChannel.balance:
                return("余额");

            case PayChannel.bank:
                return("银行转账");

            case PayChannel.alipay:
            case PayChannel.alipay_wap:
            case PayChannel.alipay_pc_direct:
            case PayChannel.alipay_qr:
                return("支付宝");

            case PayChannel.wx:
            case PayChannel.wx_pub:
            case PayChannel.wx_pub_qr:
                return("微信");

            case PayChannel.upmp:
            case PayChannel.upacp:
            case PayChannel.upacp_wap:
            case PayChannel.upacp_pc:
                return("银联");

            case PayChannel.bfb:
            case PayChannel.bfb_wap:
                return("百度钱包");

            case PayChannel.yeepay_wap:
                return("易宝");

            case PayChannel.jdpay_wap:
                return("京东钱包");

            case PayChannel.apple_pay:
                return("苹果");

            default:
                return("未知");
            }
        }
示例#10
0
        private IDictionary <string, string> CreatePayRequest(PayOrder order, PayChannel channel)
        {
            var request = new Dictionary <string, string>();

            request.Add("customerno", channel.MerchantNo);
            request.Add("channeltype", GetPayType(order.ChannelType));
            request.Add("orderamount", order.OrderAmount.ToString("0.00"));
            request.Add("customerbillno", order.OrderNo);
            request.Add("customerbilltime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            request.Add("ip", order.Ip);
            request.Add("devicetype", order.DeviceType);
            request.Add("customeruser", order.MemberInfo.IsNullOrWhiteSpace() ? "ok" : "ok");
            request.Add("notifyurl", order.NotifyUrl);
            //request.Add("returnurl", order.SuccessUrl);

            //if (type == PayType.OnlineBank)
            //{
            //    request.Add("bankcode", bankMapping[order.BankCode]);
            //}

            request = request.OrderBy(c => c.Key).ToDictionary(p => p.Key, o => o.Value);
            StringBuilder sb = new StringBuilder();

            foreach (var item in request)
            {
                if (!string.IsNullOrWhiteSpace(item.Value) && item.Key != "sign")
                {
                    sb.AppendFormat("&{0}={1}", item.Key.ToLower(), item.Value);
                }
            }
            string signStr = sb.ToString().Substring(1) + "&key=" + channel.MerchantKey;

            string md5Sign = signStr.EncToMD5();

            request.Add("sign", md5Sign);


            return(request);
        }
示例#11
0
        private bool Verify(IDictionary <string, string> parameters, PayChannel channel)
        {
            try
            {
                StringBuilder sb = new StringBuilder();

                parameters = parameters.OrderBy(c => c.Key).ToDictionary(p => p.Key, o => o.Value);
                foreach (var item in parameters)
                {
                    if (!string.IsNullOrWhiteSpace(item.Value) && item.Key != "sign")
                    {
                        sb.AppendFormat("{0}={1}&", item.Key, item.Value);
                    }
                }
                string signStr = sb.AppendFormat("key={0}", channel.MerchantKey).ToString();

                return(signStr.EncToMD5() == parameters["sign"]);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
示例#12
0
        public ActionResult Index(string orderId)
        {
            var           response    = new BaseResponse();
            BaseRequest   baseRequest = new BaseRequest();
            ServiceResult result      = new ServiceResult();
            var           bizCode     = string.Empty;
            string        errMsg      = "";
            PayOrder      order       = null;
            PayChannel    payChannel  = null;

            if (orderId.IsNullOrWhiteSpace())
            {
                return(Json(result.IsFailed("参数错误,orderid")));
            }
            //订单校验
            if (!OrderVerify(orderId, out order, out payChannel, out errMsg))
            {
                return(Json(result.IsFailed(errMsg)));
            }

            baseRequest.Order      = order;
            baseRequest.PayChannel = payChannel;
            bizCode = payChannel.ChannelCode;
            if (bizCode.IsNullOrWhiteSpace())
            {
                return(Json(result.IsFailed("无效交易类型,ChannelCode为空")));
            }

            if (!ProcessorUtil.BizCodeValid(bizCode))
            {
                return(Json(result.IsFailed("支付标识和DescriptionAttribute不一致")));
            }
            var processor = this.factory.Create(bizCode);

            //构建请求参数
            var payParams = processor.CreatePayRequest(baseRequest);

            //如果是浏览器表单提交
            if (processor.IsPostForm)
            {
                ViewData["url"]    = processor.PayUrl;
                ViewData["method"] = processor.RequestMethod;
                return(View(payParams));
            }

            //异步请求
            PayResponse payResponse = processor.Process(payParams);

            if (!payResponse.Success)
            {
                return(Json(result.IsFailed(payResponse.Message)));
            }
            switch (processor.PayModel)
            {
            case PayModelEnum.无:
                break;

            case PayModelEnum.URL跳转:
                return(Redirect(payResponse.Data));

            case PayModelEnum.扫码:
                break;

            case PayModelEnum.二维码生成:
                return(QRCode(payResponse.Data));

            case PayModelEnum.HTML输出:
                return(Content(payResponse.Data, "text/html"));

            default:
                break;
            }
            return(View());
        }
示例#13
0
        private PayOrder CreateOrder(Request10001 request, Merchant merchant, PayService payProduct, PayChannel payChannel, MerchantPayService merchantPayService)
        {
            PayOrder order = new PayOrder();

            order.OrderId           = Guid.NewGuid().ToString();
            order.OrderNo           = DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(1000, 9999);
            order.AgentNo           = merchant.AgentNo;
            order.ChannelId         = payChannel.ChannelId;
            order.ChannelName       = payChannel.ChannelName;
            order.ChannelType       = payChannel.ChannelType;
            order.CreateTime        = DateTime.Now;
            order.DeviceType        = request.DeviceType;
            order.ExtendField       = request.ExtendField;
            order.FeeMode           = payChannel.SettleMode.ToString();
            order.SettleMode        = payChannel.SettleMode.ToStr();
            order.Ip                = request.Ip;
            order.MemberInfo        = "test";
            order.MerchantId        = merchant.MerchantId;
            order.MerchantOrderNo   = request.MerchantOrderNo;
            order.MerchantOrderTime = request.MerchantOrderTime.TryDateTime(DateTime.Now).Value;
            order.NotifyUrl         = request.NotifyUrl;
            order.OrderAmount       = request.OrderAmount.TryDecimal(0).Value;
            order.OrderDescription  = request.OrderDescription;
            order.PayStatus         = (int)Max.Models.Payment.Common.Enums.PayStatus.未支付;
            order.PayTime           = DateTime.Now;
            order.PreorderAmount    = order.OrderAmount;
            order.ServiceFee        = order.OrderAmount * merchantPayService.MerchantFeeRate;
            order.ServiceRate       = merchantPayService.MerchantFeeRate;
            order.TransAmount       = order.OrderAmount - order.ServiceFee;
            order.ServiceId         = payProduct.ServiceId;

            this._payOrderService.Add(order);
            return(order);
        }
示例#14
0
        public BaseResponse Index([FromUri] RequestData model)
        {
            var watcher = new Stopwatch();

            watcher.Start();

            var          response   = new BaseResponse();
            BaseResponse exResponse = null;

            var         requestId             = string.Empty;
            var         requestDataJson       = string.Empty;
            var         userDataJson          = string.Empty;
            var         logMsg                = new ApiLogMessage();
            var         bizCode               = string.Empty;
            var         urlEncodedUserData    = string.Empty;
            var         urlEncodedRequestData = string.Empty;
            var         parmUserData          = string.Empty;
            var         parmRequestData       = string.Empty;
            BaseRequest baseRequest           = new BaseRequest();
            PayOrder    order      = null;
            PayChannel  payChannel = null;

            try
            {
                if (model.IsNull() || model.RequestId.IsNullOrWhiteSpace())
                {
                    return(BaseResponse.Create(ApiEnum.ResponseCode.处理失败, "无效请求", null, 0));
                }


                //验证参数
                var errMsg = "";
                if (!ModelVerify(model, out errMsg))
                {
                    response = BaseResponse.Create(ApiEnum.ResponseCode.参数不正确, errMsg, null, 0);
                    return(response);
                }

                //订单校验
                if (!OrderVerify(model, out order, out payChannel, out errMsg))
                {
                    response = BaseResponse.Create(ApiEnum.ResponseCode.处理失败, errMsg, null, 0);
                    return(response);
                }

                ////验证签名
                //if (!VerifySign(baseRequest, merchant))
                //{
                //    response = BaseResponse.Create(ApiEnum.ResponseCode.无效调用凭证, "签名不正确", null, 0);
                //    return response;
                //}

                baseRequest.Order      = order;
                baseRequest.PayChannel = payChannel;
                bizCode = payChannel.ChannelCode;
                if (bizCode.IsNullOrWhiteSpace())
                {
                    return(BaseResponse.Create(ApiEnum.ResponseCode.无效交易类型, "无效交易类型,ChannelCode为空", null, 0));
                }

                if (!ProcessorUtil.BizCodeValid(bizCode))
                {
                    return(BaseResponse.Create(ApiEnum.ResponseCode.无效交易类型, "支付标识和DescriptionAttribute不一致", null, 0));
                }
                var processor = this.factory.Create(bizCode);
                response = processor.Process(baseRequest);
            }
            catch (Exception ex)
            {
                log.Error(ex);
                response       = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, "不好意思,程序开小差,正在重启" + ex.ToString(), 0);
                exResponse     = BaseResponse.Create(ApiEnum.ResponseCode.系统内部错误, ex.ToString(), 0);
                logMsg.IsError = true;
            }
            finally
            {
                //WriteRequestInfo(userData, requestData, requestId, bizCode);

                watcher.Stop();
                var duration = watcher.Elapsed.TotalMilliseconds;

                var logStr = string.Empty;
                logStr += string.Format("【请求报文】RequestId:{0}", requestId) + Environment.NewLine;
                logStr += string.Format("UserData:{0}", urlEncodedUserData) + Environment.NewLine;
                logStr += string.Format("RequestData:{0}", urlEncodedRequestData) + Environment.NewLine;
                logStr += string.Format("【响应报文】{0}", response.ToJson());
                logStr += string.Format("【耗时】{0}毫秒", duration);
                log.Info(logStr.ToString());


                logMsg.UserDataStr    = urlEncodedUserData;
                logMsg.RequestDataStr = urlEncodedRequestData;
                logMsg.RequestId      = requestId;
                logMsg.LogTime        = DateTime.Now;


                logMsg.RequestJson = requestDataJson;
                logMsg.Response    = exResponse.IsNull() ? response.ToJson() : exResponse.ToJson();
                logMsg.Duration    = duration;

                if (AppConfig.LogType == LogType.MQ)
                {
                    try
                    {
                        this.bus.Publish(logMsg);
                    }
                    catch (Exception ex)
                    {
                        log.Error("写入MQ失败,RequestId:{0}\r\n{1}".Fmt("", ex.ToString()));
                    }
                }
            }

            return(response);
        }
示例#15
0
 public virtual PayResult Notify(IDictionary <string, string> dicParams, PayChannel channel)
 {
     return(PayResult.IsSuccess());
 }