Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP调用SOAP API;对象引用未设置为对象的实例";!_Php_Api_Object_Soap - Fatal编程技术网

用PHP调用SOAP 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

我们正在尝试将我们的代码与和SMS提供商集成。 他们提供了一个SOAP API,但我们遇到了一个问题,无法找出原因。遗憾的是,短信提供商也无法回答我们的问题

问题是:

我们正在尝试调用“SaveNewSchedulSendSms_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"/>


请记住,名称是您将从您身边传递的参数。

您是否可以尝试
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,现在它正在工作!