0

PayPal .NET RestApiSDK를 사용하여 신용 카드를 저장하고 샌드 박스에서 결제를 받으려고합니다. MVC 프로젝트에서 .NET 4.5를 사용하고 있습니다. PayPal RestApiSDK .NET http 503 서버를 사용할 수 없습니다.

나는 여기에 예제 코드를 다음 : https://developer.paypal.com/webapps/developer/docs/api/#store-a-credit-card

는 처음에 상황이 매우 간단했다. 첫날, 나는 할 수 있었다 : -store 여러 카드 는 볼트의 판매 -refund 판매 - 저장 카드를 봐요 -take 여러 지불 (기본적으로 자신의 예제 코드에있는 모든)

적 첫날 (약 1 주일) 이후, 나는 http 503 "Server Unavailable"오류가 발생했다. 잠에서 뭔가 바뀌지 않으면 이전에 작동했던 정확한 코드를 사용하고 있습니다.

PayPal 지원팀에 연락하여 몇 차례 전후 메시지를 통해 내 코드에서 오류를 찾아 낼 수는 없지만 서버가 정상적으로 작동하므로 오류가 내 측면에 있어야 함을 알려줍니다.

실제로 이상한 점은 변경 데이터가 아닌 것으로 처리 할 수있는 것 같습니다. 예를 들어, payments.List()를 호출 할 수 있습니다. 그러나 나는 creditCard.Create() 또는 payment.Create()를 호출 할 수 없다.

또한 액세스 토큰이 잘 작성되고 있습니다. tokenCredential.GetAccessToken() 행은 서버 오류를 리턴하지 않습니다. 코드를 디버깅 할 때 실제로 적절한 토큰을 반환했습니다.

질문 : 카드를 저장하거나 지불하려고 할 때 http : // 503 오류가 발생할 수 있습니다.

다음은 관련 코드입니다.

컨트롤러 : 단계별

public JsonResult RunTestPayment() 
     { 
     string id = ConfigManager.Instance.GetProperties()["ClientID"]; 
     string secret = ConfigManager.Instance.GetProperties()["ClientSecret"]; 

     OAuthTokenCredential tokenCredential = new OAuthTokenCredential(id, secret); 

     string accessToken = tokenCredential.GetAccessToken(); 

     PayPal.Api.Payments.Address billingAddress = new PayPal.Api.Payments.Address(); 
     billingAddress.line1 = "52 N Main St"; 
     billingAddress.city = "Johnstown"; 
     billingAddress.country_code = "US"; 
     billingAddress.postal_code = ""; 
     billingAddress.state = "OH"; 

     PayPal.Api.Payments.CreditCard creditCard = new PayPal.Api.Payments.CreditCard(); 
     creditCard.number = "4417119669820331"; 
     creditCard.type = "visa"; 
     creditCard.expire_month = 11; 
     creditCard.expire_year = 2018; 
     creditCard.cvv2 = "874"; 
     creditCard.first_name = "Joe"; 
     creditCard.last_name = "Shopper"; 
     creditCard.billing_address = billingAddress; 

     PayPal.Api.Payments.Details amountDetails = new PayPal.Api.Payments.Details(); 
     amountDetails.subtotal = "7.51"; 
     amountDetails.tax = "0.03"; 
     amountDetails.shipping = "0.03"; 

     PayPal.Api.Payments.Amount amount = new PayPal.Api.Payments.Amount(); 
     amount.total = "7.56"; 
     amount.currency = "USD"; 
     amount.details = amountDetails; 

     PayPal.Api.Payments.Transaction transaction = new PayPal.Api.Payments.Transaction(); 
     transaction.amount = amount; 
     transaction.description = "This is the payment transaction description."; 

     List<PayPal.Api.Payments.Transaction> transactions = new List<PayPal.Api.Payments.Transaction>(); 
     transactions.Add(transaction); 

     PayPal.Api.Payments.FundingInstrument fundingInstrument = new PayPal.Api.Payments.FundingInstrument(); 
     fundingInstrument.credit_card = creditCard; 

     List<PayPal.Api.Payments.FundingInstrument> fundingInstruments = new List<PayPal.Api.Payments.FundingInstrument>(); 
     fundingInstruments.Add(fundingInstrument); 

     PayPal.Api.Payments.Payer payer = new PayPal.Api.Payments.Payer(); 
     payer.funding_instruments = fundingInstruments; 
     payer.payment_method = "credit_card"; 

     PayPal.Api.Payments.Payment payment = new PayPal.Api.Payments.Payment(); 
     payment.intent = "sale"; 
     payment.payer = payer; 
     payment.transactions = transactions; 

     PayPal.Api.Payments.Payment createdPayment = payment.Create(accessToken); 
     return Json(new JsonWrapper { Data = createdPayment }); 
} 

