C# と PayPal Rest API を使用して、承認された支払いを取得して実行しています。しかし、承認された支払いに関連付けられたトランザクションを更新する必要があります。PayPal のドキュメントには次のように書かれています。
この呼び出しを使用して、支払人によって承認された PayPal 支払いを実行 (完了) します。オプションで、1 つ以上のトランザクションを渡すことで、支払いを実行するときにトランザクション情報を更新できます。
これが私のコードです
//Update the payment details in case totals changed because of a new address/zipcode
Details amountDetails = new Details();
amountDetails.subtotal = ValidationHelper.GetString(prices[Order.CartPricesEnum.Subtotal], "0");
amountDetails.tax = ValidationHelper.GetString(prices[Order.CartPricesEnum.Tax], "0");
amountDetails.shipping = ValidationHelper.GetString(prices[Order.CartPricesEnum.Shipping], "0");
Amount amount = new Amount();
amount.total = ValidationHelper.GetString(prices[Order.CartPricesEnum.Total], "0");
amount.currency = "USD";
amount.details = amountDetails;
//update the transaction to make sure we have accounted for any updated prices
Transactions trn = new Transactions();
trn.amount = amount;
List<Transactions> trns = new List<Transactions>();
trns.Add(trn);
//Create a payment execution object
PaymentExecution paymentExecution = new PaymentExecution();
paymentExecution.payer_id = payPalPayerID;
paymentExecution.transactions = trns;
//Execute (complete) the payment
Payment newPayment = payment.Execute(accessToken, paymentExecution);
問題は、これを実行すると次のエラーが発生することです。
{"name":"VALIDATION_ERROR","details":[{"field":"transactions[0].total","issue":"Required field missing"},{"field":"transactions[0].currency","issue":"Required field missing"},{"field":"transactions[0].amount","issue":"This field name is not defined for this resource type"}],"message":"Invalid request - see details","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR","debug_id":"bcba38f3c56d7"}
これは、.total と .currency がなく、.amount フィールドが定義されていないことを示しています。ただし、合計と通貨を設定していることは明らかであり、PayPal API ドキュメントによると、金額フィールドはトランザクション オブジェクトで設定できる唯一のフィールドです。
transactions
array of transaction objects
Transactional details if updating a payment. Note that this instance of the transactions object accepts only the amount object.
それで、私の質問は次のとおりです。承認された支払いを受け取り、支払いのトランザクションの価格を更新して、その支払いを実行するにはどうすればよいですか?