0

Paypal の API と通信して支払いを受ける、ローカルでホストされている WCF サービスがあります。

これは私のサービス契約です。

    [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 は 10 進数 (値は 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では、値 (10 進数) が同じ場合に、なぜ呼び出しが機能し、他の呼び出しが機能しないのでしょうか?

4

1 に答える 1

1

値は次のようにサービスに渡されていました。

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

Paypal コードへの簡単な変更でそれが修正されました。

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

問題を見つけることができた Fiddler の提案については、Mike Parkhill に感謝します。

于 2012-11-09T00:33:41.807 に答える