承認が必要なasp.netプロジェクトにPaypal Express Checkout機能を実装してから、承認された金額を無効にするか取得しています。version=104.0 の API を使用しています。
プロセス全体を理解している限り、すべてを正しく行っています。
Payment Details で ActionType を「Authorize」に設定して SetExpressCheckout メソッドを呼び出します
SetExpressCheckoutRequestDetailsType reqDetails = new SetExpressCheckoutRequestDetailsType(); reqDetails.ReturnURL = "http://some.url"; reqDetails.CancelURL = "http://some.url"; reqDetails.NoShipping = "1"; reqDetails.OrderDescription = "You're about to buy items for " + payment.Amount.ToString("F"); reqDetails.cpplogoimage = "http://some.ulr/image.jpb"; reqDetails.PaymentDetails = new PaymentDetailsType[1]; reqDetails.PaymentDetails[0] = new PaymentDetailsType(); reqDetails.PaymentDetails[0].PaymentDetailsItem = new PaymentDetailsItemType[cart.LineItems.Count]; int i = 0; foreach (LineItemModel li in cart.LineItems) { PaymentDetailsItemType item = new PaymentDetailsItemType(); item.Amount = new BasicAmountType(); item.Amount.Value = li.TotalIncludingShipping.ToString("F"); item.Amount.currencyID = CurrencyCodeType.AUD; item.Name = li.ProductItem.DisplayName; item.Number = li.ProductItem.SKU; item.Quantity = li.Quantity.ToString(); item.Description = ""; reqDetails.PaymentDetails[0].PaymentDetailsItem.SetValue(item, i); i++; } reqDetails.OrderTotal = new BasicAmountType() { currencyID = CurrencyCodeType.AUD, Value = payment.Amount.ToString("F") }; reqDetails.PaymentDetails[0].PaymentAction = PaymentActionCodeType.Authorization; reqDetails.PaymentDetails[0].PaymentActionSpecified = true; SetExpressCheckoutReq req = new SetExpressCheckoutReq() { SetExpressCheckoutRequest = new SetExpressCheckoutRequestType() { Version = "104.0", SetExpressCheckoutRequestDetails = reqDetails } };
- それはうまくいき、ペイパルのバックエンドで、テスト用の個人アカウントの通知で、金額が承認されたというメッセージが表示されます
次に、DoExpressCheckout を呼び出します。リクエストコードはこちら
DoExpressCheckoutPaymentReq payReq = new DoExpressCheckoutPaymentReq() { DoExpressCheckoutPaymentRequest = new DoExpressCheckoutPaymentRequestType() { Version = ConfigurationManager.AppSettings["PaypalAPIVersion"], DoExpressCheckoutPaymentRequestDetails = new DoExpressCheckoutPaymentRequestDetailsType() { Token = token, PayerID = payerID, PaymentDetails = new PaymentDetailsType[1] } } }; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentAction = PaymentActionCodeType.Authorization; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentActionSpecified = true; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0] = new PaymentDetailsType(); payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0].PaymentAction = PaymentActionCodeType.Authorization; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0].PaymentActionSpecified = true; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0].OrderTotal = new BasicAmountType(); payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0].OrderTotal.currencyID = CurrencyCodeType.AUD; payReq.DoExpressCheckoutPaymentRequest.DoExpressCheckoutPaymentRequestDetails.PaymentDetails[0].OrderTotal.Value = total.ToString("F");
このリクエストも「成功」を返します。将来の使用のために応答の DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0].TransactionID を保存します
しかし、前の応答からのトランザクション ID を使用して DoAuthorize を実行すると、「失敗」が返されます。リクエストコードは次のとおりです。
DoAuthorizationReq authReq = new DoAuthorizationReq() { DoAuthorizationRequest = new DoAuthorizationRequestType() { Version = "104.0", TransactionID = doCheckoutTransactionId } }; authReq.DoAuthorizationRequest.Amount = new BasicAmountType(); authReq.DoAuthorizationRequest.Amount.currencyID = CurrencyCodeType.AUD; authReq.DoAuthorizationRequest.Amount.Value = total.ToString("F");
応答には「失敗」と表示され、Errors 配列には ErrorCode=10609 とメッセージ「Invalid Transaction ID」の 1 つの項目が含まれます
なぜこれが起こっているのか考えていますか?
どうもありがとう!