(JSON 오브젝트와 같은) 광고

 PayPal.Api.Payments.Payment createdPayment = payment.Create(accessToken); 

정확한 오류의 오류 occors는 :

"ClassName":"PayPal.Exception.PayPalException","Message":"Exception in HttpConnection Execute: Invalid HTTP response The remote server returned an error: (503) Server Unavailable.","Data":null,"InnerException":{"ClassName":"PayPal.Exception.ConnectionException","Message":"Invalid HTTP response The remote server returned an error: (503) Server Unavailable.","Data":null,"InnerException":null,"HelpURL":null,"StackTraceString":" at PayPal.HttpConnection.Execute(String payLoad, HttpWebRequest httpRequest)","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nExecute\nPayPalCoreSDK, Version=1.4.1.0, Culture=neutral, PublicKeyToken=null\nPayPal.HttpConnection\nSystem.String Execute(System.String, System.Net.HttpWebRequest)","HResult":-2146233088,"Source":"PayPalCoreSDK","WatsonBuckets":null},"HelpURL":null,"StackTraceString":" at PayPal.PayPalResource.ConfigureAndExecute[T](Dictionary`2 config, IAPICallPreHandler apiCallPreHandler, HttpMethod httpMethod, String resourcePath)\r\n at PayPal.PayPalResource.ConfigureAndExecute[T](APIContext apiContext, HttpMethod httpMethod, String resource, String payload)\r\n at PayPal.Api.Payments.Payment.Create(APIContext apiContext)\r\n at PayPal.Api.Payments.Payment.Create(String accessToken)\r\n at Scout.Controllers.PaymentController.RequestPermissions() in e:\\Scout\\Scout\\Controllers\\PaymentController.cs:line 1105","RemoteStackTraceString":null,"RemoteStackIndex":0,"ExceptionMethod":"8\nConfigureAndExecute\nPayPalCoreSDK, Version=1.4.1.0, Culture=neutral, PublicKeyToken=null\nPayPal.PayPalResource\nT ConfigureAndExecute[T](System.Collections.Generic.Dictionary`2[System.String,System.String], PayPal.IAPICallPreHandler, PayPal.HttpMethod, System.String)","HResult":-2146233088,"Source":"PayPalCoreSDK","WatsonBuckets":null 

의 Web.config (API 키는 여기에서 잘립니다) :

... 
<configuration> 
    <configSections> 
     <section name="paypal" type="PayPal.Manager.SDKConfigHandler, PayPalCoreSDK" /> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    ... 
    </configSections> 
    ... 
    <paypal> 
    <settings> 
     <add name="endpoint" value="https://api.sandbox.paypal.com"/> 

     <add name="ClientID" value="AbayoRB3Eq6YxM6"/> 
     <add name="ClientSecret" value="EDWNfxDxnGZ3hWZW"/> 

     <add name="connectionTimeout" value="360000"/> 
     <!-- The number of times a request must be retried if the API endpoint is unresponsive --> 
     <add name="requestRetries" value="3"/> 
    </settings> 
    </paypal> 
    ... 
    <log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="ScoutPaypalLog.log" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="FileAppender" /> 
    </root> 
    </log4net> 

본인은 log4net을 구성했으며, (. RavenDB 용) 다른 .dll에서 생성 한 데이터를 기록하고 있지만 PayPal에서 만든 항목이 없습니다.

감사합니다.

답변

0

마침내 RestApiSDK 및 PayPalCoreSDK의 두 가지 nuget 패키지를 제거했습니다. 그런 다음 Visual Studio를 다시 시작했습니다. 마지막으로 동일한 패키지 두 개를 다시 설치했습니다.

코드를 변경하지 않고 작동을 시작했습니다.

관련 문제