PayPal Checkout v2 SDK. NET проблема с PayPalHttp.HttpResponse - PullRequest
1 голос
/ 27 марта 2020

У меня проблема в последней части процесса настройки транзакции: клиентская сторона правильно вызывает мой бэкэнд, который вызывает PayPal для создания заказа и получает ответ с кодом состояния 200.

Ошибка возникает при возврате ответа http клиенту, здесь мы понимаем, что json, созданный классом PayPal, является неполным! Не существует закрывающих скобок, которые лишают законной силы json. "}]}"

Я попросил команду PayPal о помощи, но она не помогает мне. Они продолжают go вокруг проблемы, говоря, что пчелы всегда возвращают мне полный json, но я тоже это знаю, потому что в режиме отладки результат дает мне ссылку, которая правильно отправляет меня обратно на платеж PayPal.

Это позволяет мне понять, что на самом деле созданный мной поток завершен, но класс PayPalHttp.HttpResponse создает неправильное тело.

Я прилагаю код.

Public Shared Async Function CreateOrder(ByVal Optional debug As Boolean = False) As Task(Of PayPalHttp.HttpResponse)

    Dim result As New Order
    Dim request = New OrdersCreateRequest()

    request.Prefer("return=representation")
    Dim newRequest As New OrderActionRequest
    request.RequestBody(BuildRequestBody(dicNameValue))


    Dim response = Await PayPalClient.client().Execute(request)

    If debug Then
    result = response.Result(Of Order)()
    Console.WriteLine("Status: {0}", result.Status)
    Console.WriteLine("Order Id: {0}", result.Id)
    Console.WriteLine("Links:")

    For Each link As LinkDescription In result.Links
    Console.WriteLine(vbTab & "{0}: {1}" & vbTab & "Call Type: {2}", link.Rel, link.Href, link.Method)
    Next

     /*--- HERE THE PROBLEM ----*/
    Dim json As String = PayPalClient.ObjectToJSONString(result)
    Console.WriteLine("Response JSON: {0}", json)
    /*----------*/

    Dim amount As AmountWithBreakdown = result.PurchaseUnits(0).AmountWithBreakdown
    Console.WriteLine("Total Amount: {0} {1}", amount.CurrencyCode, amount.Value)

    End If

    Return response
  End Function

Это неполное json:

{
  "create_time": "2020-03-18T14:28:56Z",
  "id": "2LW612087K897524T",
  "intent": "CAPTURE",
  "links": [
    {
      "href": "https:\/\/api.sandbox.paypal.com\/v2\/checkout\/orders\/2LW612087K897524T",
      "method": "GET",
      "rel": "self"
    },
    {
      "href": "https:\/\/www.sandbox.paypal.com\/checkoutnow?token=2LW612087K897524T",
      "method": "GET",
      "rel": "approve"
    },
    {
      "href": "https:\/\/api.sandbox.paypal.com\/v2\/checkout\/orders\/2LW612087K897524T",
      "method": "PATCH",
      "rel": "update"
    },
    {
      "href": "https:\/\/api.sandbox.paypal.com\/v2\/checkout\/orders\/2LW612087K897524T\/capture",
      "method": "POST",
      "rel": "capture"
    }
  ],
  "purchase_units": [
    {
      "amount": {
        "breakdown": {
          "handling": {
            "currency_code": "USD",
            "value": "10.00"
          },
          "item_total": {
            "currency_code": "USD",
            "value": "180.00"
          },
          "shipping": {
            "currency_code": "USD",
            "value": "30.00"
          },
          "shipping_discount": {
            "currency_code": "USD",
            "value": "10.00"
          },
          "tax_total": {
            "currency_code": "USD",
            "value": "20.00"
          }
        },
        "currency_code": "USD",
        "value": "230.00"
      },
      "custom_id": "CUST-HighFashions",
      "description": "Sporting Goods",
      "items": [
        {
          "category": "PHYSICAL_GOODS",
          "description": "Green XL",
          "name": "T-shirt",
          "quantity": "1",
          "sku": "sku01",
          "tax": {
            "currency_code": "USD",
            "value": "10.00"
          },
          "unit_amount": {
            "currency_code": "USD",
            "value": "90.00"
          }
        },
        {
          "category": "PHYSICAL_GOODS",
          "description": "Running, Size 10.5",
          "name": "Shoes",
          "quantity": "2",
          "sku": "sku02",
          "tax": {
            "currency_code": "USD",
            "value": "5.00"
          },
          "unit_amount": {
            "currency_code": "USD",
            "value": "45.00"
          }
        }
      ],
      "payee": {
        "email_address": "sb-bzfcs1123474@business.example.com",
        "merchant_id": "55J4WA53G7WRL"
      },
      "reference_id": "PUHF",
      "shipping": {
        "address": {
          "address_line_1": "123 Townsend St",
          "address_line_2": "Floor 6",
          "admin_area_1": "CA",
          "admin_area_2": "San Francisco",
          "country_code": "US",
          "postal_code": "94107"
        },
        "name": {
          "full_name": "John Doe"
        }
      },

PS: проект находится на VB. NET 4.6.1 (веб-формы)

1 Ответ

0 голосов
/ 27 марта 2020

Тусклый ответ = Await PayPalClient.client (). Выполнить (запрос)

Что такое response здесь?

И вы можете отладить значение далее в в пределах PayPalClient.client().Execute(request)

PayPal отправляет JSON по сети. Таким образом, кажется, вы получаете JSON, который преобразуется в объект, а затем вы вызываете функцию для этого объекта, которая возвращает JSON.

Я не уверен почему эта конкретная функция дает плохой JSON в тот момент, когда вы ее вызываете, но я точно знаю, что оригинальный JSON от PayPal, вероятно, завершен.

...