Files
getgreen-backend/app/Api/Sms.php

103 lines
2.8 KiB
PHP
Executable File

<?php
namespace App\Api;
use GuzzleHttp\Client;
class Sms
{
const URL = '';
const ORIGINATOR = '';
protected $client;
public function __construct()
{
$this->client = new Client();
}
public function send(int $phone, string $message)
{
$data = [
'messages' => [
[
'recipient' => $phone,
'message-id' => time(),
'sms' => [
'originator' => '3700',
'content' => [
'text' => $message
]
]
]
]
];
$data_string = json_encode($data);
$username = env("SMS_USERNAME");
$password = env("SMS_PASSWORD");
$url = env('SMS_URL');
$debug = [
'ok' => false,
'url' => $url,
'username' => $username,
'phone' => $phone,
];
if (!$url || !$username || !$password) {
$debug['error_stage'] = 'env_missing';
$debug['missing'] = [
'SMS_URL' => (bool)$url,
'SMS_USERNAME' => (bool)$username,
'SMS_PASSWORD' => (bool)$password,
];
return $debug;
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 25);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
curl_setopt(
$ch,
CURLOPT_HTTPHEADER,
[
'Content-Type: application/json',
'Accept: application/json',
'Content-Length: ' . strlen($data_string),
]
);
$result = curl_exec($ch);
$debug['curl_errno'] = curl_errno($ch);
$debug['curl_error'] = curl_error($ch);
$debug['http_code'] = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
$debug['curl_info'] = curl_getinfo($ch);
$debug['response_head'] = is_string($result) ? mb_substr($result, 0, 2000) : $result;
curl_close($ch);
if ($debug['curl_errno'] !== 0) {
$debug['error_stage'] = 'curl_exec';
return $debug;
}
if ($debug['http_code'] < 200 || $debug['http_code'] >= 300) {
$debug['error_stage'] = 'http_non_2xx';
return $debug;
}
$debug['ok'] = true;
$debug['error_stage'] = null;
return $debug;
}
}