public async Task <IActionResult> Execute(string id, string subject) { if (string.IsNullOrWhiteSpace(id)) { throw new ArgumentNullException(nameof(id)); } if (string.IsNullOrWhiteSpace(subject)) { throw new ArgumentNullException(nameof(subject)); } var validationResult = await _validator.Validate(id, subject); if (!validationResult.IsValid) { var error = _responseBuilder.GetError(ErrorCodes.Request, validationResult.Message); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } if (!string.IsNullOrWhiteSpace(validationResult.Order.TrackingNumber)) { var cancel = await _upsClient.Cancel(validationResult.Order.TrackingNumber, new UpsCredentials { LicenseNumber = _settingsProvider.GetUpsLicenseNumber(), Password = _settingsProvider.GetUpsPassword(), UserName = _settingsProvider.GetUpsUsername() }); if (cancel.Response.ResponseStatusCode == "0") { var error = _responseBuilder.GetError(ErrorCodes.Request, cancel.Response.Error.ErrorDescription); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } } _commandSender.Send(new CancelOrderCommand { OrderId = id }); return(new OkResult()); }
public async Task <IActionResult> Execute(string orderId, string subject, string commonId, JObject jObj) { if (jObj == null) { throw new ArgumentNullException(nameof(jObj)); } ConfirmOrderLabelPurchaseCommand command = null; try { command = _requestBuilder.GetConfirmOrderLabelPurchase(jObj); } catch (ArgumentException ex) { var error = _responseBuilder.GetError(ErrorCodes.Request, ex.Message); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } command.OrderId = orderId; command.CommonId = commonId; var validationResult = await _validator.Validate(subject, command); // Validate the command. if (!validationResult.IsValid) { var error = _responseBuilder.GetError(ErrorCodes.Request, validationResult.Message); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } if (validationResult.Order.OrderParcel.Transporter != Transporters.Ups) // Only UPS transport mode is supported. { var error = _responseBuilder.GetError(ErrorCodes.Request, ErrorDescriptions.TheUpsIsOnlySupported); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } var acceptUpsShipment = await _upsClient.AcceptShip(new AcceptShipParameter // 1. Accept UPS shipment. { Credentials = new UpsCredentials { LicenseNumber = _settingsProvider.GetUpsLicenseNumber(), Password = _settingsProvider.GetUpsPassword(), UserName = _settingsProvider.GetUpsUsername() }, ShipmentDigest = validationResult.Order.ShipmentDigest }); if (acceptUpsShipment.Response.ResponseStatusCode == "0") { var error = _responseBuilder.GetError(ErrorCodes.Request, acceptUpsShipment.Response.Error.ErrorDescription); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } var order = validationResult.Order; var token = await _paypalOauthClient.GetAccessToken(_settingsProvider.GetPaypalClientId(), _settingsProvider.GetPaypalClientSecret(), new PaypalOauthClientOptions { ApplicationMode = PaypalApplicationModes.sandbox }); if (order.OrderPayment.PaymentMethod == OrderPayments.Paypal) // Update transaction. { var transactionId = order.OrderPayment.TransactionId; var newPrice = new JObject(); var newPriceDetails = new JObject(); newPriceDetails.Add("shipping", order.ShippingPrice); newPriceDetails.Add("subtotal", order.TotalPrice); newPrice.Add("total", order.TotalPrice + order.ShippingPrice); newPrice.Add("currency", "EUR"); newPrice.Add("details", newPriceDetails); var updatePayment = await _paypalClient.UpdatePayment(transactionId, new UpdatePaymentParameter { AccessToken = token.AccessToken, JsonPatches = new[] { new JsonPatch { Operation = JsonPatchOperations.replace, Path = "/transactions/0/amount", Value = newPrice } } }); if (!updatePayment.IsValid) { var error = _responseBuilder.GetError(ErrorCodes.Request, updatePayment.ErrorResponse.Message); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } } var acceptedPayment = await _paypalClient.ExecutePayment(command.TransactionId, new ExecutePaymentParameter // Accept the payment. { AccessToken = token.AccessToken, PayerId = command.PayerId }); if (!acceptedPayment.IsValid) { await _upsClient.Cancel(acceptUpsShipment.ShipmentResults.ShipmentIdentificationNumber, new UpsCredentials { LicenseNumber = _settingsProvider.GetUpsLicenseNumber(), Password = _settingsProvider.GetUpsPassword(), UserName = _settingsProvider.GetUpsUsername() }); var error = _responseBuilder.GetError(ErrorCodes.Request, acceptedPayment.ErrorResponse.Message); return(_controllerHelper.BuildResponse(HttpStatusCode.BadRequest, error)); } command.TrackingNumber = acceptUpsShipment.ShipmentResults.PackageResults.TrackingNumber; _commandSender.Send(command); return(new OkResult()); }