Интеграция PayPal в решение C # /. NET с использованием WSDL (SOAP)

Среда: Visual Studio 2010 Профессиональный .NET Framework 4 C #

Добавлена ​​ссылка на службу с использованием следующего WSDL: https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl

Проблема 1 : При такой простой компиляции возникает множество ошибок. из файла Reference.cs. Похоже на ошибки пространства имен. В нем упоминается, что он не может найти пространство имен ссылки на службу в пространстве имен моего проекта. Поэтому я зашел в файл Reference.cs и, где бы я ни получил эту ошибку, я удалил пространство имен проекта перед именами методов, и теперь он компилируется.

Наконец-то получил доступ ко всем классам. Созданы и заполнены объекты DoDirectPaymentReq и CustomSecurityHeader с необходимыми свойствами. Создан экземпляр класса PayPalAPIAAInterfaceClient, который содержит метод DoDirectPayment , который принимает аргументы типа CustomSecurityHeader и DoDirectPaymentReq.Выглядит это так:

using (var client = new **PayPalAPIAAInterfaceClient**())
{
   var credentials = new CustomSecurityHeaderType
   {
      Credentials = new UserIdPasswordType
      {
         Username = "xxxxxxxx@xxxxxx.com",
         Password = "xxxxxxx",
         Signature = "jksadfuhasfweakjhasf"
      }
   };

   _doDirectPaymentResponseType = client.DoDirectPayment(ref credentials, _doDirectPaymentReq);
}

Проблема 2 : После написания TestMethod для метода, содержащего приведенный выше код, я получаю следующую ошибку:

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

Следовательно, пока мне не удалось выполнить успешную транзакцию с использованием протокола SOAP PayPal с использованием WSDL в C #.

Мне показалось, что это очень просто. Просто добавьте ссылку на службу и используйте классы с их свойствами и методами, созданными в прокси из WSDL.

В чем я ошибаюсь?

Я использую неправильный WSDL? Я хотел бы сначала протестировать против Sandbox, а затем запустить Live.

Если я прав с WSDL, похоже, что класс PayPalAPIAAInterfaceClient не знает свою конечную точку , которую я не знаю, предполагаю ли я установить вручную или нет, поскольку она уже есть в Определение WSDL в конце (проверьте это). Я думаю, что сам класс должен знать, какую конечную точку вызывать, в зависимости от того, использую ли я подпись или сертификат для заполнения CustomSecurityHeaderType.

Но как класс PayPalAPIAAInterfaceClient узнает, пытаюсь ли я вызвать песочницу (тестирование) или это живая транзакция?

В PayPal было два разных WSDL для Sandbox и для Live. Их можно найти здесь: -> https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_soap_PayPalSOAPIArchitecture

После разговора с их службой поддержки меня попросили использовать следующий WSDL для обоих Sandbox и жить: -> https://www.paypalobjects.com/wsdl/PayPalSvc.wsdl

Но как мне сообщить классу PayPalAPIAAInterfaceClient, когда он должен выполнять тесты Live или Sandbox. А также, какую конечную точку использовать в зависимости от моего метода SOAP и подписи. Здесь упоминаются конечные точки из PayPal:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_endpoints

ПОМОЩЬ!

6
задан dparkar 6 January 2012 в 18:35
поделиться