Gestion des tokens (configurable dans la config ou directement)

Disparition du bug avec l'amperson par le passage en Json et non plus en XML.
Suppression de la Class AccuseReceptionSMS
pull/2/head
thrax 9 months ago
parent 780c3af5fa
commit e87f0151de

@ -1,49 +0,0 @@
<?php
class AccuseReceptionSMSClass
{
//input parameters ---------------------
var $username; //your username
var $password; //your password
var $ticket; //your ticket
var $response; //wainting response
//--------------------------------------
function AccuseReceptionSMS($username, $password, $ticket)
{
$this->username = $username;
$this->password = $password;
$this->ticket = $ticket;
// (POST /dr) get recipient, url + dr
$host = "https://api.smsfactor.com/dr";
$this->prepareXMLdata();
$this->response = $this->do_post_request($host,$this->request_data);
return $this->response;
}
function prepareXMLdata()
{
$xmldata = "<deliveryreport><authentification><username>" . $this->username . "</username><password>" . $this->password . "</password></authentification><message><ticket gsmsmsid=\"\">" . $this->ticket . "</ticket></message></deliveryreport>";
$this->request_data = 'XML=' . $xmldata;
}
function do_post_request($url, $postdata, $optional_headers = null)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
}
?>

@ -14,8 +14,10 @@ class SendSMSclass
//--------------------------------------
var $host;
var $XMLgsmnumbers;
var $xmldata;
var $token;
var $optional_headers;
var $fomatedGSM = array();
var $formatedMessage = array();
var $request_data;
var $response;
@ -26,39 +28,61 @@ class SendSMSclass
$this->username = $username;
$this->password = $password;
$this->sender = $options['sender'];
$this->token = $options['token'] ? TRUE : FALSE;
if ($options['type_sms'] == 'simulate'){
$dir = '/send/simulate'; // l'API accueillera la demande mais le SMS ne sera pas envoyé
} else {
$dir = '/send';
}
// definir un header pour accueillir le json et, si besoin, donner le token
$headers = array('Content-Type: application/json', 'Accept: application/json');
if ($options['token']){
$headers = array_merge($headers,["Authorization: Bearer " . $options['token']]);
}
$this->optional_headers = $headers;
$this->message = $message;
$this->inputgsmnumbers = $inputgsmnumbers;
$this->host = "https://api.smsfactor.com" . $dir;
$this->formatGSM();
$this->formatMessage();
$this->convertGSMnumberstoXML();
$this->prepareXMLdata();
$this->response = $this->do_post_request($this->host,$this->request_data);
// un petit log avec les informations essentielles pour le debug
spip_log('host = ' . $this->host . ' request_data = ' . $this->request_data . ' headers = ' . print_r($this->optional_headers,true), 'sms_error.' . _LOG_DEBUG);
// on envoie le SMS
$this->response = $this->do_post_request($this->host,$this->request_data,$this->optional_headers);
return $this->response;
}
function convertGSMnumberstoXML()
function formatGSM()
{
$gsmcount = count($this->inputgsmnumbers); #counts gsm numbers
for ( $i = 0; $i < $gsmcount; $i++ )
{
$this->XMLgsmnumbers .= "<gsm>" . $this->inputgsmnumbers[$i] . "</gsm>";
foreach ($this->inputgsmnumbers as $cle => $n) {
$fomatedGSM[] = array('value' => $n);
}
$this->fomatedGSM = $fomatedGSM;
}
function prepareXMLdata()
function formatMessage()
{
$this->xmldata = "<sms><authentification><username>" . $this->username . "</username><password>" . $this->password . "</password></authentification><message><sender>" . $this->sender . "</sender>" . $this->texte_avec_liens_courts() . "</message><recipients>" . $this->XMLgsmnumbers . "</recipients></sms>";
$this->request_data = 'XML=' . $this->xmldata;
$formated = [
'sms' => [
'message' =>
array_merge( ['sender' => $this->sender], $this->texte_avec_liens_courts() ),
'recipients' => [
'gsm' => $this->fomatedGSM
]
]
];
// s'il n'y a pas de token, on transmet le login et mot de passe
if ($this->token == FALSE){
$formated['sms']['authentification'] = [
'username' => $this->username,
'password' => $this->password
];
}
$this->formatedMessage = $formated;
$this->request_data = json_encode($this->formatedMessage);
}
function do_post_request($url, $postdata, $optional_headers = null)
{
$ch = curl_init();
@ -66,37 +90,40 @@ class SendSMSclass
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_HTTPHEADER, $optional_headers);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
/**
* Méthode privée pour permettre l'usage de liens courts
*
* Il faut identifier les liens dans le texte et les substituer par le tag prévu ```<-short->```,
* puis indiquer à l'API les liens devant être raccourcis ```<links>lien</links>```,
* que l'API calculera et placera à la place du tag ```<-short->```.
* puis indiquer à l'API les liens devant être raccourcis par un tableau links.
* L'API les calculera et les placera à la place du tag ```<-short->```.
*
* @link https://dev.smsfactor.com/fr/api/sms/envoi/liens-courts
*
* @param string $message
* Le texte du SMS
* @return string $message
* Un nouveau formatage du texte et l'ajout de balises si nécessaire
* @uses string $this->message
* Le texte du SMS
* @return array $message
* Un nouveau formatage du texte en tableau 'text' s'il y a des liens 'links'
*/
private function texte_avec_liens_courts() {
// Masque
$regex = '@([http|ftp|https]+://[a-z0-9?=:&\./+,%#_-]+)@i';
preg_match_all($regex,$this->message,$trouvaille,PREG_SET_ORDER);
$links = '';
$links = array();
$text = $this->message;
preg_match_all($regex,$text,$trouvaille,PREG_SET_ORDER);
if ($trouvaille){
foreach ($trouvaille as $key => $value) {
$links .= "<links>$value[0]</links>";
$reformatage = str_replace($value[0], '<-short->', $this->message);
$links[] = $value[0];
$text = str_replace($value[0], '<-short->', $text);
}
return "<text><![CDATA[${reformatage}]]></text>" . $links;
return ['text' => $text, 'links' => $links];
}
return "<text>" . $this->message . "</text>";
return ['text' => $text];
}
}

