Я реализую функциональность Paypal Express Checkout в проекте asp.net, для которого требуется авторизация, а затем аннулирование или получение разрешенной суммы. Я использую их API версии = 104.0.paypal недействительный идентификатор транзакции
Насколько я понимаю весь процесс, я делаю все правильно:
Я называю метод SetExpressCheckout с ActionType установлен в положение «Разрешить» в Детали компенсации
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 } };
- это идет хорошо и в конце Paypal в уведомлении для моего теста. Личный кабинет. Я вижу сообщение о том, что сумма денег была авторизованной.
Затем я вызываю 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 для будущего использования
Но когда я запускаю DoAuthorize с идентификатором транзакции из предыдущего ответа, я получаю сообщение «Failure». Вот код запроса:
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");
Отклик говорит «Failure» и ошибка массив содержит 1 элемент с ErrorCode = 10609 и сообщение «Invalid Transaction ID»
У вас есть какая-либо мысль, почему это это происходит?
Большое спасибо!
Но для запуска DoCapture мне нужен идентификатор транзакции авторизации, который я могу получить, только выполнив DoAuthorization, который не работает для меня. –
Но на самом деле все нормально! Большое спасибо! –
DoAuthorization - это просто прямой способ сделать это, и на самом деле они больше не рекомендуют использовать его. Вместо этого вы запускаете Express Checkout или Payments Pro в качестве авторизации, а затем выполняете это с помощью Docapture. Рад, что вы его работали. –