2011-09-01 16 views
3

私は石鹸ウェブサービスに接続する登録フォームをオンラインで作成しており、支払い情報を保存できるはずです。 PHPはこの石鹸エラー、エンコーディング:オブジェクトに 'RecordId'プロパティがありません

function create_member_fee() 
     { 
     $wsdl = 'WSDL LOCATION'; 
     $client = new mySoap($wsdl, array('trace' => 1)); 
     $request = array(
      'obj'=>array(
        'Member'=>array('Number'=>$NUMBER), 
        'Amount'=>$PRICE, 
        'CreditCard'=>array(
           'TComboBox_ARCreditCardType'=>$_POST['CT'], 
           'CardNumber'=>$_POST['CN'], 
           'ExpDate'=>mktime(0,0,0,$_POST['CM'],1,$_POST['CY']), 
           'SSNumber'=>$NUMBER_PAYER 
           ) 
      ), 
      'opt'=>array('MemberAction'=>new SoapParam('_ActionInsert','ns1:TActionMethod')) 
     ); 
     $result = $client->__call('CreateMemberFee',$request); 
     return $result; 
     } 

のようなもので、ここではWSDL機能と複雑なタイプです。

<message name="CreateMemberFee85Request"> 
<part name="obj" type="ns1:TMemberFee"/> 
<part name="opt" type="ns1:TMemberFeeOptions"/> 
</message> 

<xs:complexType name="TMemberFee"> 
<xs:sequence> 
<xs:element name="Member" type="ns1:TMemberV2"/> 
<xs:element name="Payer" type="ns1:TPerson"/> 
<xs:element name="ItemCode" type="xs:string"/> 
<xs:element name="Amount" type="xs:double"/> 
<xs:element name="CreditCard" type="ns1:TCreditCard"/> 
<xs:element name="Saleperson" type="xs:string"/> 
<xs:element name="ContactName" type="xs:string"/> 
<xs:element name="DiscountPercent" type="xs:double"/> 
<xs:element name="ReductionPayment" type="xs:double"/> 
<xs:element name="DiscountValidUntil" type="xs:dateTime"/> 
<xs:element name="PaymentTerm" type="xs:string"/> 
<xs:element name="PaymentMode" type="xs:string"/> 
<xs:element name="Memo" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="TMemberV2"> 
<xs:sequence> 
<xs:element name="RecordID" type="xs:int"/> 
<xs:element name="Number" type="xs:string"/> 
<xs:element name="Name" type="xs:string"/> 
<xs:element name="SSNumber" type="xs:string"/> 
<xs:element name="Address1" type="xs:string"/> 
<xs:element name="Address2" type="xs:string"/> 
<xs:element name="Address3" type="xs:string"/> 
<xs:element name="Address4" type="xs:string"/> 
<xs:element name="ZipCode" type="xs:string"/> 
<xs:element name="City" type="xs:string"/> 
<xs:element name="CountryCode" type="xs:string"/> 
<xs:element name="CountryName" type="xs:string"/> 
<xs:element name="CountyCode" type="xs:string"/> 
<xs:element name="Phone" type="xs:string"/> 
<xs:element name="PhoneLocal" type="xs:string"/> 
<xs:element name="PhoneMobile" type="xs:string"/> 
<xs:element name="PhoneFax" type="xs:string"/> 
<xs:element name="Telex" type="xs:string"/> 
<xs:element name="Email" type="xs:string"/> 
<xs:element name="Password" type="xs:string"/> 
<xs:element name="Group" type="xs:string"/> 
<xs:element name="Tag" type="xs:string"/> 
<xs:element name="SalesPerson" type="xs:string"/> 
<xs:element name="Discount" type="xs:double"/> 
<xs:element name="ItemReceivers" type="ns1:ArrayOfItemReceiver"/> 
<xs:element name="Contacts" type="ns1:ArrayOfContacts"/> 
<xs:element name="PaymentType" type="xs:string"/> 
<xs:element name="CurrencyCode" type="xs:string"/> 
<xs:element name="NoVat" type="xs:boolean"/> 
<xs:element name="LedgerCode" type="xs:string"/> 
<xs:element name="RecordCreated" type="xs:dateTime"/> 
<xs:element name="RecordModified" type="xs:dateTime"/> 
<xs:element name="Blocked" type="xs:boolean"/> 
<xs:element name="Dead" type="xs:boolean"/> 
<xs:element name="Retierd" type="xs:boolean"/> 
<xs:element name="Disabled" type="xs:boolean"/> 
<xs:element name="Points" type="xs:double"/> 
<xs:element name="BankCode" type="xs:string"/> 
<xs:element name="BankAccGroup" type="xs:string"/> 
<xs:element name="BankAccount" type="xs:string"/> 
<xs:element name="MemberSubGroups" type="ns1:ArrayOfMemberSubGroups"/> 
<xs:element name="Carrer" type="ns1:ArrayOfMemberCarrer"/> 
<xs:element name="Membership" type="ns1:ArrayOfMemberMemberships"/> 
<xs:element name="Education" type="ns1:ArrayOfMemberEducations"/> 
<xs:element name="Applications" type="ns1:ArrayOfMemberApplication"/> 
<xs:element name="Funds" type="ns1:ArrayOfMemberFunds"/> 
<xs:element name="CreditCard" type="ns1:TCreditCard"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="TPerson"> 
<xs:sequence> 
<xs:element name="Number" type="xs:string"/> 
<xs:element name="Name" type="xs:string"/> 
<xs:element name="SSNumber" type="xs:string"/> 
<xs:element name="Address1" type="xs:string"/> 
<xs:element name="Address2" type="xs:string"/> 
<xs:element name="Address3" type="xs:string"/> 
<xs:element name="Address4" type="xs:string"/> 
<xs:element name="ZipCode" type="xs:string"/> 
<xs:element name="City" type="xs:string"/> 
<xs:element name="CountryCode" type="xs:string"/> 
<xs:element name="CountryName" type="xs:string"/> 
<xs:element name="CountyCode" type="xs:string"/> 
<xs:element name="Phone" type="xs:string"/> 
<xs:element name="PhoneLocal" type="xs:string"/> 
<xs:element name="PhoneMobile" type="xs:string"/> 
<xs:element name="PhoneFax" type="xs:string"/> 
<xs:element name="Email" type="xs:string"/> 
<xs:element name="RecordCreated" type="xs:dateTime"/> 
<xs:element name="RecordModified" type="xs:dateTime"/> 
<xs:element name="Blocked" type="xs:boolean"/> 
<xs:element name="Gender" type="ns1:TGender"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="TCreditCard"> 
<xs:sequence> 
<xs:element name="CardType" type="ns2:TComboBox_ARCreditCardType"/> 
<xs:element name="CardNumber" type="xs:string"/> 
<xs:element name="ExpDate" type="xs:dateTime"/> 
<xs:element name="SSNumber" type="xs:string"/> 
<xs:element name="Name" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 

