2014-09-09 2 views
1

PHP의 .NET 웹 서비스에서 datacontract로 정의 된 사용자 정의 객체를 보내고 싶습니다. 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); 

내가 서비스에서지고있어 예외입니다 ". 개체의 인스턴스로 설정되지 않았습니다 개체 참조" 언제 내가 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에서 세션 ID를 받고, 우리는 submitcreditcardinformation 기능을 사용하여 PHP 비누를 호출 할 필요가 여기 CreditCardNumber은 하나의 필수 필드입니다. 내가 솔루션을 가지고

+0

'문자열 SubmitCreditCardInformation은 (문자열 applicationSessionId, CreditCardSubmission 요청)'당신은 만들 필요가 함수 ... –

+0

아니다 $ prapms에있는 데이터를 가진'CreditCardSubmission' 객체를 만들고 SubmitCreditCardInformation으로 보냅니다. 연관 배열을 사용하여 CCS 객체를 생성하기위한 바로 가기가 있는지 API를 확인하십시오. –

+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); 

....... 모두에게 들으 ...

관련 문제