Ambiente:. Visual Studio 2010 Professional .NET Framework 4 C#Integrazione di PayPal in C#/Soluzione NET usando WSDL (SOAP)
Added Service di riferimento utilizzando il seguente WSDL: https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl
Problema 1: Quando viene compilato in questo modo, ottieni un sacco di errori dal file Reference.cs. Sembra che gli errori dello spazio dei nomi. Ricorda che non riesce a trovare lo spazio dei nomi di riferimento del servizio nello spazio dei nomi del mio progetto. Pertanto, sono entrato nel file Reference.cs e, in ogni caso, ho rimosso lo spazio dei nomi del progetto prima dei nomi dei metodi e ora lo compila.
Finalmente accesso a tutte le classi. Creato e popolato DoDirectPaymentReq e CustomSecurityHeader oggetti con le proprietà richieste. Creata un'istanza della classe PayPalAPIAAInterfaceClient, che contiene il metodo DoDirectPayment che accetta gli argomenti di tipo CustomSecurityHeader e DoDirectPaymentReq. Sembra che questo:
using (var client = new **PayPalAPIAAInterfaceClient**())
{
var credentials = new CustomSecurityHeaderType
{
Credentials = new UserIdPasswordType
{
Username = "[email protected]",
Password = "xxxxxxx",
Signature = "jksadfuhasfweakjhasf"
}
};
_doDirectPaymentResponseType = client.DoDirectPayment(ref credentials, _doDirectPaymentReq);
}
Problema 2: Dopo aver scritto un TestMethod per il metodo che contiene il codice di cui sopra, ottengo l'errore come segue:
System.InvalidOperationException: Could not find default endpoint element that references contract 'Paypal.PayPalAPIAAInterface' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.
at System.ServiceModel.Description.ConfigLoader.LoadChannelBehaviors(ServiceEndpoint serviceEndpoint, String configurationName)
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName, Configuration configuration)
at System.ServiceModel.ChannelFactory.ApplyConfiguration(String configurationName)
at System.ServiceModel.ChannelFactory.InitializeEndpoint(String configurationName, EndpointAddress address)
at System.ServiceModel.ChannelFactory`1..ctor(String endpointConfigurationName, EndpointAddress remoteAddress)
at System.ServiceModel.EndpointTrait`1.CreateSimplexFactory()
at System.ServiceModel.ClientBase`1.CreateChannelFactoryRef(EndpointTrait`1 endpointTrait)
at System.ServiceModel.ClientBase`1.InitializeChannelFactoryRef()
at System.ServiceModel.ClientBase`1..ctor()
at PaymentEngine.Paypal.PayPalAPIAAInterfaceClient..ctor() in Reference.cs: line 30063
Pertanto, finora non ho stato in grado di effettuare una transazione di successo utilizzando il protocollo SOAP PayPal tramite WSDL in C#.
Ho avuto l'impressione che sia molto semplice. È sufficiente aggiungere un riferimento al servizio e utilizzare le classi con le relative proprietà e metodi creati nel proxy da WSDL.
Dove sto andando male?
Sto usando il WSDL sbagliato? Mi piacerebbe provare prima contro Sandbox e poi andare dal vivo.
Se ho ragione con il WSDL, si presenta come la classe PayPalAPIAAInterfaceClient non conosce il suo endpoint, che non so se sto supponiamo di impostare manualmente o meno dalla sua già lì nella definizione WSDL a alla fine (check it out). Penso che la classe stessa dovrebbe sapere quale endpoint chiamare a seconda che io stia usando Signature o Certificate per popolare CustomSecurityHeaderType.
Ma come fa la classe PayPalAPIAAInterfaceClient a sapere se sto tentando di chiamare in Sandbox (testing) o si tratta di una transazione live?
PayPal utilizzava due WSDL diversi per Sandbox e per Live. Essi possono essere trovati qui: ->https://cms.paypal.com/us/cgi-bin/?cmd=_render-content & content_id = sviluppatore/e_howto_api_soap_PayPalSOAPAPIArchitecture
Dopo aver parlato con il loro sostegno mi è stato ha chiesto di utilizzare il seguente WSDL per Sandbox e Live: ->https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl
Ma come si dice alla classe PayPalAPIAAInterfaceClient quando si suppone che esegua i test Live o Sandbox. E anche a quale punto finale usare in base al mio metodo SOAP e Signature. Gli endpoint da PayPal sono menzionati qui:
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_endpoints
AIUTO!
OMG !!! Che stupido da parte mia !! Perché non ho guardato in app.config !! CHE FUNZIONA !! GRAZIE, GRAZIE, GRAZIE! Anche se sto ricevendo un errore "Versione non supportata" da Paypal. – dparkar
La versione non supportata può essere risolta inviando la versione corretta nella richiesta SOAP: l'ultima versione è 84.0 al momento. – Robert
Grazie Robert! Anche quello ha funzionato :) – dparkar