【问题标题】:PayPal Checkout v2 SDK .NET problem with PayPalHttp.HttpResponsePayPal Http.HttpResponse 的 PayPal Checkout v2 SDK .NET 问题
【发布时间】:2023-04-04 12:40:01
【问题描述】:

我在交易设置流程的最后一部分遇到了问题: 客户端正确调用我的后端,该后端调用 PayPal 来创建订单并收到状态码为 200 的响应。

http响应返回给客户端时出现错误,这里我们意识到paypal类创建的json不完整!没有使 json 无效的右括号。 "} ] }"

我向贝宝团队寻求帮助,但它没有帮助我。他们继续解决这个问题,说蜜蜂总是将完整的 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(网络表单)中

【问题讨论】:

    标签: javascript vb.net paypal-sandbox fetch-api paypal-rest-sdk


    【解决方案1】:

    昏暗响应 = 等待 PayPalClient.client().Execute(request)

    这里的response 是什么?

    您能否在PayPalClient.client().Execute(request) 中进一步调试该值

    PayPal 通过网络发送 JSON。因此,您似乎正在接收 JSON,它被转换为一个对象,然后您正在对该对象调用一个返回 JSON 的函数。

    我不确定为什么在你调用它的那一刻,那个特定的函数会给出错误的 JSON,但我知道来自 PayPal 的原始 JSON 可能是完整的。

    【讨论】:

    • 回复是PayPalHttp.HttpResponse,这些都是paypal dll提供的类。
    • PayPalClient.ObjectToJSONString (result) 方法仅用于检查这些类在做什么。 Paypal 似乎不想让我相信他们的 .NET 类有问题。
    • 他们的 .NET 类可能有问题,但作为 JSON 接收的数据应该没问题,类内部的数据也可能没问题。当您将类从对象 back 转换为 JSON 时,您在流程中投入了太多的扳手
    • 所以我的建议是,回溯一点。将类的内容作为数据结构检查(不将其转换为 JSON),最好检查通过网络从 PayPal 在 HTTP 请求中接收到的 JSON。它应该都是有效和完整的。
    • 技术支持部门给我看了他们发送的json是完整的,然后说因为他们帮不了我,所以在stackoverflow上寻找答案,最后他们给我链接了这个:github.com/paypal/Checkout-NET-SDK/tree/develop/…。您在几行中更了解您,而不是在 5-6 封电子邮件中的 Paypal。
    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 2021-02-19
    • 2022-01-17
    • 2011-09-16
    • 2021-04-02
    • 2015-04-10
    • 2020-10-24
    • 2023-03-31
    相关资源
    最近更新 更多