【发布时间】:2021-10-25 20:29:41
【问题描述】:
我在尝试用更新的总数修补 PayPal 订单时遇到了麻烦。我正在使用他们在 GitHub 上提供的 PayPal Checkout-NET-SDK,但他们为 Patch Order Sample 提供的示例文档有点过于简单: https://github.com/paypal/Checkout-NET-SDK/blob/develop/Samples/PatchOrderSample.cs
我正在尝试更新以下路径: /purchase_units/@reference_id=='default'/amount"
我尝试过将值设置为:
- 表示 AmountWithBreakdown 对象的 JSON 字符串
- AmountWithBreakdown 对象
当调用 API 并分配一个 AmountWithBreakdown 对象作为值时,我遇到了一个 .NET 异常:
不应使用数据合同名称“AmountWithBreakdown:http://schemas.datacontract.org/2004/07/PayPalCheckoutSdk.Orders'”键入“PayPalCheckoutSdk.Orders.AmountWithBreakdown”。如果您正在使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。
构建 PATCH 请求的示例函数:
Private Function BuildPatchRequest() As List(Of Patch(Of Object))
Dim patches = New List(Of Patch(Of Object)) From {
New Patch(Of Object) With {
.Op = "replace",
.Path = "/intent",
.Value = "CAPTURE"
},
New Patch(Of Object) With {
.Op = "replace",
.Path = "/purchase_units/@reference_id=='default'/amount",
.Value = New AmountWithBreakdown With {
.CurrencyCode = Me.Order.CurrencyCode,
.Value = Me.Order.Total.ToString("N2"),
.AmountBreakdown = New AmountBreakdown With {
.ItemTotal = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = Me.Order.SubTotal.ToString("N2")},
.TaxTotal = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = Me.Order.TaxTotal.ToString("N2")},
.Shipping = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = Me.Order.ShippingTotal.ToString("N2")},
.Discount = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = Me.Order.DiscountTotal.ToString("N2")},
.Handling = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = Me.Order.HandlingFeeTotal.ToString("N2")},
.Insurance = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = "0.00"},
.ShippingDiscount = New PayPalCheckoutSdk.Orders.Money With {.CurrencyCode = Me.Order.CurrencyCode, .Value = "0.00"}
}
}
}
}
Return patches
End Function
尽管输出通过了 JSON 验证工具,但所有将 JSON 手动构造为字符串并将其分配给值的尝试都会遇到通用 INVALID_PARAMETER_SYNTAX 错误响应。
有没有人使用此 SDK 通过 PayPal 成功更新此数据点?我的实现是在 VB 中,但我已经掌握了使用 C# 中的 SDK 实现所有其他功能的要点。
【问题讨论】:
-
“尽管输出通过了 JSON 验证工具,但手动将 JSON 构造为字符串并将其分配给值的所有尝试都会遇到通用的 INVALID_PARAMETER_SYNTAX 错误响应。”记录这些尝试的原始请求+响应正文,以便我们查看它们的问题所在。
-
Preston PHX,我尝试修补您原始评论中的各个点,但在回复中遇到了 UNPATCHABLE 评论。我需要下载完整的项目源代码并与我的项目集成,以便捕获原始请求——我现在只是使用 SDK 中提供的类取回一个对象。
-
所以我查看了 PayPalHttp-DotNet 依赖项的底层,它实现了正在构建的 HttpRequest 对象的 Execute 方法,看起来它正在序列化对象——所以我假设 JSON我传递的字符串只是被解析为常规字符串,作为补丁请求对象中的值参数。参考:github.com/paypal/paypalhttp_dotnet/blob/master/…
-
这是有道理的,但我们需要查看您的最佳测试的完整请求和响应,以便就可能出现的问题提出建议
标签: paypal sdk patch checkout orders