Ich benutze ASP.Net 4.5, aber mit einer sehr alten Version der PayPal SOAP API. Der Verweis bezieht sich auf paypal_base.dll mit einer gemeldeten Version von 4.3.1.0. Der Code, der die API-Aufrufe hat "mit" Aussagen, die Referenz:Benötige ich eine neue PayPal-API zur Unterstützung von TLS 1.2 auf einem .Net-Server?
com.paypal.sdk.services
com.paypal.soap.api.
ich an der Stelle überprüft haben, wo der Anruf an die PayPal api gemacht wird, dass dieser Wert
System.Net.ServicePointManager.SecurityProtocol
sowohl SSL3 und TLS1 enthält. 2.
Ich zeige auf den "Sandbox" -Modus.
Aber wenn der Aufruf setExpressCheckout gemacht wird, bekomme ich eine Laufzeitausnahme, die sagt: Die Anfrage wurde abgebrochen: Konnte keinen sicheren SSL/TLS-Kanal erstellen.
Ich habe das PayPal API Samples-Projekt heruntergeladen und mit den gleichen Sandbox-Anmeldeinformationen funktioniert es. Wenn man in Fiddler schaut, sind die Aufrufe fast identisch, außer dass der API-Aufruf von samples an api3t.sandbox.paypal.com geht, während mein Code an api-aa.sandbox.paypal.com geht, aber laut der Dokumentation zu TLS 1.2 readyness Beide Apis sollten funktionieren. Ich sehe nirgends in einer der beiden APIs einen anderen Endpunkt als einen Wechsel zwischen "live" und "sandbox".
Im Fiedler Antwort, die beide zeigen: "A SSLv3-kompatible Serverhello Handshake gefunden wurde Fiddler die folgenden Parameter extrahiert Version:.. 3.3 (TLS/1.2)" Und die Antworten sind identisch mit Ausnahme des „random "Parameter. So ist die alte API-Aufruf ist TLS 1.2
Mein Code und die Proben-API-Code sind nur etwas anders, die Probe verwendet:
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
Wo ist mein (wieder sehr alten Code sieht wie folgt aus):
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
Der Beispielcode funktioniert, mein Code löst den SSL/TLS-Fehler aus. Ich habe versucht, auf das neueste SDK zu aktualisieren, aber so vieles hat sich geändert, es wird ein ziemlich großer Aufwand sein, den gesamten Code zu migrieren.
Von Fiddler scheint es TLS 1.2 sogar mit der alten API zu verwenden, aber ich bekomme eine Laufzeitausnahme über die SSL/TLS-Verbindung. Liegt es am unterschiedlichen Endpunkt? Ist die alte API einfach zu alt?
Vielen Dank im Voraus für jede Hilfe - ich würde gerne vermeiden, all diesen alten Code zu migrieren !.
EDIT: Ich sollte erwähnen, ich benutze die Benutzername/Passwort/Unterschrift Anmeldeinformationen, nicht zertifikatbasierte Anmeldeinformationen.
Hey Jeff ... Ich erbte nur alte WebForms-Code, der genau diese Sorge hat. Hast du dich gefragt, ob du jemals eine Antwort darauf bekommen hast? – user1011627
Entschuldigung, ich glaube, ich habe vergessen, hierher zu kommen, um die Antwort zu akzeptieren, aber PP_MTS_hzhu ist korrekt. Ich aktualisierte die Assembly auf 4.5 und fügte dann die Codezeile in der Antwort zu einem statischen Konstruktor hinzu, und es funktionierte. Ich musste keine neue PayPal-API verwenden. –
Danke für die Antwort .... schätzen es. – user1011627