2016-09-26 5 views
2

ASP.Net 4.5를 사용하고 있지만 PayPal SOAP API의 아주 오래된 버전을 사용하고 있습니다. 참조는 4.3.1.0의보고 된 버전으로 paypal_base.dll에 있습니다..Net 서버에서 TLS 1.2를 지원하려면 새로운 PayPal API가 필요합니까?

com.paypal.sdk.services

com.paypal.soap.api : API를 호출하는 코드는 참조 문 "을 사용하여"했다. 이 값

System.Net.ServicePointManager.SecurityProtocol

은 SSL3 및 TLS1 모두 포함

내가 페이팔 API에 대한 호출이되는 지점에서 확인했습니다. 2.

"샌드 박스"모드를 가리키고 있습니다.

하지만 setExpressCheckout 호출이 실행되면 다음과 같은 런타임 예외가 발생합니다. 요청이 중단되었습니다. SSL/TLS 보안 채널을 만들지 못했습니다.

PayPal API 샘플 프로젝트를 다운로드하고 동일한 샌드 박스 자격 증명을 사용하여 작동합니다. 피들러를 살펴보면 샘플 API 호출이 api-3t.sandbox.paypal.com으로 이동하고 내 코드는 api-aa.sandbox.paypal.com으로 이동하지만 TLS 1.2 준비 상태에 대한 문서에 따르면 호출은 거의 동일합니다. , 두 apis 작동해야합니다. 어느 API에서든 "라이브"와 "샌드 박스"사이를 전환하는 것 이외의 다른 끝점을 설정할 곳이 어디에도 없습니다. 피들러 응답

모두 표시 : "A SSLv3에 대응 ServerHello 악수를 찾았습니다 피들러 아래 파라미터 추출 버전 :.. 3.3 (TLS/1.2)" 그리고 응답이 "랜덤을 제외하고 동일 "매개 변수.

 SetExpressCheckoutRequestType request = new SetExpressCheckoutRequestType(); 
     populateRequestObject(request); //populate request data 
     SetExpressCheckoutReq wrapper = new SetExpressCheckoutReq(); 
     wrapper.SetExpressCheckoutRequest = request; 
     Dictionary<string, string> configurationMap = Configuration.GetAcctAndConfig(); //set merchant config 
     PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(configurationMap); 
     SetExpressCheckoutResponseType setECResponse = service.SetExpressCheckout(wrapper); //make the call 

어디에 (다시, 아주 오래된 코드는 다음과 같습니다) :

그래서 기존의 API 호출은 TLS 1.2

내 코드와 샘플 API 코드는 약간 다른, 샘플 사용을 사용하고

CallerServices caller = new CallerServices(); 
    caller.APIProfile = SetProfile.ApplicationProfile; //set merchant config 
    SetExpressCheckoutRequestType pp_request = new SetExpressCheckoutRequestType(); 
    // Create the request details object 
    pp_request.SetExpressCheckoutRequestDetails = new SetExpressCheckoutRequestDetailsType(); 
    pp_request.SetExpressCheckoutRequestDetails.PaymentAction = paymentAction; 
    pp_request.SetExpressCheckoutRequestDetails.PaymentActionSpecified = true; 

    pp_request.SetExpressCheckoutRequestDetails.OrderTotal = new BasicAmountType(); 

    pp_request.SetExpressCheckoutRequestDetails.OrderTotal.currencyID = currencyCodeType; 
    pp_request.SetExpressCheckoutRequestDetails.OrderTotal.Value = paymentAmount; 

    pp_request.SetExpressCheckoutRequestDetails.CancelURL = cancelURL; 
    pp_request.SetExpressCheckoutRequestDetails.ReturnURL = returnURL; 
    return (SetExpressCheckoutResponseType) caller.Call("SetExpressCheckout", pp_request); //do the call 

예제 코드가 작동하지만 내 코드에서 SSL/TLS 오류가 발생합니다. 최신 SDK로 업그레이드하려고했지만 많은 변화가있었습니다. 모든 코드를 마이그레이션하는 데 많은 노력이 필요합니다.

피 들러에서 이전 API에서도 TLS 1.2를 사용하고있는 것으로 보이지만 SSL/TLS 연결에 대한 런타임 예외가 발생합니다. 다른 끝점 때문입니까? 이전 API가 너무 오래 되었습니까?

사전 도움을 요청 해 주셔서 감사합니다. 모든 고대 코드를 마이그레이션하는 것을 피하는 것이 좋습니다.

편집 : 사용자 이름/암호/서명 자격 증명, 인증서 기반 자격 증명을 사용하고 있음을 언급해야합니다.

+0

안녕하세요 Jeff ... 전 똑같은 문제가있는 이전 WebForms 코드를 상속했습니다. 당신이 이것에 대한 답변을 얻었다면 궁금해할까요? – user1011627

+1

죄송합니다. 답을 수락하기 위해 여기로 돌아 오는 것을 잊어 버렸습니다.하지만 PP_MTS_hzhu가 맞습니다. 어셈블리를 4.5로 업그레이드 한 다음 정적 생성자에 대한 응답으로 코드 줄을 추가하여 작동했습니다. 나는 새로운 PayPal API를 사용할 필요가 없었다. –

+0

응답 해 주셔서 감사합니다 .... 감사합니다. – user1011627

답변

0

TLS1.2는 .Net4.5에서 지원되지만 기본 프로토콜은 아닙니다. 그것을 사용하도록 선택해야합니다. 다음 코드는 TLS 1을 만듭니다.2 기본값은 보안 리소스에 연결하기 전에 실행해야합니다.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 
+0

그 후 예외는 "전송 연결에서 데이터를 읽을 수 없습니다 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."로 변경됩니다. 변경해야 할 것이 있습니까? – Alex