public static PaymentVerifyResult CreateVerifyResult(string webServiceResponse, InvoiceContext context, SamanCallbackResult callbackResult, MessagesOptions messagesOptions) { var stringResult = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result"); // This result is actually: TotalAmount // it must be equals to TotalAmount in database. var numericResult = Convert.ToInt64(stringResult); var isSuccess = numericResult > 0 && numericResult == (long)context.Payment.Amount; var message = isSuccess ? messagesOptions.PaymentSucceed : SamanResultTranslator.Translate(numericResult, messagesOptions); var result = new PaymentVerifyResult { Status = isSuccess ? PaymentVerifyResultStatus.Succeed : PaymentVerifyResultStatus.Failed, TransactionCode = callbackResult.TransactionId, Message = message }; result.AdditionalData.Add(AdditionalVerificationDataKey, new SamanAdditionalVerificationData { Cid = callbackResult.Cid, TraceNo = callbackResult.TraceNo, SecurePan = callbackResult.SecurePan, Rrn = callbackResult.Rrn }); return(result); }
public override async Task <VerifyResult> VerifyAsync(GatewayVerifyPaymentContext verifyPaymentContext) { if (verifyPaymentContext == null) { throw new ArgumentNullException(nameof(verifyPaymentContext)); } string state = verifyPaymentContext.RequestParameters.GetAs <string>("state"); if (state.IsNullOrWhiteSpace()) { return(new VerifyResult(Gateway.Saman, string.Empty, string.Empty, VerifyResultStatus.Failed, "Invalid data is received from the gateway.")); } string referenceId = verifyPaymentContext.RequestParameters.GetAs <string>("ResNum"); string transactionId = verifyPaymentContext.RequestParameters.GetAs <string>("RefNum"); IGatewayResultTranslator resultTranslator = new SamanStateTranslator(); var translatedMessage = resultTranslator.Translate(state); var isSuccess = state.Equals("OK", StringComparison.InvariantCultureIgnoreCase); var status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; if (!isSuccess) { return(new VerifyResult(Gateway.Saman, referenceId, transactionId, status, translatedMessage)); } string verifyXml = CreateVerifyXml(SamanConfiguration.MerchantId, transactionId); var result = await WebHelper.SendXmlWebRequestAsync(WebServiceUrl, verifyXml); result = XmlHelper.GetNodeValueFromXml(result, "result"); // This result is actually: TotalAmount // it must be equals to TotalAmount in database. int integerResult = Convert.ToInt32(result); isSuccess = integerResult > 0 && integerResult == verifyPaymentContext.Amount; status = isSuccess ? VerifyResultStatus.Success : VerifyResultStatus.Failed; resultTranslator = new SamanResultTranslator(); translatedMessage = resultTranslator.Translate(integerResult); return(new VerifyResult(Gateway.Saman, referenceId, transactionId, status, translatedMessage)); }
public static PaymentRefundResult CreateRefundResult(string webServiceResponse, MessagesOptions messagesOptions) { var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result"); var integerResult = Convert.ToInt32(result); var isSucceed = integerResult > 0; var message = SamanResultTranslator.Translate(integerResult, messagesOptions); return(new PaymentRefundResult { IsSucceed = isSucceed, Message = message }); }
private static async Task <PaymentRequestResult> CreateWebPaymentRequest( Invoice invoice, HttpContext httpContext, SamanGatewayAccount account, HttpClient httpClient, SamanGatewayOptions gatewayOptions, MessagesOptions messagesOptions, CancellationToken cancellationToken) { var data = CreateTokenRequest(invoice, account); var responseMessage = await httpClient.PostXmlAsync(gatewayOptions.WebApiTokenUrl, data, cancellationToken); var response = await responseMessage.Content.ReadAsStringAsync(); var token = XmlHelper.GetNodeValueFromXml(response, "result"); string message = null; var isSucceed = true; if (token.IsNullOrEmpty()) { message = $"{messagesOptions.InvalidDataReceivedFromGateway} Token is null or empty."; isSucceed = false; } else if (long.TryParse(token, out var longToken) && longToken < 0) { message = SamanResultTranslator.Translate(longToken, messagesOptions); isSucceed = false; } if (!isSucceed) { return(PaymentRequestResult.Failed(message, account.Name)); } return(PaymentRequestResult.SucceedWithPost( account.Name, httpContext, gatewayOptions.WebPaymentPageUrl, new Dictionary <string, string> { { "Token", token }, { "RedirectURL", invoice.CallbackUrl } })); }
public static PaymentVerifyResult CreateVerifyResult(string webServiceResponse, InvoiceContext context, SamanCallbackResult callbackResult, MessagesOptions messagesOptions) { var result = XmlHelper.GetNodeValueFromXml(webServiceResponse, "result"); // This result is actually: TotalAmount // it must be equals to TotalAmount in database. var numericResult = Convert.ToInt64(result); var isSuccess = numericResult > 0 && numericResult == (long)context.Payment.Amount; var message = isSuccess ? messagesOptions.PaymentSucceed : SamanResultTranslator.Translate(numericResult, messagesOptions); return(new PaymentVerifyResult { IsSucceed = isSuccess, TransactionCode = callbackResult.TransactionId, Message = message }); }
public override async Task <RefundResult> RefundAsync(GatewayRefundPaymentContext refundPaymentContext) { string reverseXml = CreateReverseWebServiceXml( SamanConfiguration.MerchantId, SamanConfiguration.Password, refundPaymentContext.TransactionId, refundPaymentContext.Amount); var result = await WebHelper.SendXmlWebRequestAsync(WebServiceUrl, reverseXml); result = XmlHelper.GetNodeValueFromXml(result, "result"); int integerResult = Convert.ToInt32(result); IGatewayResultTranslator gatewayResultTranslator = new SamanResultTranslator(); var translatedMessage = gatewayResultTranslator.Translate(integerResult); var isSuccess = integerResult > 0; var status = isSuccess ? RefundResultStatus.Success : RefundResultStatus.Failed; return(new RefundResult(Gateway.Saman, refundPaymentContext.Amount, status, translatedMessage)); }