@ -66,6 +66,11 @@ $(function(){
<label for="login_smsfactor"><:sms:mot_de_passe:></label>
<input type="password" name="mdp_smsfactor" value="[(#ENV{mdp_smsfactor})]" size="58">
</div>
<div class="editer">
<p class="explication"><:sms:explication_token:></p>
<label for="token_smsfactor"><:sms:token_smsfactor:></label>
<input type="text" name="token_smsfactor" value="[(#ENV{token_smsfactor})]" size="58">
</div>
<div class="editer">
<p class="explication"><:sms:explication_expediteur:></p>
<label for="expediteur_smsfactor"><:sms:expediteur:></label>

@ -11,10 +11,9 @@ function formulaires_tester_envoi_sms_charger_dist($redirect = '') {
$destinataire = _TEST_SMS_DEST;
}
}
$texte ='Jean Valjean, pense à ton rendez-vous avec Victor Hugo en date du lundi 5 septembre 2022 à 23h00 ! lieu : http://localhost:8888/spip.php?victor_hugo1';
$valeurs = array(
'tel' => $destinataire[0],
'message' => $texte, //_T('sms:sms_test'),
'message' => _T('sms:sms_test'),
);
return $valeurs;
@ -43,22 +42,6 @@ function formulaires_tester_envoi_sms_verifier_dist($redirect = '') {
} else {
$erreurs['via_appel_charger_fonction'] = 'envoye';
}
// echo "<b>Le balisage XML du message sera le suivant :</b><xmp>" . texte_avec_liens_courts($message) ."</xmp>";
return $erreurs;
}
function texte_avec_liens_courts($message) {
// Masque
$regex = '@([http|ftp|https]+://[a-z0-9?=:&\./+,%#_-]+)@i';
preg_match_all($regex,$message,$trouvaille,PREG_SET_ORDER);
$links = '';
if ($trouvaille){
foreach ($trouvaille as $key => $value) {
$links .= "<links>$value[0]</links>";
$reformatage = str_replace($value[0], '<-short->', $message);
}
return "<text><![CDATA[${reformatage}]]></text>" . $links;
}
return "<text>".$message."</text>";
}

@ -51,6 +51,7 @@ function smsfactor($message,$destinataire,$options = array()) {
$username = lire_config('sms/login_smsfactor');
$password = lire_config('sms/mdp_smsfactor');
$options['sender'] = $options['sender'] ?? lire_config('sms/expediteur_smsfactor');
$options['token'] = $options['token'] ?? lire_config('sms/token_smsfactor');
include_spip('inc/filtres');
$message = textebrut($message);
@ -64,44 +65,39 @@ function smsfactor($message,$destinataire,$options = array()) {
}
}
$retour = $SENDSMS->SendSMS($username,$password,$options,$message,$destinataire);
libxml_use_internal_errors(true);
try{
$reponse = new SimpleXMLElement($retour);
if ( $reponse->message == "OK" ) {
if (count($destinataire)) {
$cost = $reponse->cost;
$sent = $reponse->sent;
$nbr_sms = 0;
if ($sent != 0) {
$nbr_sms = $cost / $sent;
}
$type_sms = '';
if (array_key_exists('type_sms', $options)) {
$type_sms = $options['type_sms'];
}
foreach ($destinataire as $tel) {
$set = array(
'telephone' => md5($tel),
'date' => date("Y-m-d H:i:s"),
'message' => $message,
'nbr_sms' => $nbr_sms,
'type_sms' => $type_sms
);
sql_insertq('spip_sms_logs',$set);
}
$reponse = $SENDSMS->SendSMS($username,$password,$options,$message,$destinataire);
$reponse = json_decode($reponse);
if ( $reponse->message == "OK" ) {
if (count($destinataire)) {
$cost = $reponse->cost;
$sent = $reponse->sent;
$nbr_sms = 0;
if ($sent != 0) {
$nbr_sms = $cost / $sent;
}
$type_sms = '';
if (array_key_exists('type_sms', $options)) {
$type_sms = $options['type_sms'];
}
foreach ($destinataire as $tel) {
$set = array(
'telephone' => md5($tel),
'date' => date("Y-m-d H:i:s"),
'message' => $message,
'nbr_sms' => $nbr_sms,
'type_sms' => $type_sms
);
sql_insertq('spip_sms_logs',$set);
}
return true;
} else {
spip_log('Le message ' . $message . ' pour ' . implode(',', $destinataire) . ' à le statut : ' . $reponse->message, 'sms_error');
return false;
}
} catch (Exception $e){
spip_log('le message ' . $message . ' pour ' . implode(',' , $destinataire) . ' est en erreur' , 'sms_error');
spip_log($e , 'sms_error');
spip_log('Le message ' . $message . ' pour ' . implode(',', $destinataire) . ' à pour retour : ' . print_r($reponse,true), 'sms_error.' . _LOG_DEBUG);
return true;
} else {
spip_log('Le message ' . $message . ' pour ' . implode(',', $destinataire) . ' à pour retour : ' . print_r($reponse,true), 'sms_error.' . _LOG_INFO_IMPORTANTE);
return false;
}
}

Loading…
Cancel
Save