public override async Task <RefundResult> RefundAsync(GatewayRefundPaymentContext refundPaymentContext) { if (!long.TryParse(refundPaymentContext.TransactionId, out var longTransactionId)) { throw new Exception($"Transaction ID format is not valid. Transaction ID must be Int64. Value: {refundPaymentContext.TransactionId}"); } string webServiceXml = CreateReverseWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: refundPaymentContext.OrderNumber, saleOrderId: refundPaymentContext.OrderNumber, saleReferenceId: longTransactionId); var xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), webServiceXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); bool isSuccess = result == "0"; var status = isSuccess ? RefundResultStatus.Success : RefundResultStatus.Failed; IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); var translatedResult = gatewayResultTranslator.Translate(result); return(new RefundResult(Gateway.Mellat, refundPaymentContext.Amount, status, translatedResult)); }
public override async Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { string resCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResCode", caseSensitive: true); if (resCode.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Mellat, string.Empty, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway")); } // Reference ID string refId = verifyPaymentContext.RequestParameters.GetAs <string>("RefId", caseSensitive: true); // Transaction ID var saleReferenceId = verifyPaymentContext.RequestParameters.GetAs <string>("SaleReferenceId", caseSensitive: true); IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); var translatedResult = gatewayResultTranslator.Translate(resCode); var isSuccess = resCode == "0"; if (!isSuccess) { return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, VerifyResultStatus.Failed, translatedResult)); } string settleWebServiceXml = CreateSettleWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); string xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), settleWebServiceXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); isSuccess = result == "0"; var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; translatedResult = gatewayResultTranslator.Translate(result); return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); }
public override async Task <RequestResult> RequestAsync(Invoice invoice) { var webServiceXml = CreatePayRequestWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: invoice.OrderNumber, amount: invoice.Amount, localDate: DateTime.Now.ToString("yyyyMMdd"), localTime: DateTime.Now.ToString("HHmmss"), additionalData: string.Empty, callBackUrl: invoice.CallbackUrl, payerId: 0); var xmlResult = await WebHelper.SendXmlWebRequestAsync(GetWebServiceUrl(), webServiceXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); var arrayResult = result.Split(','); var resCode = arrayResult[0]; var refId = arrayResult.Length > 1 ? arrayResult[1] : string.Empty; IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); var translatedResult = gatewayResultTranslator.Translate(resCode); var isSucceed = resCode == OkResult; if (!isSucceed) { var status = resCode == DuplicateOrderNumberResult ? RequestResultStatus.DuplicateOrderNumber : RequestResultStatus.Failed; return(new RequestResult(status, translatedResult, refId)); } var postHtmlForm = CreatePayRequestHtmlForm(PaymentPageUrl, refId); return(new RequestResult(RequestResultStatus.Success, translatedResult, refId) { BehaviorMode = GatewayRequestBehaviorMode.Post, Content = postHtmlForm }); }
public override VerifyResult Verify(GatewayVerifyPaymentContext verifyPaymentContext) { var resCode = verifyPaymentContext.RequestParameters.GetAs <string>("ResCode", caseSensitive: true); if (resCode.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Mellat, string.Empty, string.Empty, VerifyResultStatus.NotValid, "Invalid data is received from the gateway")); } // Reference ID string refId = verifyPaymentContext.RequestParameters.GetAs <string>("RefId", caseSensitive: true); // Transaction ID var saleReferenceId = verifyPaymentContext.RequestParameters.GetAs <string>("SaleReferenceId", caseSensitive: true); // To translate gateway's result IGatewayResultTranslator gatewayResultTranslator = new MellatGatewayResultTranslator(); string translatedResult; if (resCode != OkResult) { translatedResult = gatewayResultTranslator.Translate(resCode); return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, VerifyResultStatus.Failed, translatedResult)); } // Verify var webServiceVerifyXml = CreateVerifyWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); var xmlResult = WebHelper.SendXmlWebRequest(GetWebServiceUrl(), webServiceVerifyXml); var result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); // Check if verifing is failed. VerifyResultStatus status; if (result != OkResult) { translatedResult = gatewayResultTranslator.Translate(result); status = result == AlreadyVerifiedResult ? VerifyResultStatus.AlreadyVerified : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); } // Settle var settleWebServiceXml = CreateSettleWebService( terminalId: Configuration.TerminalId, userName: Configuration.UserName, userPassword: Configuration.UserPassword, orderId: verifyPaymentContext.OrderNumber, saleOrderId: verifyPaymentContext.OrderNumber, saleReferenceId: Convert.ToInt64(saleReferenceId)); xmlResult = WebHelper.SendXmlWebRequest(GetWebServiceUrl(), settleWebServiceXml); result = XmlHelper.GetNodeValueFromXml(xmlResult, "return"); translatedResult = gatewayResultTranslator.Translate(result); var isSuccess = result == OkResult; status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; return(new VerifyResult(Gateway.Mellat, refId, saleReferenceId, status, translatedResult)); }