Ejemplo n.º 1
0
        public async Task <SepidPurchaseResult> PurchaseAsync(SepidPurchaseRequest purchaseRequest)
        {
            string i, terminalId;

            GetTerminalAndInstituteId(purchaseRequest.Barcode, out i, out terminalId);

            var count = _sepidContext.PurchaseRequestEntities.LongCount() + 1;

            SepidPurchaseParam purchaseParam = new SepidPurchaseParam()
            {
                LockFlag             = 0,
                AmountAfterDiscount  = purchaseRequest.Amount,
                AmountBeforeDiscount = purchaseRequest.Amount,
                CampaignID           = 0,
                TerminalID           = int.Parse(terminalId),
                InstituteId          = int.Parse(i),
                PAN             = long.Parse(CreatePAN(purchaseRequest.CustomerUniqueNumber)),
                CustomerId      = purchaseRequest.CustomerId,
                Mobile          = purchaseRequest.Mobile,
                TransactionDate = DateTime.Now,
                BarcodeStan     = null,
                NationalCode    = purchaseRequest.NationalCode,
                ReceiveDate     = purchaseRequest.ReceiveDate,
                WalletId        = null,
                EntityId        = long.Parse(CreateEntityId(count)),
                IpgrRn          = purchaseRequest.IpgrRn,
                Description     = purchaseRequest.Description
            };

            _sepidContext.PurchaseRequestEntities.Add(new PurchaseRequestEntity()
            {
                AmountAfterDiscount  = purchaseParam.AmountAfterDiscount,
                AmountBeforeDiscount = purchaseParam.AmountBeforeDiscount,
                BarcodeStan          = purchaseParam.BarcodeStan,
                CampaignID           = purchaseParam.CampaignID,
                Counter         = count,
                CustomerId      = purchaseParam.CustomerId,
                Description     = purchaseParam.Description,
                EntityId        = purchaseParam.EntityId,
                InstituteId     = purchaseParam.InstituteId,
                IpgrRn          = purchaseParam.IpgrRn,
                LockFlag        = purchaseParam.LockFlag,
                Mobile          = purchaseParam.Mobile,
                NationalCode    = purchaseParam.NationalCode,
                PAN             = purchaseParam.PAN,
                ReceiveDate     = purchaseParam.ReceiveDate,
                TerminalID      = purchaseParam.TerminalID,
                TransactionDate = purchaseParam.TransactionDate,
                WalletId        = purchaseParam.WalletId,
            });

            await _sepidContext.SaveChangesAsync();


            using (var request_ = new HttpRequestMessage())
            {
                var url = $"{tmBaseUrl}/api/V1/Sepid/Purchase";
                request_.RequestUri = new Uri(url, System.UriKind.RelativeOrAbsolute);

                var content_ = new StringContent(JsonConvert.SerializeObject(purchaseParam), Encoding.UTF8, "application/json");
                request_.Content = content_;
                request_.Method  = HttpMethod.Post;


                var response_ = await _sepidHttpClient.SendAsync(request_, default(CancellationToken)).ConfigureAwait(false);

                if (!response_.IsSuccessStatusCode)
                {
                    throw new Exception(response_.ReasonPhrase);
                }

                var apiResponse = await response_.Content.ReadAsStringAsync();


                var result = JsonConvert.DeserializeObject <SepidPurchaseResult>(apiResponse);


                _sepidContext.PurchaseResponseEntities.Add(new PurchaseResponseEntity()
                {
                    CentralMessageCode = result.CentralMessageCode,
                    EnMessageDesc      = result.EnMessageDesc,
                    FaMessageDesc      = result.FaMessageDesc,
                    InnerException     = result.InnerException,
                    Issrrn             = result.Issrrn,
                    MessageCode        = result.MessageCode,
                    Rrn             = result.Rrn,
                    Stan            = result.Stan,
                    Status          = result.Status,
                    SwResult        = result.SwResult,
                    TransactionDate = result.TransactionDate
                });

                await _sepidContext.SaveChangesAsync();

                return(result);
            }
        }
Ejemplo n.º 2
0
 public async Task <ActionResult <SepidPurchaseResult> > Purchase(SepidPurchaseRequest purchaseRequest)
 {
     return(await _sepidService.PurchaseAsync(purchaseRequest));
 }