Beispiel #1
0
        /// <summary>
        /// 获取网关
        /// </summary>
        /// <param name="gateways">网关列表</param>
        /// <returns></returns>
        public static BaseGateway GetGateway(IGateways gateways)
        {
            var         gatewayData = ReadNotifyData();
            BaseGateway gateway     = null;

            foreach (var item in gateways.GetList())
            {
                if (ExistParameter(item.NotifyVerifyParameter, gatewayData))
                {
                    if (item.Merchant.AppId == gatewayData
                        .GetStringValue(item.NotifyVerifyParameter.FirstOrDefault()))
                    {
                        gateway = item;
                        break;
                    }
                }
            }

            if (gateway is null)
            {
                gateway = new NullGateway();
            }

            gateway.GatewayData = gatewayData;
            return(gateway);
        }
Beispiel #2
0
        private async Task <SendEventResult> SendNotifyEventAsync(BaseGateway gateway)
        {
            var success = false;

            try
            {
                var eventArgs = await GetNotifyEvent(gateway);

                switch (eventArgs)
                {
                case UnknownGatewayEventArgs unknownGatewayEventArgs:
                    OnUnknownGateway(unknownGatewayEventArgs);
                    break;

                case UnKnownNotifyEventArgs unKnownNotifyEventArgs:
                    OnUnknownNotify(unKnownNotifyEventArgs);
                    break;

                case PaySucceedEventArgs args:
                {
                    OnPaySucceed(args);
                    success = true;
                    break;
                }

                case RefundSucceedEventArgs refundSucceedEventArgs:
                {
                    OnRefundSucceed(refundSucceedEventArgs);
                    success = true;
                    break;
                }

                case CancelSucceedEventArgs cancelSucceedEventArgs:
                {
                    OnCancelSucceed(cancelSucceedEventArgs);
                    success = true;
                    break;
                }
                }
            }
            catch (GatewayException ex)
            {
                OnUnknownNotify(new UnKnownNotifyEventArgs(gateway)
                {
                    Message = ex.Message
                });
            }


            return(new SendEventResult(gateway, success));
        }
Beispiel #3
0
        /// <summary>
        /// 添加网关
        /// </summary>
        /// <param name="gateway">网关</param>
        /// <returns></returns>
        public bool Add(BaseGateway gateway)
        {
            if (gateway != null)
            {
                if (!Exist(gateway.Merchant.AppId))
                {
                    _list.Add(gateway);

                    return true;
                }
                else
                {
                    throw new GatewayException("该商户数据已存在");
                }
            }

            return false;
        }
Beispiel #4
0
        private async Task <NotifyEventArgs> GetNotifyEvent(BaseGateway gateway)
        {
            if (gateway is NullGateway)
            {
                return(new UnknownGatewayEventArgs(gateway));
            }

            if (!await gateway.ValidateNotifyAsync())
            {
                return(new UnKnownNotifyEventArgs(gateway)
                {
                    Message = "签名验证失败"
                });
            }

            if (HttpUtil.RequestType == "GET")
            {
                return(new PaySucceedEventArgs(gateway));
            }

            if (gateway.IsPaySuccess)
            {
                return(new PaySucceedEventArgs(gateway));
            }

            if (gateway.IsRefundSuccess)
            {
                return(new RefundSucceedEventArgs(gateway));
            }

            if (gateway.IsCancelSuccess)
            {
                return(new CancelSucceedEventArgs(gateway));
            }

            return(new UnKnownNotifyEventArgs(gateway));
        }
Beispiel #5
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="gateway">支付网关</param>
 protected NotifyEventArgs(BaseGateway gateway)
 {
     _gateway = gateway;
     _notifyServerHostAddress = HttpUtil.RemoteIpAddress;
 }