public override Task <PaymentProviderReversalPaymentResponse> ReversalPaymentAsync(ReversalRequest request, CancellationToken cancellation)
        {
            var tcs = new TaskCompletionSource <PaymentProviderReversalPaymentResponse>();

            try
            {
                var pec = new ir.shaparak.sep.PaymentIFBinding();

                pec.reverseTransactionCompleted += new reverseTransactionCompletedEventHandler((sender, args) =>
                {
                    if (args.Error != null)
                    {
                        tcs.TrySetException(args.Error);
                    }
                    else
                    if (!args.Cancelled)
                    {
                        try
                        {
                            var result = new PaymentProviderReversalPaymentResponse(Now);

                            result.Status       = 0;
                            result.Succeeded    = (args.Result == 1);
                            result.ProviderType = this.ProviderType;

                            tcs.SetResult(result);
                        }
                        catch (Exception ex)
                        {
                            tcs.TrySetException(ex);
                        }
                    }
                    else
                    {
                        tcs.SetCanceled();
                    }

                    pec.Dispose();
                });

                cancellation.Register(() => pec.CancelAsync(request.PaymentCode));

                pec.reverseTransactionAsync(request.PaymentCode, Config.Credentials.Pin, Config.Credentials.Username, Config.Credentials.Password, request.PaymentCode);
            }
            catch (Exception e)
            {
                tcs.SetException(e);
            }

            return(tcs.Task);
        }
        public override PaymentProviderReversalPaymentResponse ReversalPayment(ReversalRequest request)
        {
            var result = new PaymentProviderReversalPaymentResponse(Now);

            result.ProviderType = this.ProviderType;

            var eservice = new ir.shaparak.sep.PaymentIFBinding();
            var r        = eservice.reverseTransaction(request.PaymentCode, Config.Credentials.Pin, Config.Credentials.Username, Config.Credentials.Password);

            result.Status    = 0;
            result.Succeeded = (r == 1);

            return(result);
        }
        public override PaymentProviderReversalPaymentResponse ReversalPayment(ReversalRequest request)
        {
            var result = new PaymentProviderReversalPaymentResponse(Now);

            result.ProviderType = this.ProviderType;

            int orderid;

            if (!int.TryParse(request.PaymentCode, out orderid))
            {
                var  pec       = new ir.shaparak.pec.EShopService();
                byte pecStatus = 0;

                pec.PinReversal(Config.Credentials.Pin, orderid, orderid, ref pecStatus);

                result.Status    = pecStatus;
                result.Succeeded = (pecStatus == 0);
            }

            return(result);
        }
        public override Task <PaymentProviderReversalPaymentResponse> ReversalPaymentAsync(ReversalRequest request, CancellationToken cancellation)
        {
            var tcs = new TaskCompletionSource <PaymentProviderReversalPaymentResponse>();

            try
            {
                var pec = new ir.shaparak.pec.EShopService();

                pec.PinReversalCompleted += new PinReversalCompletedEventHandler((sender, args) =>
                {
                    if (args.Error != null)
                    {
                        tcs.TrySetException(args.Error);
                    }
                    else
                    if (!args.Cancelled)
                    {
                        try
                        {
                            var result = new PaymentProviderReversalPaymentResponse(Now);

                            result.Status       = args.status;
                            result.Succeeded    = (args.status == 0);
                            result.ProviderType = this.ProviderType;

                            tcs.SetResult(result);
                        }
                        catch (Exception ex)
                        {
                            tcs.TrySetException(ex);
                        }
                    }
                    else
                    {
                        tcs.SetCanceled();
                    }

                    pec.Dispose();
                });

                byte pecStatus = 0;
                int  orderid   = 0;

                if (!int.TryParse(request.PaymentCode, out orderid))
                {
                    var result = new PaymentProviderReversalPaymentResponse();

                    result.Status = (int)AyandehBankTranStatus.InvalidReversalOrder;

                    tcs.SetResult(result);
                }
                else
                {
                    cancellation.Register(() => pec.CancelAsync(request.PaymentCode));

                    pec.PinReversalAsync(Config.Credentials.Pin, orderid, orderid, pecStatus, request.PaymentCode);
                }
            }
            catch (Exception e)
            {
                tcs.SetException(e);
            }

            return(tcs.Task);
        }
Example #5
0
        private async Task <PaymentManagerReversalPaymentResponse> SaveReversalPaymentAsync(ReversalRequest request, PaymentProviderReversalPaymentResponse providerResponse, CancellationToken cancellation)
        {
            var result = new PaymentManagerReversalPaymentResponse();

            result.Request = request;

            var dbOk = false;

            Logger.LogCategory("SaveReversalPaymentAsync");

            if (providerResponse.Succeeded || !Config.SaveOnlySuccessfulOperations)
            {
                Logger.Log("Start saving in the database");

                var args = new
                {
                    Result        = CommandParameter.Output(SqlDbType.VarChar, 50),
                    PaymentCode   = request.PaymentCode,
                    BankType      = providerResponse.ProviderType,
                    StepStatus    = SafeClrConvert.ToString(providerResponse.Status),
                    StepDate      = providerResponse.Date,
                    StepSucceeded = providerResponse.Succeeded,
                    @StepData     = ""
                };
                var cmd = _db.GetCommand("usp1_Payment_save_reversal_step");

                result.DbResult = await _db.ExecuteNonQueryAsync(cmd, args, cancellation);

                if (result.DbResult.Success)
                {
                    result.Status = args.Result.Value.ToString();

                    Logger.Log("DbStatus = " + result.Status);

                    dbOk = result.Status == "Success";

                    if (!dbOk)
                    {
                        result.Status = "SaveError";
                    }
                }
                else
                {
                    Logger.Log("Failed: " + result.DbResult.Exception.ToString(","));

                    result.Failed(result.DbResult.Exception);
                }
            }
            else
            {
                dbOk = true;
            }

            if (providerResponse.Succeeded && dbOk)
            {
                result.Succeeded();
            }

            return(result);
        }