Ошибка при оформлении заказа PayPal с интеграцией с сервером: «Ожидалось, что будет передан идентификатор заказа»

#paypal #asp.net-core-mvc

Вопрос:

Я следил за интеграционными документами paypal https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/

Проблема: я получил эту ошибку «Неперехваченная ошибка: Ожидалось, что идентификатор заказа будет передан по адресу https://www.sandbox.paypal.com/smart/buttons?style.компоновка=вертикальная»

Мой Код

 public class CreateOrderSample
{
    public async static Task<HttpResponse> CreateOrder(bool debug = true)
    {
        var request = new OrdersCreateRequest();
        request.Prefer("return=representation");
        request.RequestBody(BuildRequestBody());
        //3. Call PayPal to set up a transaction
        var response = await PayPalClient.client().Execute(request);
        return response;
    }

    private static OrderRequest BuildRequestBody()
    {
        OrderRequest orderRequest = new OrderRequest()
        {
            CheckoutPaymentIntent = "CAPTURE",

            ApplicationContext = new ApplicationContext
            {
                BrandName = "EXAMPLE INC",
                LandingPage = "BILLING",
                UserAction = "CONTINUE",
                ShippingPreference = "SET_PROVIDED_ADDRESS"
            },
            PurchaseUnits = new List<PurchaseUnitRequest>
    {
      new PurchaseUnitRequest{
        ReferenceId =  "PUHF",
        Description = "Sporting Goods",
        CustomId = "CUST-HighFashions",
        SoftDescriptor = "HighFashions",
        AmountWithBreakdown = new AmountWithBreakdown
        {
          CurrencyCode = "USD",
          Value = "230.00",
          AmountBreakdown = new AmountBreakdown
          {
            ItemTotal = new Money
            {
              CurrencyCode = "USD",
              Value = "180.00"
            },
            Shipping = new Money
            {
              CurrencyCode = "USD",
              Value = "30.00"
            },
            Handling = new Money
            {
              CurrencyCode = "USD",
              Value = "10.00"
            },
            TaxTotal = new Money
            {
              CurrencyCode = "USD",
              Value = "20.00"
            },
            ShippingDiscount = new Money
            {
              CurrencyCode = "USD",
              Value = "10.00"
            }
          }
        },
        Items = new List<Item>
        {
          new Item
          {
            Name = "T-shirt",
            Description = "Green XL",
            Sku = "sku01",
            UnitAmount = new Money
            {
              CurrencyCode = "USD",
              Value = "90.00"
            },
            Tax = new Money
            {
              CurrencyCode = "USD",
              Value = "10.00"
            },
            Quantity = "1",
            Category = "PHYSICAL_GOODS"
          },
          new Item
          {
            Name = "Shoes",
            Description = "Running, Size 10.5",
            Sku = "sku02",
            UnitAmount = new Money
            {
              CurrencyCode = "USD",
              Value = "45.00"
            },
            Tax = new Money
            {
              CurrencyCode = "USD",
              Value = "5.00"
            },
            Quantity = "2",
            Category = "PHYSICAL_GOODS"
          }
        },
        ShippingDetail = new ShippingDetail
        {
          Name = new Name
          {
            FullName = "John Doe"
          },
          AddressPortable = new AddressPortable
          {
            AddressLine1 = "123 Townsend St",
            AddressLine2 = "Floor 6",
            AdminArea2 = "San Francisco",
            AdminArea1 = "CA",
            PostalCode = "94107",
            CountryCode = "US"
          }
        }
      }
    }
        };

        return orderRequest;
    }
}

public class PayPalClient
{
    public static PayPalEnvironment environment()
    {
        return new SandboxEnvironment("PAYPAL-SANDBOX-CLIENT-ID", "PAYPAL-SANDBOX-CLIENT-SECRET");
    }

    public static HttpClient client()
    {
        return new PayPalHttpClient(environment());
    }

    public static HttpClient client(string refreshToken)
    {
        return new PayPalHttpClient(environment(), refreshToken);
    }

    public static String ObjectToJSONString(Object serializableObject)
    {
        MemoryStream memoryStream = new MemoryStream();
        var writer = JsonReaderWriterFactory.CreateJsonWriter(
                    memoryStream, Encoding.UTF8, true, true, "  ");
        DataContractJsonSerializer ser = new DataContractJsonSerializer(serializableObject.GetType(), new DataContractJsonSerializerSettings { UseSimpleDictionaryFormat = true });
        ser.WriteObject(writer, serializableObject);
        memoryStream.Position = 0;
        StreamReader sr = new StreamReader(memoryStream);
        return sr.ReadToEnd();
    }
}
 

Контроллер:

 public class PayPalController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public async Task<Order> CreatePayaplTransaction()
    {
        var data = await CreateOrderSample.CreateOrder();
        return data.Result<Order>();
    }
}
 

Вид



 PayPal.Кнопки({
CreateOrder: функция () {
возврат выборки('/PayPal/CreatePayaplTransaction', {
метод: 'post',
заголовки: {
 "тип содержимого": "приложение/json"
 }
 }).затем(функция (res) {
возвращает res.json();
 }).затем(функция (данные) {
console.log(data.Id);
 возвращение data.Id; // Используйте ключ, отправленный в ответе вашего сервера, например "идентификатор" или "токен".
 });
 }
 }).визуализация('#paypal-кнопка-контейнер');

Комментарии:

1. Эта ошибка возникает, когда запрос на /PayPal/CreatePayaplTransaction не возвращает идентификатор, который можно прочитать. Что он на самом деле возвращает в своем ответе? Используйте сетевую вкладку инструментов разработчика вашего браузера для отладки и тестирования. Убедитесь, что ваш код получает и возвращает идентификатор.