<xs:complexType name="TMemberFeeOptions"> 
<xs:sequence> 
<xs:element name="MemberAction" type="ns1:TActionMethod"/> 
</xs:sequence> 
</xs:complexType> 

<xs:simpleType name="TActionMethod"> 
<xs:restriction base="xs:string"> 
<xs:enumeration value="_ActionUse"/> 
<xs:enumeration value="_ActionInsert"/> 
<xs:enumeration value="_ActionEdit"/> 
<xs:enumeration value="_ActionInsertEdit"/> 
<xs:enumeration value="_ActionInsertMerge"/> 
<xs:enumeration value="_ActionUseInsert"/> 
</xs:restriction> 
</xs:simpleType> 

エラーcreate_member_feeを呼び出すときに(生成)は、この

Fatal error: Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: object has no 'RecordID' property in... 

のようなものです私はPHPとイムでは比較的新しいです損失で、この巨大な週末の前に終了する割り当て、および率直に言ってイムを与え、もし誰かが助けてくれて、なぜこのエラーが発生しているのか教えてくれれば嬉しいです。 $ client - > __ getLastRequest()は動作しませんので、要求のXMLがどのように見えているのかわかりません。

+0

ごめんなさい。 – user923256

答えて

4

私はただ問題を解決しましたが、巨大で紛らわしい配列の代わりにオブジェクトを使用するという問題でした。 wsdlに表示されているオブジェクトを正確にマップすることを忘れないでください。 emtyが単に ''を使用する場合は、インスタンス内のすべてに値を割り当てる必要があります。ここに私のコードです。

