나는 승인을 요구하고 승인 된 금액을 취소하거나 캡처해야하는 asp.net 프로젝트에서 Paypal Express Checkout 기능을 구현합니다. 버전 = 104.0의 API를 사용하고 있습니다.페이팔 유효하지 않은 거래 id
가 제대로나는 전체 과정을 이해 지금까지, 내가 뭐하는 거지 모든 :
내가 지불 세부 사항에서 "권한 부여"로 설정 ActionType과 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 } };
- 이 잘 간다 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 향후 사용을 위해 저장합니다.
그러나 이전 응답에서 트랜잭션 ID로 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");
응답은 "실패"및 오류 배열이있는 ErrorCode = 10609 및 메시지 "잘못된 트랜잭션 ID"
당신이 어떤 생각 이유가 있나요 1 개 항목을 포함 말한다 : 여기에 요청 코드입니다 이 일어나고있다?
고맙습니다.
DoCapture를 실행하려면 DoAuthorization을 실행해야만 작동하는 인증 트랜잭션 ID가 필요합니다. –
하지만 실제로 잘 작동했습니다! 대단히 감사합니다! –
DoAuthorization은이를 수행하는 직접적인 방법이며 실제로는 더 이상 사용하지 않는 것이 좋습니다. 대신, Express Checkout 또는 Payments Pro를 권한으로 실행 한 다음 Docapture를 사용하십시오. 다행 이군. –