/// <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); }
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)); }
/// <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; }
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)); }
/// <summary> /// 构造函数 /// </summary> /// <param name="gateway">支付网关</param> protected NotifyEventArgs(BaseGateway gateway) { _gateway = gateway; _notifyServerHostAddress = HttpUtil.RemoteIpAddress; }