使用PHP调用SOAP API,“对象引用未设置为对象的实例”


SOAP API call with PHP, "Object reference not set to an instance of an object"!

我们正试图整合我们的代码和短信提供商。他们提供了一个SOAP API,但是我们遇到了一个问题,我们无法找出原因。很遗憾,短信提供商也无法回答我们的问题。

问题来了:

我们正在尝试调用' savenewschedulesendsms_daily ' API:

class ScheduleSend_Daily
{
    public $Id;
    public $MessageBody;
    public $FromDate;
    public $FromDate_Date;
    public $FromDate_Time;
    public $ToDate;
    public $ToDate_Date;
    public $ToDate_Time;
    public $Time;
    public $SmsLineID;
    public $MobileNumbers;
    public $IsFlash;
    public $IsChecked;
    public $SendType;
    public $SmsSendType;
}
$ScheduleSend_Daily = new ScheduleSend_Daily();
$ScheduleSend_Daily->Id = '-1';
$ScheduleSend_Daily->MessageBody = $SMS_TEXT;
$ScheduleSend_Daily->FromDate = $DATE_TIME[0].'T00:00:00';
$ScheduleSend_Daily->FromDate_Date = $DATE_TIME[0];
$ScheduleSend_Daily->FromDate_Time = '00:00:00';
$ScheduleSend_Daily->ToDate = $DATE_TIME[0].'T23:59:59';
$ScheduleSend_Daily->ToDate_Date = $DATE_TIME[0];
$ScheduleSend_Daily->ToDate_Time = '23:59:59';
$ScheduleSend_Daily->Time = $DATE_TIME[0].'T'.$DATE_TIME[1].':00';
$ScheduleSend_Daily->SmsLineID = LINE_NUMBER;
$ScheduleSend_Daily->MobileNumbers = array (doubleval(USER_NUMBER));
$ScheduleSend_Daily->IsFlash = 0;
$ScheduleSend_Daily->IsChecked = 0;
$ScheduleSend_Daily->SendType = 'SendOnSchedule_Daily';
$ScheduleSend_Daily->SmsSendType = 'SendOnSchedule_Daily';
$client = new SoapClient('http://ip.sms.ir/ws/SendReceive.asmx?wsdl');
$params = array (
    'userName' => SMS_USERNAME,
    'password' => SMS_PASSWORD,
    'DailyScheduleSend' => $ScheduleSend_Daily);
$result = $client->SaveNewSchedulSendSms_Daily($params);

注意:他们要求我们发送日期时间为'yyyy-mm-ddThh:mm:ss'

这将导致以下错误

stdClass Object
(
    [SaveNewSchedulSendSms_DailyResult] => -10
    [message] => Object reference not set to an instance of an object.
)

那么,是什么引起的呢?

感谢

我已经将缺少的参数添加到对象中。感谢@PratikSoni指出这一点。它还需要'IsChecked'参数,这很奇怪!

现在我得到以下错误:

PHP Fatal error:  Uncaught SoapFault exception: [soap:Client] System.Web.Services.Protocols.SoapException: Server was unable to read request. ---> System.InvalidOperationException: There is an error in XML document (2, 344). ---> System.OverflowException: Value was either too large or too small for an Int32. at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read9_ScheduleSend_Daily(Boolean isNullable, Boolean checkType) at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read33_SaveNewSchedulSendSms_Daily() at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer20.Deserialize(XmlSerializationReader reader) at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) --- End of inner exception stack trace --- at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingSt

您传递的参数不正确,参数个数应与soap调用中要求的一致

这是你必须传递的所有参数的列表。

<s:element minOccurs="1" maxOccurs="1" name="SmsLineID" type="s:int"/>
<s:element minOccurs="0" maxOccurs="1" name="MobileNumbers" type="tns:ArrayOfLong"/>
<s:element minOccurs="1" maxOccurs="1" name="SmsSendType" type="tns:SMSSentTypes"/>
<s:element minOccurs="1" maxOccurs="1" name="Time" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="IsFlash" type="s:boolean"/>
<s:element minOccurs="1" maxOccurs="1" name="ToDate" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="FromDate" type="s:dateTime"/>
<s:element minOccurs="0" maxOccurs="1" name="MessageBody" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="Id" type="s:long"/>
<s:element minOccurs="0" maxOccurs="1" name="SendType" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="FromDate_Time" type="tns:TimeSpan"/>
<s:element minOccurs="1" maxOccurs="1" name="ToDate_Time" type="tns:TimeSpan"/>
<s:element minOccurs="0" maxOccurs="1" name="FromDate_Date" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ToDate_Date" type="s:string"/>