当前位置: 首页 > 知识库问答 >
问题:

华为e3531 usb调制解调器-使用PHP脚本发送短信

昝光临
2023-03-14

我正在用PHP7.1编写一个脚本,用华为E3531 usb调制解调器发送短信。没有文档记录,我很难找到解决方案。这是发送短信的脚本,但我收到一个错误100002。首先,我用curl恢复令牌和sessionid,然后再次使用curl发布短信

<?php
//send Sms

$curl = curl_init();
$url = "http://192.168.8.1/api/webserver/SesTokInfo";
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($curl);  
$xml = new simpleXMLElement($content);

$sess_id = $xml->SesInfo;
// echo $sess_id;
$tokInfo= $xml->TokInfo;
curl_close($curl);

$curl2 = curl_init('http://192.168.8.1/api/send-sms/');

$headers = array(
"X-Requested-With: XMLHttpRequest",
'Cookie:'. $sess_id,
'__RequestVerificationToken:'. $tokInfo,
'"Content-Type:text/xml"',
);
$data ="<request><Index>-1</Index><Phones><Phone>7777777</Phone></Phones><Sca/><Content>hello</Content><Length></Length><Reserved>1</Reserved><Date></Date></request" ; 
//print_r($headers);

curl_setopt($curl2, CURLOPT_HTTPHEADER, $headers);

curl_setopt($curl2, CURLOPT_POST, true);

curl_setopt($curl2, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);

echo $content = curl_exec($curl2);

curl_close($curl2);

然而,我已经做了另一个脚本,让短信已经发送,它确实工作。以下是代码:

<?php
//get session_id and token
$curl = curl_init();
$url = "http://192.168.8.1/api/webserver/SesTokInfo";
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($curl);  
$xml = new simpleXMLElement($content);

$sess_id = $xml->SesInfo;
// echo $sess_id;
$tokInfo= $xml->TokInfo;
curl_close($curl);

//set boxtype to 2 for retrieve sent sms
$data="<request><PageIndex>1</PageIndex><ReadCount>10</ReadCount><BoxType>2</BoxType><SortType>0</SortType><Ascending>0</Ascending><UnreadPreferred>1</UnreadPreferred></request>";

$curl2 = curl_init('http://192.168.8.1/api/sms/sms-list/');// A compléter

$headers = array(
'Cookie:'. $sess_id,
'__RequestVerificationToken:'. $tokInfo,
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
);

//fetch sent sms
curl_setopt($curl2, CURLOPT_HTTPHEADER, $headers);

curl_setopt($curl2, CURLOPT_POST, true);

curl_setopt($curl2, CURLOPT_POSTFIELDS,$data);

curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($curl2);
echo $content;
curl_close($curl2);
$xml = new simpleXMLElement($content);

在这个链接上使用的三个步骤(通过命令行与华为E3131和debian系统上的HiLink发送和接收短信)在E3131型号(我的是e3531)的命令行上发布短信对我来说很有用,但这是通过命令行实现的。我不能回答这个问题,因为我是这个论坛的新手。

如何修复此代码?

共有2个答案

宗政和韵
2023-03-14

您获取被引用设备的令牌的方式不起作用,原因如下:
1-未经批准的URL(不适用于此设备)获取令牌并发送短信
2-很快,$xml-

但是,我建议您使用如下脚本所示的file_get_contents函数获取令牌:

// Note the small changes to your script
// Take the token: 

$infoToken =  file_get_contents('http://192.168.8.1/api/webserver/token');
$xml = new simpleXMLElement($infoToken)
$token = $xml->token;

$content ="";
$lengContent = strlen($content);
$dateTime = date("Y-m-d H:i:s");
$headers = array(
    "__RequestVerificationToken: $token",
    "X-Requested-With: XMLHttpRequest",
    "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
);

$data ='<?xml version="1.0" encoding="UTF-8"?><request><Index>-1</Index><Phones><Phone>777777</Phone></Phones><Sca></Sca><Content>'.$content.'</Content><Length>'.$lengContent.'</Length><Reserved>1</Reserved><Date>'.$dateTime.'</Date></request>' ;

