用PHP调用SOAP API;对象引用未设置为对象的实例";!
我们正在尝试将我们的代码与和SMS提供商集成。 他们提供了一个SOAP API,但我们遇到了一个问题,无法找出原因。遗憾的是,短信提供商也无法回答我们的问题 问题是: 我们正在尝试调用“SaveNewSchedulSendSms_Daily”API:用PHP调用SOAP API;对象引用未设置为对象的实例";!,php,api,object,soap,Php,Api,Object,Soap,我们正在尝试将我们的代码与和SMS提供商集成。 他们提供了一个SOAP API,但我们遇到了一个问题,无法找出原因。遗憾的是,短信提供商也无法回答我们的问题 问题是: 我们正在尝试调用“SaveNewSchedulSendSms_Daily”API: class ScheduleSend_Daily { public $Id; public $MessageBody; public $FromDate; public $FromDate_Date; pub
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"/>
请记住,名称是您将从您身边传递的参数。您是否可以尝试
dailyScheduleSend
而不是dailyScheduleSend。嘿@PratikSoni,现在它给我们提供了以下错误未捕获的SoapFault异常:[Client]SOAP-ERROR:编码:对象没有“IsChecked”属性;$ScheduleSend_Daily->Id='-1';$ScheduleSend_Daily->MessageBody=$SMS_TEXT;$ScheduleSend_Daily->FromDate=$DATE_时间[0]。'T00:00:00';$ScheduleSend_Daily->FromDate_Time=$DATE_Time[0]。'T00:00:00';$ScheduleSend_Daily->ToDate=$DATE_TIME[0]。'T23:59:59';$ScheduleSend_Daily->ToDate_Time=$DATE_Time[0]。'T23:59:59';$ScheduleSend\u Daily->Time=$DATE\u Time[0]。'T'。$DATE\u Time[1]。:00';$ScheduleSend_Daily->SmsLineID=行号;$ScheduleSend_Daily->MobileNumbers=array(doubleval(用户编号))代码>$ScheduleSend\u Daily->IsFlash=0;$ScheduleSend_Daily->IsChecked=0;$ScheduleSend_Daily->SmsSentTypes='SendOnSchedule_Daily'代码>使用所有缺少的参数并重试。谢谢@PratikSoni。我已将不必要的参数更改为NULL,现在它正在工作!