2016-09-26 3 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の両方を含むことが

Iは、PayPalのAPIへの呼び出しが行われた時点で確認しました。 2。

私は「サンドボックス」モードを指しています。

しかし、setExpressCheckout呼び出しが行われると、実行時例外が発生します。 要求が中止されました:SSL/TLSセキュアチャネルを作成できませんでした。

私はPayPal API Samplesプロジェクトをダウンロードし、同じサンドボックスの資格情報を使用して動作します。フィドラーを見ると、サンプル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はちょうど古すぎるのですか?

ご協力いただきありがとうございます。私は古代のコードをすべて移行することを避けたいと思います。

編集:私はUserName/Password/Signature資格情報を使用していますが、証明書ベース資格情報は使用していません。

+0

Hey 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

関連する問題