public async Task <PaymentRequestResult> PaymentRequestAsync(PaymentRequestConfig requestConfig)
        {
            var zp = GetService();

            var paymentRequestRequest = GetPaymentRequestRequest(requestConfig);

            var response = await zp.PaymentRequestAsync(paymentRequestRequest);

            await zp.CloseAsync();

            CheckStatus(response);

            var authority = response.Body.Authority;
            var paymentId = await zarinPalPaymentRepository.InsertAsync(requestConfig.Amount, authority);

            var paymentUrl = paymentUrlBase + authority;

            var result = new PaymentRequestResult()
            {
                PaymentId  = paymentId,
                PaymentURL = paymentUrl
            };

            return(result);
        }
        private PaymentRequestRequest GetPaymentRequestRequest(PaymentRequestConfig requestConfig)
        {
            var request = new PaymentRequestRequest()
            {
                Body = new PaymentRequestRequestBody()
                {
                    Amount      = requestConfig.Amount,
                    CallbackURL = callbackURL,
                    Description = requestConfig.Name,
                    Email       = requestConfig.Email,
                    MerchantID  = merchantId,
                    Mobile      = requestConfig.PhoneNumber
                }
            };

            return(request);
        }