Среда: Visual Studio 2010 Professional .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
Поэтому до сих пор я не смог совершить успешную транзакцию с использованием протокола PayPal SOAP с использованием WSDL в C #.
У меня сложилось впечатление, что это очень просто.Просто добавьте ссылку на службу и используйте классы с их свойствами и методами, созданными в прокси-сервере из WSDL.
Куда я иду не так?
Использую ли я неправильный WSDL?Я хотел бы сначала протестировать против Sandbox, а затем перейти к Live.
Если я прав в WSDL, похоже, что класс PayPalAPIAAInterfaceClient не знает свою конечную точку , которую я не знаюНе знаю, если я должен установить вручную или нет, так как его уже есть в определении WSDL в конце (проверить это).Я думаю, что сам класс должен знать, какую конечную точку вызывать в зависимости от того, использую ли я Signature или Certificate для заполнения CustomSecurityHeaderType.
Но как класс PayPalAPIAAInterfaceClient узнает, пытаюсь ли я позвонить в изолированную программную среду (тестирование) или это активная транзакция?
В PayPal использовались два разных WSDL для изолированной программной среды и для рабочей среды,Их можно найти здесь: -> https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_soap_PayPalSOAPAPIArchitecture
После разговора с их поддержкой меня попросили использовать следующий WSDL для Sandbox и Live: -> 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
HELP!