class TMemberV2 
     { 
      public $RecordID; 
      public $Number; 
      public $Name; 
      public $SSNumber; 
      public $Address1; 
      public $Address2; 
      public $Address3; 
      public $Address4; 
      public $ZipCode; 
      public $City; 
      public $CountryCode; 
      public $CountryName; 
      public $CountyCode; 
      public $Phone; 
      public $PhoneLocal; 
      public $PhoneMobile; 
      public $PhoneFax; 
      public $Telex; 
      public $Email; 
      public $Password; 
      public $Group; 
      public $Tag; 
      public $SalesPerson; 
      public $Discount; 
      public $ItemReceivers; 
      public $Contacts; 
      public $PaymentType; 
      public $CurrencyCode; 
      public $NoVat; 
      public $LedgerCode; 
      public $RecordCreated; 
      public $RecordModified; 
      public $Blocked; 
      public $Dead; 
      public $Retierd; 
      public $Disabled; 
      public $Points; 
      public $BankCode; 
      public $BankAccGroup; 
      public $BankAccount; 
      public $MemberSubGroups; 
      public $Carrer; 
      public $Membership; 
      public $Education; 
      public $Applications; 
      public $Funds; 
      public $CreditCard; 
     } 

     class TCreditCard 
     { 
      public $CardType; 
      public $CardNumber; 
      public $ExpDate; 
      public $SSNumber; 
      public $Name; 
     } 

     class TMemberFee 
     { 
      public $Member; 
      public $Payer; 
      public $ItemCode; 
      public $Amount; 
      public $CreditCard; 
      public $Saleperson; 
      public $ContactName; 
      public $DiscountPercent; 
      public $DiscountValidUntil; 
      public $PaymentTerm; 
      public $PaymentMode; 
      public $Memo; 
     } 

     $member = new TMemberV2(); 
       $member->RecordID = $id; 
       $member->Number = $kennitala; 
       $member->Name = $nafn; 
       $member->SSNumber = $kennitala; 
       $member->Address1 = $heimilisfang; 
       $member->Address2 = ''; 
       $member->Address3 = ''; 
       $member->Address4 = ''; 
       $member->ZipCode = $postnumer; 
       $member->City = $sveitarfelag; 
       $member->CountryCode = 'IS'; 
       $member->CountryName = 'Ísland'; 
       $member->CountryCode = 'IS'; 
       $member->Phone = $simanumer; 
       $member->PhoneLocal = ''; 
       $member->PhoneMobile = $farsimi; 
       $member->PhoneFax = ''; 
       $member->Telex = ''; 
       $member->Email = $netfang; 
       $member->Password = ''; 
       $member->Group = ''; 
       $member->Tag = ''; 
       $member->SalesPerson = ''; 
       $member->Discount = '$'; 
       $member->ItemReceivers = ''; 
       $member->Contacts = ''; 
       $member->PaymentType = 'test'; 
       $member->CurrencyCode = ''; 
       $member->NoVat = ''; 
       $member->LedgerCode = ''; 
       $member->RecordCreated = ''; 
       $member->RecordModified = ''; 
       $member->Blocked = ''; 
       $member->Dead = ''; 
       $member->Retierd = ''; 
       $member->Disabled = ''; 
       $member->Points = ''; 
       $member->BankCode = ''; 
       $member->BankAccGroup = ''; 
       $member->BankAccount = ''; 
       $member->MemberSubGroups = ''; 
       $member->Carrer = ''; 
       $member->Membership = ''; 
       $member->Education = ''; 
       $member->Applications = ''; 
       $member->Funds = ''; 
       $member->CreditCard = ''; 

$creditCard = new TCreditCard(); 
     $creditCard->CardType = $_POST['CT']; 
     $creditCard->CardNumber = $_POST['CN']; 
     $creditCard->ExpDate = mktime(0,0,0,$_POST['CM'],1,$_POST['CY']); 
     $creditCard->SSNumber = $kt_forradamanns; 

     $memberFee = new TMemberFee(); 
     $memberFee->Member = $member; 
     $memberFee->Payer = ''; 
     $memberFee->ItemCode = ''; 
     $memberFee->Amount = $namskeid_verd; 
     $memberFee->CreditCard = $creditCard; 
     $memberFee->Saleperson = ''; 
     $memberFee->ContactName = ''; 
     $memberFee->DiscountPercent = ''; 
     $memberFee->ReductionPayment = ''; 
     $memberFee->DiscountValidUntil = strtotime("now"); 
     $memberFee->PaymentTerm = ''; 
     $memberFee->PaymentMode = ''; 
     $memberFee->Memo = ''; 

$wsdl = 'SOME WSDL'; 
    $client = new mySoap($wsdl, array('trace' => 1)); 
    $param = new SoapParam($memberFee, 'ns1:TMemberFee'); 
    $param1 = new SoapParam('_ActionInsertEdit', 'ns1:TMemberFeeOptions'); 
     $result = $client->__call('CreateMemberFee',array('obj'=>$param, 'opt'=>$param1)); 
1

も参照してくださいhttps://bugs.php.net/bug.php?id=50997 - あなたがそのバグを打つように見えます - つまり、PHPはオブジェクトを使用しない場合のシーケンスに問題があるようです。

3

あなたは、配列を使用している場合、彼はそう「ミッシング財産」として

を主張していますすべてのフィールドを定義し、それがプロパティ「のGetData」を欠けていると言い、実行します。

$ requestArray [「のGetData」 ] = '';

などのように、各フィールドが動作するまで

3

クラスを宣言することなく最善の方法は、stdClassを使用することです。それを機能させるには、オブジェクトとオブジェクトのプロパティのフィールドの名前を保持します。

これは私のために働いた、私はあなたのために働くことを願っています。

+0

ありがとう、これは本当に私を助けた! –

1

私はかつてこのようなエラーで困惑しました。それは、プロパティが要求ではなく、応答で行方不明であることが判明しました。エラーメッセージには指定が含まれていませんでした。

関連する問題