public static async Task <IdPayCallbackResult> CreateCallbackResultAsync( InvoiceContext context, HttpRequest httpRequest, MessagesOptions messagesOptions, CancellationToken cancellationToken) { var status = await httpRequest.TryGetParamAsync("status", cancellationToken).ConfigureAwaitFalse(); var id = await httpRequest.TryGetParamAsync("id", cancellationToken).ConfigureAwaitFalse(); var trackId = await httpRequest.TryGetParamAsync("track_id", cancellationToken).ConfigureAwaitFalse(); var orderId = await httpRequest.TryGetParamAsync("order_id", cancellationToken).ConfigureAwaitFalse(); var amount = await httpRequest.TryGetParamAsync("amount", cancellationToken).ConfigureAwaitFalse(); var(isSucceed, message) = CheckCallback(status.Value, orderId.Value, id.Value, trackId.Value, amount.Value, context, messagesOptions); IPaymentVerifyResult verifyResult = null; if (!isSucceed) { verifyResult = PaymentVerifyResult.Failed(message); } return(new IdPayCallbackResult { Id = id.Value, IsSucceed = isSucceed, Result = verifyResult }); }
public static async Task <ZarinPalCallbackResult> CreateCallbackResultAsync(HttpRequest httpRequest, CancellationToken cancellationToken) { var authority = await httpRequest.TryGetParamAsync("Authority", cancellationToken).ConfigureAwaitFalse(); var status = await httpRequest.TryGetParamAsync("Status", cancellationToken).ConfigureAwaitFalse(); IPaymentVerifyResult verifyResult = null; var isSucceed = status.Exists && string.Equals(status.Value, StringOkResult, StringComparison.InvariantCultureIgnoreCase); if (!isSucceed) { var message = $"Error {status}"; verifyResult = PaymentVerifyResult.Failed(message); } return(new ZarinPalCallbackResult { Authority = authority.Value, IsSucceed = isSucceed, Result = verifyResult }); }
public static void OnVerifyResult( IPaymentVerifyResult result, long expectedTrackingNumber, decimal expectedAmount, string expectedGatewayName, string expectedTransactionCode = null) { Assert.IsNotNull(result); AssertFailWhenResultIsNotSucceed(result); Assert.IsTrue(result.IsSucceed); Assert.AreEqual(PaymentVerifyResultStatus.Succeed, result.Status); Assert.AreEqual(expectedTrackingNumber, result.TrackingNumber); Assert.AreEqual(expectedGatewayName, result.GatewayName); Assert.AreEqual(GatewayAccount.DefaultName, result.GatewayAccountName); Assert.AreEqual(result.Amount, expectedAmount); Assert.IsNotNull(result.TransactionCode); if (!string.IsNullOrEmpty(expectedTransactionCode)) { Assert.AreEqual(expectedTransactionCode, result.TransactionCode); } }
public static PayIrVerifyAdditionalData GetPayIrAdditionalData(this IPaymentVerifyResult result) { if (result == null) { throw new ArgumentNullException(nameof(result)); } result.AdditionalData.TryGetValue(AdditionalDataKey, out var additionalData); return(additionalData as PayIrVerifyAdditionalData); }
internal static void SetPayIrAdditionalData(this IPaymentVerifyResult result, SepehrGatewayVerificationAdditionalData additionalData) { if (result == null) { throw new ArgumentNullException(nameof(result)); } if (additionalData == null) { throw new ArgumentNullException(nameof(additionalData)); } result.AdditionalData.Add(SepehrHelper.VerificationAdditionalDataKey, additionalData); }
internal static void SetPayIrAdditionalData(this IPaymentVerifyResult result, PayIrVerifyAdditionalData additionalData) { if (result == null) { throw new ArgumentNullException(nameof(result)); } if (additionalData == null) { throw new ArgumentNullException(nameof(additionalData)); } result.AdditionalData.Add(AdditionalDataKey, additionalData); }
/// <summary> /// Refunds completely the paid payment. /// </summary> /// <param name="onlinePayment"></param> /// <param name="verifyResult"></param> /// <param name="cancellationToken"></param> public static Task <IPaymentRefundResult> RefundCompletelyAsync( this IOnlinePayment onlinePayment, IPaymentVerifyResult verifyResult, CancellationToken cancellationToken = default) { if (onlinePayment == null) { throw new ArgumentNullException(nameof(onlinePayment)); } if (verifyResult == null) { throw new ArgumentNullException(nameof(verifyResult)); } return(onlinePayment.RefundAsync(new RefundInvoice(verifyResult.TrackingNumber), cancellationToken)); }
public static PayIrCallbackResult CreateCallbackResult(HttpRequest httpRequest) { httpRequest.TryGetParam("Token", out var token); httpRequest.TryGetParam("Status", out var status); IPaymentVerifyResult verifyResult = null; var isSucceed = string.Equals(status, OkResult, StringComparison.InvariantCultureIgnoreCase); if (!isSucceed) { var message = $"Error {status}"; verifyResult = PaymentVerifyResult.Failed(message); } return(new PayIrCallbackResult { Token = token, IsSucceed = isSucceed, Result = verifyResult }); }
public static IdPayCallbackResult CreateCallbackResult(InvoiceContext context, HttpRequest httpRequest, MessagesOptions messagesOptions) { httpRequest.TryGetParam("status", out var status); httpRequest.TryGetParam("id", out var id); httpRequest.TryGetParam("track_id", out var trackId); httpRequest.TryGetParam("order_id", out var orderId); httpRequest.TryGetParam("amount", out var amount); var(isSucceed, message) = CheckCallback(status, orderId, id, trackId, amount, context, messagesOptions); IPaymentVerifyResult verifyResult = null; if (!isSucceed) { verifyResult = PaymentVerifyResult.Failed(message); } return(new IdPayCallbackResult { Id = id, IsSucceed = isSucceed, Result = verifyResult }); }
/// <summary> /// Refunds completely the paid payment. /// </summary> /// <param name="onlinePayment"></param> /// <param name="verifyResult"></param> public static IPaymentRefundResult RefundCompletely(this IOnlinePayment onlinePayment, IPaymentVerifyResult verifyResult) { if (onlinePayment == null) { throw new ArgumentNullException(nameof(onlinePayment)); } if (verifyResult == null) { throw new ArgumentNullException(nameof(verifyResult)); } return(onlinePayment.Refund(new RefundInvoice(verifyResult.TrackingNumber))); }
public static async Task <CallbackResultModel> CreateCallbackResultAsync( InvoiceContext context, HttpRequest httpRequest, SepehrGatewayAccount account, MessagesOptions messages, CancellationToken cancellationToken) { var respCodeParam = await httpRequest.TryGetParamAsync("respcode", cancellationToken).ConfigureAwaitFalse(); var respMsgParam = await httpRequest.TryGetParamAsync("respmsg", cancellationToken).ConfigureAwaitFalse(); var invoiceIdParam = await httpRequest.TryGetParamAsync("invoiceid", cancellationToken).ConfigureAwaitFalse(); var terminalIdParam = await httpRequest.TryGetParamAsync("terminalid", cancellationToken).ConfigureAwaitFalse(); var amountParam = await httpRequest.TryGetParamAsync("amount", cancellationToken).ConfigureAwaitFalse(); var traceNumberParam = await httpRequest.TryGetParamAsync("tracenumber", cancellationToken).ConfigureAwaitFalse(); var rrnParam = await httpRequest.TryGetParamAsync("rrn", cancellationToken).ConfigureAwaitFalse(); var digitalReceiptParam = await httpRequest.TryGetParamAsync("digitalreceipt", cancellationToken).ConfigureAwaitFalse(); var cardNumberParam = await httpRequest.TryGetParamAsync("cardnumber", cancellationToken).ConfigureAwaitFalse(); bool isSucceed; IPaymentVerifyResult verifyResult = null; long traceNumber = 0; long rrn = 0; if (!respCodeParam.Exists) { verifyResult = PaymentVerifyResult.Failed(messages.InvalidDataReceivedFromGateway); isSucceed = false; } else { if (!int.TryParse(respCodeParam.Value, out var responseCode)) { verifyResult = PaymentVerifyResult.Failed(messages.InvalidDataReceivedFromGateway); isSucceed = false; } else if (responseCode != 0) { var message = respMsgParam.Exists ? (string)respMsgParam.Value : messages.PaymentFailed; verifyResult = PaymentVerifyResult.Failed(message); isSucceed = false; } else { var isValid = true; var message = messages.InvalidDataReceivedFromGateway; if (!invoiceIdParam.Exists || !string.Equals(invoiceIdParam.Value, context.Payment.TrackingNumber.ToString(), StringComparison.InvariantCultureIgnoreCase)) { isValid = false; message += " InvoiceID is not valid."; } if (!terminalIdParam.Exists || !string.Equals(terminalIdParam.Value, account.TerminalId.ToString(), StringComparison.InvariantCultureIgnoreCase)) { isValid = false; message += " TerminalID is not valid."; } if (!amountParam.Exists || !string.Equals(amountParam.Value, ((long)context.Payment.Amount).ToString(), StringComparison.InvariantCultureIgnoreCase)) { isValid = false; message += " Amount is not valid."; } if (!traceNumberParam.Exists) { isValid = false; message += " TraceNumber doesn't exist."; } else { traceNumber = long.Parse(traceNumberParam.Value); } if (!rrnParam.Exists) { isValid = false; message += " RRN doesn't exist."; } else { rrn = long.Parse(rrnParam.Value); } if (!digitalReceiptParam.Exists) { isValid = false; message += " DigitalReceipt doesn't exist."; } if (!isValid) { verifyResult = PaymentVerifyResult.Failed(message); } isSucceed = isValid; } } return(new CallbackResultModel { IsSucceed = isSucceed, Result = verifyResult, TraceNumber = traceNumber, Rrn = rrn, DigitalReceipt = digitalReceiptParam.Value, CardNumber = cardNumberParam.Value }); }
/// <summary> /// Gets the verification additional data from Sepehr gateway. /// </summary> public static SepehrGatewayVerificationAdditionalData GetSepehrAdditionalData(this IPaymentVerifyResult result) { if (result == null) { throw new ArgumentNullException(nameof(result)); } result.AdditionalData.TryGetValue(SepehrHelper.VerificationAdditionalDataKey, out var additionalData); return(additionalData as SepehrGatewayVerificationAdditionalData); }