Square .NET SDK中CreatePaymentRequest.Builder不识别amountMoney参数问题
问题场景
我正在尝试使用Square .NET SDK(版本32.0.0)实现支付功能,相关代码如下:
var client = new SquareClient.Builder() .Environment(Square.Environment.Sandbox) // 生产环境用.Environment(Square.Environment.Production) .AccessToken(_accessToken) .Build(); var paymentsApi = client.PaymentsApi; var money = new Money.Builder() .Amount((long)(amount * 100)) // Square API 金额单位为分 .Currency("USD") .Build(); var paymentRequest = new CreatePaymentRequest.Builder( sourceId: cardId, idempotencyKey: zero, amountMoney: money) // 错误发生在此处 .LocationId(locationId) .Build();
收到如下编译错误:
Severity Code Description Project File Line Suppression State
Error CS1739 The best overload for 'Builder' does not have a parameter named 'amountMoney' AURA C:\Users\NICHOLASFLEETWOOD\Documents\Code\DOWNLOADS\AURA-master\Factories\SquarePaymentFactory.cs 177 Active
查看CreatePaymentRequest.Builder的定义,它包含amountMoney私有字段以及AmountMoney(Money amountMoney)方法,但构造函数似乎不支持传入amountMoney命名参数,请问哪里操作有误?
解决方法
问题出在Builder模式的用法上——CreatePaymentRequest.Builder的构造函数只接受sourceId和idempotencyKey两个必填参数,amountMoney需要通过链式调用对应的AmountMoney()方法来设置,不能直接作为构造函数的命名参数传入。
修正后的代码:
var paymentRequest = new CreatePaymentRequest.Builder( sourceId: cardId, idempotencyKey: zero) .AmountMoney(money) // 改用链式方法设置金额 .LocationId(locationId) .Build();
这和你创建Money实例时用.Amount()、.Currency()的逻辑完全一致:Square SDK的Builder类中,构造函数仅处理最核心的必填项,其余参数都通过对应的Setter方法(首字母大写的参数名)来配置。
内容的提问来源于stack exchange,提问作者Nick Fleetwood

