public override Task <PaymentProviderBeginPaymentResponse> BeginPaymentAsync(BeginPaymentRequest request, System.Threading.CancellationToken cancellation)
        {
            var tcs = new TaskCompletionSource <PaymentProviderBeginPaymentResponse>();

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

                pec.PinPaymentRequestCompleted += new PinPaymentRequestCompletedEventHandler((sender, args) =>
                {
                    if (args.Error != null)
                    {
                        tcs.TrySetException(args.Error);
                    }
                    else
                    if (!args.Cancelled)
                    {
                        try
                        {
                            var result = new PaymentProviderBeginPaymentResponse <AyandehBankTranStatus>(Now);

                            result.ProviderType = this.ProviderType;
                            result.Code         = args.authority;
                            result.SendData.Add(BankCodeArgName, args.authority.ToString());
                            result.Status     = args.status;
                            result.Succeeded  = (args.status == 0 && args.authority != -1);
                            result.GatewayUrl = Config.GatewayUrl + $"?{BankCodeArgName}={args.authority}";
                            result.SendMethod = Config.GatewayMethod;

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

                    pec.Dispose();
                });

                var  orderid   = SafeClrConvert.ToInt32(request.PaymentCode);
                var  pay       = SafeClrConvert.ToInt32(request.Amount);
                byte pecStatus = 0;
                long auth      = 0;

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

                pec.PinPaymentRequestAsync(Config.Credentials.Pin, pay, orderid, (string.IsNullOrEmpty(request.ReturnUrl) ? Config.CallbackUrl : request.ReturnUrl), auth, pecStatus, request.PaymentCode);
            }
            catch (Exception e)
            {
                tcs.SetException(e);
            }

            return(tcs.Task);
        }
Esempio n. 2
0
        public override Task <PaymentProviderBeginPaymentResponse> BeginPaymentAsync(BeginPaymentRequest request, System.Threading.CancellationToken cancellation)
        {
            var tcs = new TaskCompletionSource <PaymentProviderBeginPaymentResponse>();

            try
            {
                var service = new com.zarinpal.www.PaymentGatewayImplementationService();

                service.PaymentRequestCompleted += new PaymentRequestCompletedEventHandler((object sender, PaymentRequestCompletedEventArgs args) =>
                {
                    if (args.Error != null)
                    {
                        tcs.TrySetException(args.Error);
                    }
                    else
                    if (!args.Cancelled)
                    {
                        try
                        {
                            var result          = new PaymentProviderBeginPaymentResponse <ZarinPalBankTranStatus>(Now);
                            result.ProviderType = this.ProviderType;
                            result.Code         = SafeClrConvert.ToLong(args.Authority);
                            result.Status       = args.Result;
                            result.Succeeded    = (args.Result == 100);
                            result.GatewayUrl   = Config.GatewayUrl + $"/{result.Code}";
                            result.SendMethod   = Config.GatewayMethod;
                            result.StrongStatus = args.Result.ToEnum <ZarinPalBankTranStatus>();

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

                    service.Dispose();
                });

                var amount = SafeClrConvert.ToInt32(request.Amount);

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

                service.PaymentRequestAsync(Config.Credentials.MerchantId, amount, request.Info, "", "", (string.IsNullOrEmpty(request.ReturnUrl) ? Config.CallbackUrl : request.ReturnUrl));
            }
            catch (Exception e)
            {
                tcs.SetException(e);
            }

            return(tcs.Task);
        }
        public override PaymentProviderBeginPaymentResponse BeginPayment(BeginPaymentRequest request)
        {
            var result = new PaymentProviderBeginPaymentResponse <SamanBankTranStatus>(Now);

            result.ProviderType = this.ProviderType;
            result.Code         = 0; // auth;
            //result.SendData.Add("sam", "lcc");
            result.SendData.Add("Amount", request.Amount.ToString());
            result.SendData.Add("MID", Config.Credentials.Pin);
            result.SendData.Add("ResNum", request.PaymentCode);
            result.SendData.Add("RedirectURL", string.IsNullOrEmpty(request.ReturnUrl)? Config.CallbackUrl: request.ReturnUrl);
            result.Status     = 0;
            result.Succeeded  = true;
            result.GatewayUrl = Config.GatewayUrl;
            result.SendMethod = Config.GatewayMethod;

            return(result);
        }
Esempio n. 4
0
        public override PaymentProviderBeginPaymentResponse BeginPayment(BeginPaymentRequest request)
        {
            var result = new PaymentProviderBeginPaymentResponse <ZarinPalBankTranStatus>(Now);

            result.ProviderType = this.ProviderType;

            var    service = new com.zarinpal.www.PaymentGatewayImplementationService();
            var    amount  = SafeClrConvert.ToInt32(request.Amount);
            string auth    = "";

            var status = service.PaymentRequest(Config.Credentials.MerchantId, amount, request.Info, "", "", (string.IsNullOrEmpty(request.ReturnUrl) ? Config.CallbackUrl : request.ReturnUrl), out auth);

            result.Code         = SafeClrConvert.ToLong(auth);
            result.Status       = status;
            result.Succeeded    = status == 100;
            result.GatewayUrl   = Config.GatewayUrl + $"/{result.Code}";
            result.SendMethod   = Config.GatewayMethod;
            result.StrongStatus = ((int)status).ToEnum <ZarinPalBankTranStatus>();

            return(result);
        }
        public override PaymentProviderBeginPaymentResponse BeginPayment(BeginPaymentRequest request)
        {
            var result = new PaymentProviderBeginPaymentResponse <AyandehBankTranStatus>(Now);

            result.ProviderType = this.ProviderType;

            var  pec       = new ir.shaparak.pec.EShopService();
            var  orderid   = SafeClrConvert.ToInt32(request.PaymentCode);
            var  pay       = SafeClrConvert.ToInt32(request.Amount);
            byte pecStatus = 0;
            long auth      = 0;

            pec.PinPaymentRequest(Config.Credentials.Pin, pay, orderid, (string.IsNullOrEmpty(request.ReturnUrl) ? Config.CallbackUrl : request.ReturnUrl), ref auth, ref pecStatus);

            result.Code = auth;
            result.SendData.Add(BankCodeArgName, auth.ToString());
            result.Status     = pecStatus;
            result.Succeeded  = (pecStatus == 0 && auth != -1);
            result.GatewayUrl = Config.GatewayUrl + $"?{BankCodeArgName}={auth}";
            result.SendMethod = Config.GatewayMethod;

            return(result);
        }
Esempio n. 6
0
        private PaymentManagerBeginPaymentResponse SaveBeginPayment(BeginPaymentRequest request, PaymentProviderBeginPaymentResponse providerResponse)
        {
            var result = new PaymentManagerBeginPaymentResponse();

            result.Request          = request;
            result.ProviderResponse = providerResponse;

            var dbOk = false;

            Logger.LogCategory("SaveBeginPayment");

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

                var args = new
                {
                    Result        = CommandParameter.Output(SqlDbType.VarChar, 50),
                    PaymentId     = CommandParameter.Output(SqlDbType.Int),
                    PaymentCode   = request.PaymentCode,
                    BankType      = request.BankType,
                    Amount        = request.Amount,
                    Info          = request.Info,
                    Data          = request.Data,
                    StepCode      = SafeClrConvert.ToString(providerResponse.Code),
                    StepStatus    = SafeClrConvert.ToString(providerResponse.Status),
                    StepDate      = providerResponse.Date,
                    StepSucceeded = providerResponse.Succeeded,
                    @StepData     = ""
                };
                var cmd = _db.GetCommand("usp1_Payment_save_begin_step");

                result.DbResult = _db.ExecuteNonQuery(cmd, args);

                if (result.DbResult.Success)
                {
                    Logger.Log("DbStatus = " + result.Status);

                    dbOk = result.Status == "Success";

                    if (dbOk)
                    {
                        result.Status = args.Result.Value.ToString();
                        result.Data   = result.DbResult.Data = (int)args.PaymentId.Value;
                    }
                    else
                    {
                        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);
        }