我有一个本地托管的 WCF 服务,它与 Paypal 的 API 进行通信以进行付款。
这是我的服务合同;
[DataContract]
public class ProcessPaymentRequest
{
[DataMember]
public string CreditCardNumber { get; set; }
[DataMember]
public string Ccv2Number { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public decimal Amount { get; set; }
[DataMember]
public int ExpiryMonth { get; set; }
[DataMember]
public int ExpiryYear { get; set; }
}
我正在使用以下代码调用服务;
var request = new ProcessPaymentRequest
{
Amount = proforma.Total,
CreditCardNumber = billingDetails.Number,
Ccv2Number = billingDetails.Code,
ExpiryMonth = 3,
ExpiryYear = 2014
};
var response = ServiceInvoker.Invoke<IPayments, ProcessPaymentRequest, ProcessPaymentResponse>(
"Payments",
request,
(proxy, req) => proxy.ProcessPayment(req));
if (response == null)
{
}
proforma.Total 是十进制的(值为 12);
public class Proforma
{
public decimal Total { get; set; }
}
在这种情况下,我的响应是 null,这意味着支付失败。Paypal 的潜在错误是 OrderTotal 无效。
这是在 WCF 中设置 OrderTotal 的代码(注意转换);
return new PaymentDetailsType
{
OrderTotal =
new BasicAmountType
{
currencyID = CurrencyCodeType.GBP,
Value = payment.Amount.ToString()
}
};
现在这是奇怪的事情。如果我将请求更改为;
var request = new ProcessPaymentRequest
{
Amount = 12,
CreditCardNumber = billingDetails.Number,
Ccv2Number = billingDetails.Code,
ExpiryMonth = 3,
ExpiryYear = 2014
};
有用!
如果我尝试设置 request.Amount 使用;
decimal totalAmount = proforma.Total;
它失败。
那么为什么request.Amount = 12
在值(十进制)相同时调用使用工作而其他调用不工作?