Я делаю сценарий с PHP 7.1 для отправки SMS с USB-модемом Huawei E3531. Там нет документации, и у меня много трудностей, чтобы найти решение.
Это скрипт для отправки смс но я получаю ошибку 100002.
Сначала я восстанавливаю токен и sessionid с помощью curl, а затем снова использую 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);
3 три шага, используемые по этой ссылке (Отправка и получение SMS из командной строки с помощью Huawei E3131 и HiLink в системе Debian) публиковать смс в командной строке с моделью e3131 (у меня e3531) работало у меня, но это с командной строкой.
Я не могу ответить в этой теме, потому что я новичок в этом форуме.
Как я могу исправить этот код?
То, как вы получаете токен для указанного устройства, не работает по следующим причинам:
1 — Неутвержденный URL (не относится к данному устройству) для получения токена и отправки смс;
2 — скоро вызванный метод $ xml-> SesInfo не будет работать;
Однако я рекомендую взять токен с функцией 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
Других решений пока нет …