public static async Task <PaymentRequestResult> CreateRequestResult( HttpResponseMessage responseMessage, HttpContext httpContext, SepehrGatewayAccount account, MessagesOptions messages) { if (!responseMessage.IsSuccessStatusCode) { return(PaymentRequestResult.Failed($"Operation failed. Http Status: {responseMessage.StatusCode}", account.Name)); } var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse(); var result = JsonConvert.DeserializeObject <TokenResponseModel>(response); if (result == null) { return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name)); } if (result.Status != 0) { var message = SepehrGatewayResultTranslator.Translate(result.Status.ToString(), messages); return(PaymentRequestResult.Failed(message, account.Name)); } if (result.AccessToken.IsNullOrWhiteSpace()) { return(PaymentRequestResult.Failed(messages.InvalidDataReceivedFromGateway, account.Name)); } var transporterDescriptor = GatewayTransporterDescriptor.CreatePost( PaymentPageUrl, new Dictionary <string, string> { { "TerminalID", account.TerminalId.ToString() }, { "token", result.AccessToken } }); var transporter = new DefaultGatewayTransporter(httpContext, transporterDescriptor); return(PaymentRequestResult.Succeed(transporter, account.Name)); }
public static async Task <IPaymentRefundResult> CreateRefundResult(InvoiceContext context, HttpResponseMessage responseMessage, MessagesOptions messagesOptions) { if (!responseMessage.IsSuccessStatusCode) { return(PaymentRefundResult.Failed($"Operation failed. Http Status: {responseMessage.StatusCode}")); } var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse(); var result = JsonConvert.DeserializeObject <VerificationRollbackResponseModel>(response); if (result == null) { return(PaymentRefundResult.Failed(messagesOptions.InvalidDataReceivedFromGateway)); } if (result.Status.IsNullOrWhiteSpace()) { return(PaymentRefundResult.Failed(messagesOptions.InvalidDataReceivedFromGateway)); } PaymentRefundResultStatus status; string message; switch (result.Status.ToLower()) { case "ok": if (!long.TryParse(result.ReturnId, out var amount)) { message = $"{messagesOptions.InvalidDataReceivedFromGateway} Cannot parse the amount. Amount: {result.ReturnId}"; status = PaymentRefundResultStatus.Failed; } else if (amount != (long)context.Payment.Amount) { status = PaymentRefundResultStatus.Failed; message = $"{messagesOptions.PaymentFailed} The amount that received from the gateway and the actual invoice amount are not equal. Invoice amount: {(long)context.Payment.Amount}. Received amount: {result.ReturnId}"; } else { status = PaymentRefundResultStatus.Succeed; message = messagesOptions.PaymentSucceed; } break; case "nok": status = PaymentRefundResultStatus.Failed; message = SepehrGatewayResultTranslator.Translate(result.ReturnId, messagesOptions); if (message.IsNullOrEmpty()) { message = messagesOptions.PaymentFailed; } break; case "duplicate": status = PaymentRefundResultStatus.AlreadyRefunded; message = !result.Message.IsNullOrWhiteSpace() ? result.Message : "The invoice has been already refunded before."; break; default: status = PaymentRefundResultStatus.Failed; message = $"{messagesOptions.InvalidDataReceivedFromGateway} Operation failed. Status value is not valid."; break; } return(new PaymentRefundResult { Status = status, Message = message }); }
public static async Task <PaymentVerifyResult> CreateVerifyResult(InvoiceContext context, HttpResponseMessage responseMessage, CallbackResultModel callbackResult, MessagesOptions messagesOptions) { if (!responseMessage.IsSuccessStatusCode) { return(PaymentVerifyResult.Failed($"Operation failed. Http Status: {responseMessage.StatusCode}")); } var response = await responseMessage.Content.ReadAsStringAsync().ConfigureAwaitFalse(); var result = JsonConvert.DeserializeObject <VerificationRollbackResponseModel>(response); if (result == null) { return(PaymentVerifyResult.Failed(messagesOptions.InvalidDataReceivedFromGateway)); } if (result.Status.IsNullOrWhiteSpace()) { return(PaymentVerifyResult.Failed(messagesOptions.InvalidDataReceivedFromGateway)); } PaymentVerifyResultStatus status; string message; switch (result.Status.ToLower()) { case "ok": if (!long.TryParse(result.ReturnId, out var amount)) { message = $"{messagesOptions.InvalidDataReceivedFromGateway} Cannot parse the amount. Amount: {result.ReturnId}"; status = PaymentVerifyResultStatus.Failed; } else if (amount != (long)context.Payment.Amount) { status = PaymentVerifyResultStatus.Failed; message = $"{messagesOptions.PaymentFailed} The amount that received from the gateway and the actual invoice amount are not equal. Invoice amount: {(long)context.Payment.Amount}. Received amount: {result.ReturnId}"; } else { status = PaymentVerifyResultStatus.Succeed; message = messagesOptions.PaymentSucceed; } break; case "nok": status = PaymentVerifyResultStatus.Failed; message = SepehrGatewayResultTranslator.Translate(result.ReturnId, messagesOptions); if (message.IsNullOrEmpty()) { message = messagesOptions.PaymentFailed; } break; case "duplicate": status = PaymentVerifyResultStatus.AlreadyVerified; message = !result.Message.IsNullOrWhiteSpace() ? result.Message : messagesOptions.PaymentIsAlreadyProcessedBefore; break; default: status = PaymentVerifyResultStatus.Failed; message = $"{messagesOptions.InvalidDataReceivedFromGateway} Verification failed. Status value is not valid."; break; } var verificationResult = new PaymentVerifyResult { Status = status, Message = message, TransactionCode = callbackResult.Rrn.ToString() }; var verificationAdditionalData = new SepehrGatewayVerificationAdditionalData { TraceNumber = callbackResult.TraceNumber, DigitalReceipt = callbackResult.DigitalReceipt, Rrn = callbackResult.Rrn, CardNumber = callbackResult.CardNumber }; verificationResult.SetSepehrAdditionalData(verificationAdditionalData); var serializedAdditionalData = JsonConvert.SerializeObject(verificationAdditionalData); verificationResult.DatabaseAdditionalData.Add(VerificationAdditionalDataKey, serializedAdditionalData); return(verificationResult); }