0

我有一个本地托管的 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在值(十进制)相同时调用使用工作而其他调用不工作?

4

1 回答 1

1

该值被传递给服务:

<a:Amount>12.0000</a:Amount>

对 Paypal 代码的简单更改修复了该问题;

 Value = payment.Amount.ToString("n2")

感谢 Mike Parkhill 提出的 Fiddler 的建议,它让我找到了问题所在。

于 2012-11-09T00:33:41.807 回答