【发布时间】:2021-01-22 19:43:07
【问题描述】:
我工作的公司有一个旧版 WinForms 应用程序,销售和客户服务部门使用它来帮助客户创建订单,而不是客户在网站上创建订单。我们想将我们的 CC 支付网关转换为 Braintree,但我不知道如何创建一个 Payment Nonce,以便我可以使用 CC 信息创建一种支付方式。有没有人成功地将 Braintree SDK 集成到 WinForms 项目中?
我尝试创建交易请求,但没有 PaymentNonce。我只使用了使用该客户的默认付款方式的客户 ID。如果
- 有客户
- 有默认付款方式
但是,如果我想为不存在的客户创建交易,或者客户没有用户提供的信用卡的付款方式,那我就难住了。我不知道如何提供 CC 信息以及在什么对象中传递卡数据(编号、到期日期、CVV),Braintree.CreditCard 对象由于其保护级别而无法访问,所以这不是如何传递它. ????♂️
以下是我尝试传递信用卡信息的交易:
transaction = new TransactionRequest()
{
Amount = paymentData.Amount,
CustomerId = customerId,
DiscountAmount = paymentData.CouponDiscount + paymentData.DiscAmount,
ShippingAmount = paymentData.ShipCharge,
LineItems = lineItems.ToArray(),
TaxAmount = paymentData.Taxes,
TaxExempt = paymentData.Taxes == 0 ? true : false,
BillingAddress = new AddressRequest()
{
Company = address.Company,
FirstName = paymentData.FirstName,
LastName = paymentData.LastName,
Locality = address.City,
Region = address.State,
PostalCode = address.Zip,
StreetAddress = address.Address1,
ExtendedAddress = address.Address2,
CountryCodeAlpha2 = address.CountryCode
},
Options = new TransactionOptionsRequest()
{
SubmitForSettlement = paymentData.TransType == "A" ? false : true
},
Braintree.CreditCard = new Braintree.CreditCard()
{
CardholderName = paymentData.AccountName,
Cvv = paymentData.CVV,
ExpirationMonth = paymentData.ExpMonth,
ExpirationYear = paymentData.ExpYear,
UniqueNumberIdentifier = paymentData.AccountNumber
},
};
var customFields = new Dictionary<string, string>();
customFields.Add("cartid", paymentData.IsCart ? paymentData.Id.ToString() : "0");
customFields.Add("orderid", paymentData.IsCart ? "0" : paymentData.Id.ToString());
customFields.Add("userid", paymentData.CustId);
transaction.CustomFields = customFields;
Result<Braintree.Transaction> result = GetGateway().Transaction.Sale(transaction);
【问题讨论】: