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