У нас есть мыльный сервис .Net, нам нужно вызвать один из сервисных методов. Я попытался создать экземпляр stdClass () и назначить необходимые свойства .NET. Невозможно передать объект службе .Net.
Я использовал Nusoap здесь, но если у вас есть решение класса SOAP PHP, оно также предлагается.
$client_card = new nusoap_client('https://uatapi.viad.com/ges/v1/orderService.svc?wsdl', 'WSDL');
$obj = new stdClass();
$obj->CreditCardNumber = "4518169332998699";
$obj->ExpireMonth = 05;
$obj->ExpireYear = 2025;
$obj->CardNickname = "Test";
$obj->CardholderName = "test";
$obj->Address = "test";
$obj->City = "Anywhere";
$obj->State = "test";
$obj->PostalCode = "test";
$obj->Country ="test";
$parameter= array("CreditCardSubmission" => $obj);
$obj1 = $client_card->call('SubmitCreditCardInformation',
array("applicationSessionId" => $id, $parameter));
Вот мой метод подписи.
string SubmitCreditCardInformation(string applicationSessionId, CreditCardSubmission request)[DataContract(Namespace = "www.xxx.com")]
public class CreditCardSubmission
{
[DataMember] public string CreditCardNumber { get; set; }
[DataMember] public int ExpireMonth { get; set; }
........
}
Мой код xml
<wsdl:operation name="SubmitCreditCardInformation">
<soap:operation soapAction="www.viad.com/v1/IOrderService/SubmitCreditCardInformation" style="document"/>
<wsdl:input><soap:body use="literal"/></wsdl:input>
<wsdl:output><soap:body use="literal"/></wsdl:output>
<wsdl:fault name="DictionaryOf_String_StringFault">
<soap:fault name="DictionaryOf_String_StringFault" use="literal"/></wsdl:fault></wsdl:operation>
Ниже моя ошибка
Array
(
[faultcode] => a:InternalServiceFault
[faultstring] => Array
(
[!xml:lang] => en-US
[!] => Object reference not set to an instance of an object.
)
[detail] => Array
(
[ExceptionDetail] => Array
(
[HelpLink] =>
[InnerException] =>
[Message] => Object reference not set to an instance of an object.
[StackTrace] => at Viad.Services.Public.GES.v1.OrderService.SubmitCreditCardInformation(String applicationSessionId, CreditCardSubmission request) in c:\SVN\Viad.GES.Services\Branches\PublicServices_v1\Viad.Services.Public.GES\v1\OrderService.svc.cs:line 1248
at SyncInvokeSubmitCreditCardInformation(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
[Type] => System.NullReferenceException
)
)
)
Любая помощь будет оценена. Спасибо…….
Задача ещё не решена.
Других решений пока нет …