2014-09-09 3 views
1

Я хочу отправить пользовательский объект, который определяется как datacontract в моей веб-службе .NET с PHP. Я пытаюсь выполнить это через SOAP. Вот мой datacontract.PHP-мыльный сервис, вызывающий .Net webservice

[DataContract(Namespace = "www.xxxxx.com/data/v1")] 
    public class CreditCardSubmission 
{ 
    [DataMember] 
    public string CreditCardNumber { get; set; } 
    [DataMember] 
    public int ExpireMonth { get; set; } 
    [DataMember] 
    public int ExpireYear { get; set; } 
    [DataMember] 
    public string CardNickname { get; set; } 
    [DataMember] 
    public string CardholderName { get; set; } 
    [DataMember] 
    public string Address { get; set; } 
    [DataMember] 
    public string City { get; set; } 
    [DataMember] 
    public string State { get; set; } 
    [DataMember] 
    public string PostalCode { get; set; } 
    [DataMember] 
    public string Country { get; set; } 
} 

Вот функция

string SubmitCreditCardInformation(string applicationSessionId, 
CreditCardSubmission request) 

Вот мой PHP код.

$result2 = $client->call("UserLogin", array(
    "AppSessionID" =>$result['StartAppSessionResult']'SessionID'], 
                "LoginName" => "xxxxxxx", 
                "Password" => "xxxxxxxx", 
                "RetrieveSecurityGroups" => FALSE)); 

$client_cc = new nusoap_client('https://abc.com/abc.svc?wsdl', 'WSDL'); 
$obj = new stdClass(); 
$obj->CreditCardNumber = "4518169332998699"; 
$obj->ExpireMonth = 05; 
$obj->ExpireYear = 2025; 
$obj->CardNickname = "Test Card"; 
$obj->CardholderName = "John Doe"; 
$obj->Address = "123 Main Street"; 
$obj->City = "Anywhere"; 
$obj->State = "CA"; 
$obj->PostalCode = "92000"; 
$obj->Country ="Sandeep"; 
$parameter= array("CreditCardSubmission" => $obj); 

$result3 = $client_cc->call(
    'SubmitCreditCardInformation', array($result['UserLoginResult']['SessionID']), $parameter); 

Ниже исключение я получаю от службы: «Ссылка на объект не указывает на экземпляр объекта.» когда i print_r ($ result3);

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 1246 
    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 
       ) 

     ) 

) 

Мы получаем идентификатор сессии из $result2, мы должны вызвать submitcreditcardinformation функцию с помощью PHP мыло, здесь CreditCardNumber только один обязательное поле.

+0

'строка SubmitCreditCardInformation (строка applicationSessionId, CreditCardSubmission запрос)' не является функцией ... –

+0

Вам нужно создать объект «CreditCardSubmission» с данными в $ prapms, а затем отправить его в 'SubmitCreditCardInformation'. Проверьте API, чтобы узнать, есть ли ярлык для создания объекта CCS с использованием ассоциативного массива. –

+0

Извините, я не очень хороша в мыле. Мне нужно отправить данные для обслуживания и получить ответ. plz help –

ответ

0
$Address = 'test'; 
    $CardNickname = 'test'; 
    $CardholderName = 'test'; 
    $City = 'test'; 
    $Country = 'test'; 
    $CreditCardNumber = '4532586989865974'; 
    $ExpireMonth = 5; 
    $ExpireYear = 2015;  
    $PostalCode = 'test'; 
    $State = 'test'; 
$serviceurl2 = 'https://abc.com/orderService.svc?wsdl';//Soap url 
$namespacemethod = 'www.xxx.com/v1/clssname/SubmitCreditCardInformation'; 

     $client_card = new nusoap_client($serviceurl2, TRUE); 
     $client_card->soap_defencoding = 'UTF-8'; 
      $client->useHTTPPersistentConnection(); 
      $xml_str ='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="www.xxx.com/v1" xmlns:v11="www.xxx.com/data/v1"> 
      <soapenv:Header/> 
      <soapenv:Body> 
       <v1:SubmitCreditCardInformation> 
       <!--Optional:--> 
       <v1:applicationSessionId>'.$result2['UserLoginResult']['SessionID'].'</v1:applicationSessionId> 
       <!--Optional:--> 
       <v1:request> 
        <!--Optional:--> 
        <v11:Address>'.$Address.'</v11:Address> 
        <!--Optional:--> 
        <v11:CardNickname>'.$CardNickname.'</v11:CardNickname> 
        <!--Optional:--> 
        <v11:CardholderName>'.$CardholderName.'</v11:CardholderName> 
        <!--Optional:--> 
        <v11:City>'.$City.'</v11:City> 
        <!--Optional:--> 
        <v11:Country>'.$Country.'</v11:Country> 
        <!--Optional:--> 
        <v11:CreditCardNumber>'.$CreditCardNumber.'</v11:CreditCardNumber> 
        <!--Optional:--> 
        <v11:ExpireMonth>'.$ExpireMonth.'</v11:ExpireMonth> 
        <!--Optional:--> 
        <v11:ExpireYear>'.$ExpireYear.'</v11:ExpireYear> 
        <!--Optional:--> 
        <v11:PostalCode>'.$PostalCode.'</v11:PostalCode> 
        <!--Optional:--> 
        <v11:State>'.$State.'</v11:State> 
       </v1:request> 
       </v1:SubmitCreditCardInformation> 
      </soapenv:Body> 
     </soapenv:Envelope>'; 
     $credicard_token = $client_card->send($xml_str, $namespacemethod); 
Print_r($credicard_token); 

Я получил решение ....... Thx всем ...

Смежные вопросы