private async Task<CreatePaymentResponse> CreatePayment(UpdateOrderValidationResult result)
 {
     var token = await _paypalOauthClient.GetAccessToken(_settingsProvider.GetPaypalClientId(), _settingsProvider.GetPaypalClientSecret(),
         new PaypalOauthClientOptions
         {
             ApplicationMode = PaypalApplicationModes.sandbox
         });
     var items = result.Order.OrderLines.Select(o =>
     {
         var product = result.Products.First(p => p.Id == o.ProductId);
         return new PaypalItem
         {
             Name = product.Name,
             Description = product.Description,
             Currency = Constants.Currency,
             Quantity = o.Quantity,
             Price = product.Price
         };
     });
     return await _paypalClient.CreatePayment(new CreatePaymentParameter
     {
         AccessToken = token.AccessToken,
         Intent = IntentPayments.authorize,
         Payer = new PaypalPayer
         {
             PaymentMethod = PaypalPaymentMethods.Paypal,
             Email = result.PayerPaypalEmail
         },
         Transactions = new[]
         {
             new PaymentTransaction
             {
                Currency = Constants.Currency,
                Total = result.ShippingPrice + items.Sum(i => i.Price * i.Quantity),
                Shipping = result.ShippingPrice,
                SubTotal = items.Sum(i => i.Price * i.Quantity),
                Items = items,
                Payee = new PaypalPayee
                {
                    Email = result.SellerPaypalEmail
                }
             }
         },
         CancelUrl = $"{_settingsProvider.GetBaseWebsite()}/cancelpayment",
         ReturnUrl = $"{_settingsProvider.GetBaseWebsite()}/acceptpayment"
     });
 }
Ejemplo n.º 2
0
        public async Task <IActionResult> Execute(string id, string subject, JObject jObj)
        {
            if (jObj == null)
            {
                throw new ArgumentNullException(nameof(jObj));
            }

            var command = _requestBuilder.GetPurchaseOrderLabelCommand(jObj);

            command.OrderId = id;
            var validationResult = await _validator.Validate(subject, command);

            if (!validationResult.IsValid)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, validationResult.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var token = await _paypalOauthClient.GetAccessToken(_settingsProvider.GetPaypalClientId(), _settingsProvider.GetPaypalClientSecret(),
                                                                new PaypalOauthClientOptions
            {
                ApplicationMode = PaypalApplicationModes.sandbox
            });

            var payment = await _paypalClient.CreatePayment(new CreatePaymentParameter
            {
                AccessToken = token.AccessToken,
                Intent      = IntentPayments.sale,
                Payer       = new PaypalPayer
                {
                    PaymentMethod = PaypalPaymentMethods.Paypal,
                    Email         = validationResult.PayerPaypalEmail
                },
                Transactions = new[]
                {
                    new PaymentTransaction
                    {
                        Currency = Constants.Currency,
                        Total    = validationResult.ShippingPrice,
                        Shipping = validationResult.ShippingPrice,
                        Payee    = new PaypalPayee
                        {
                            Email = _settingsProvider.GetPaypalEmail()
                        }
                    }
                },
                CancelUrl = $"{_settingsProvider.GetBaseWebsite()}/cancelpurchaselabel",
                ReturnUrl = $"{_settingsProvider.GetBaseWebsite()}/acceptpurchaselabel"
            });

            if (!payment.IsValid)
            {
                var error = _responseBuilder.GetError(ErrorCodes.Request, payment.ErrorResponse.Message);
                return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error));
            }

            var approvalUrl = payment.Links.FirstOrDefault(l => l.Rel == "approval_url").Href;

            command.TrackingNumber = validationResult.TrackingNumber;
            command.ShippingPrice  = validationResult.ShippingPrice;
            command.ShipmentDigest = validationResult.ShipmentDigest;
            var order = validationResult.Order;

            order.ShippingPrice      = command.ShippingPrice;
            order.ShipmentDigest     = command.ShipmentDigest;
            order.OrderParcel.Height = command.ParcelSize.Height;
            order.OrderParcel.Length = command.ParcelSize.Length;
            order.OrderParcel.Weight = command.ParcelSize.Weight;
            order.OrderParcel.Width  = command.ParcelSize.Width;
            await _orderRepository.Update(order);

            var res = new JObject();

            res.Add("approval_url", approvalUrl);
            res.Add("shipping_price", command.ShippingPrice);
            return(new OkObjectResult(res));
        }