//connect with cURL
//http://192.168.8.1/api/send-sms : Unapprove URL;
//http://192.168.8.1/api/sms/send-sms : Approve URL;
$curl = curl_init('http://192.168.8.1/api/sms/send-sms');
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

$content = curl_exec($curl);
var_dump($content);
curl_close($curl);

// Problem solved
桓喜
2023-03-14

你应该在数据请求中添加日期,然后很好地关闭它,这段代码对我有用:

 <?php
$curl = curl_init();
$url = "http://192.168.8.1/api/webserver/SesTokInfo";
curl_setopt($curl, CURLOPT_URL, $url); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($curl);  
$xml = new simpleXMLElement($content);

$sess_id = $xml->SesInfo;echo $sess_id;

// echo $sess_id;
$tokInfo= $xml->TokInfo;
curl_close($curl);
$curl2 = curl_init('http://192.168.8.1/api/sms/send-sms');

$headers = array(
"X-Requested-With: XMLHttpRequest",
'Cookie:'. $sess_id,
'__RequestVerificationToken:'. $tokInfo,
'"Content-Type:text/xml"',
);
$dateTime = date("Y-m-d H:i:s");
$data ="<request><Index>-1</Index><Phones><Phone>2135555555</Phone></Phones><Sca/><Content>salam</Content><Length>5</Length><Reserved>1</Reserved><Date>".$dateTime."</Date></request>" ; 
//print_r($headers);

curl_setopt($curl2, CURLOPT_HTTPHEADER, $headers);

curl_setopt($curl2, CURLOPT_POST, true);

curl_setopt($curl2, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);

echo $content = curl_exec($curl2);

curl_close($curl2);

?>
 类似资料:
  • 最好的方法是什么?我读过,但大多数话题都过时了。大多数示例都使用“COM”端口,但我在COM连接(在设备管理器中)中找不到USB调制解调器,而不是在“网卡”中。

  • 我使用华为U盘调制解调器和下面的代码成功发送短信,但长度低于140(请参阅代码--)。 但现在我看到了非常大的短信。 所以我想知道commnds有什么问题,或者可能我的硬件太旧了,所以我无法发送大短信。 有什么线索吗?

  • 我正在创建一个小VB项目,我想通过短信发送一些信息。我试图在这里找到解决方案,但可以得到一个线程。 我使用的是华为E1731 3G USB调制解调器,它能够通过官方软件发送和接收短信。如何使用调制解调器通过从表单中的文本框中获取号码,将固定消息发送到特定号码?

  • 我正在开发一个Java应用程序,使用USB调制解调器发送短信(我的是华为E173)。我尝试了SMSLib,它的示例代码成功地发送了短信。但当它连接到互联网时,它就例外了 当手机连接到互联网时,有没有办法发送短信?我必须通过Java应用程序本身建立连接吗?如果必须,如何建立连接? 编辑:这是我发送短信的完整代码(从smslib.org下载,我更改了SMSC号码和发件人号码)

  • 我有一个调制解调器中兴型号MF190,并希望通过在串行端口上的AT命令发送短信。我的问题是:当我发送AT命令时,调制解调器响应错误CMS error:305 他研究了很多关于错误的信息,他在信息中使用了一些无效字符,但我在信息中没有写任何错误。 检查: 有趣的是,如果我发送一条空消息,我就会收到短信(显然是空的) 有人去过那里,知道如何通过这种型号的调制解调器配置或发送短信?

  • 我试图使用USB调制解调器发送短信(我有一个D-Link Usb调制解调器)。我刚刚找到SmsLib,但我不知道如何使用USB调制解调器。我找到的例子是串行调制解调器,我没有找到任何USB调制解调器的例子。我需要将usb端口映射为串行端口吗?使用什么?我的调制解调器由SmsLib支持。您对如何使用SmsLib配置USB调制解调器有任何想法吗? (我有一台MacBook)。