SMSAPI gateway (#920)
						commit
						6a869aff18
					
				| 
						 | 
				
			
			@ -60,6 +60,7 @@ The following SMS gateways are currently available:
 | 
			
		|||
* SolutionsInfini - <https://solutionsinfini.com/>
 | 
			
		||||
* Plivo - <https://www.plivo.com/>
 | 
			
		||||
* Callr - <https://www.callr.com/>
 | 
			
		||||
* SMSAPI - <https://www.smsapi.com/en>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -85,6 +85,10 @@ The following people have contributed to the development of PHP Server Monitor:
 | 
			
		|||
 | 
			
		||||
  * Nexmo SMS gateway
 | 
			
		||||
 | 
			
		||||
* Mateusz Małek - https://github.com/mateuszmalek
 | 
			
		||||
 | 
			
		||||
  * SMSAPI gateway
 | 
			
		||||
 | 
			
		||||
Translators
 | 
			
		||||
+++++++++++
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -779,6 +779,9 @@ namespace {
 | 
			
		|||
            case 'solutionsinfini':
 | 
			
		||||
                $sms = new \psm\Txtmsg\SolutionsInfini();
 | 
			
		||||
                break;
 | 
			
		||||
            case 'smsapi':
 | 
			
		||||
                $sms = new \psm\Txtmsg\SMSAPI();
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // copy login information from the config file
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,149 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * PHP Server Monitor
 | 
			
		||||
 * Monitor your servers and websites.
 | 
			
		||||
 *
 | 
			
		||||
 * This file is part of PHP Server Monitor.
 | 
			
		||||
 * PHP Server Monitor is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 3 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * PHP Server Monitor is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with PHP Server Monitor.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 *
 | 
			
		||||
 * @package     phpservermon
 | 
			
		||||
 * @author      Mateusz Małek <tajgeer@gmail.com>
 | 
			
		||||
 * @copyright   Copyright (c) 2008-2017 Pepijn Over <pep@mailbox.org>
 | 
			
		||||
 * @license     http://www.gnu.org/licenses/gpl.txt GNU GPL v3
 | 
			
		||||
 * @version     Release: @package_version@
 | 
			
		||||
 * @link        http://www.phpservermonitor.org/
 | 
			
		||||
 * @since       phpservermon 3.5
 | 
			
		||||
 **/
 | 
			
		||||
 | 
			
		||||
namespace psm\Txtmsg;
 | 
			
		||||
 | 
			
		||||
class SMSAPI extends Core
 | 
			
		||||
{
 | 
			
		||||
    const VARIANT_INTERNATIONAL = 1;
 | 
			
		||||
    const VARIANT_POLISH = 2;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * SMSAPI comes with two variants - designed for polish or international customers.
 | 
			
		||||
     *
 | 
			
		||||
     * @var int
 | 
			
		||||
     */
 | 
			
		||||
    private $variant = self::VARIANT_INTERNATIONAL;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Name of the sender. As a default the sender name is set to "Test".
 | 
			
		||||
     * Only verified names are being accepted.
 | 
			
		||||
     * Sender name may be set after logging into Customer Portal on Sendernames.
 | 
			
		||||
     * @see https://www.smsapi.com/docs/#2-single-sms
 | 
			
		||||
     *
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $originator;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Token used to authenticate in SMSAPI system.
 | 
			
		||||
     * @see https://www.smsapi.com/docs/#authentication
 | 
			
		||||
     *
 | 
			
		||||
     * @var string
 | 
			
		||||
     */
 | 
			
		||||
    protected $password;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Send sms using the SMSAPI
 | 
			
		||||
     *
 | 
			
		||||
     * @var string $message
 | 
			
		||||
     * @var array $this->recipients
 | 
			
		||||
     * @var array $this->originator
 | 
			
		||||
     * @var string $this->password
 | 
			
		||||
     * @var array $recipients_chunk
 | 
			
		||||
     * @var string $host
 | 
			
		||||
     *
 | 
			
		||||
     * @var mixed $result
 | 
			
		||||
     * @var array $headers
 | 
			
		||||
     *
 | 
			
		||||
     * @var int $success
 | 
			
		||||
     * @var string $error
 | 
			
		||||
     *
 | 
			
		||||
     * @return bool|string
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    public function sendSMS($message)
 | 
			
		||||
    {
 | 
			
		||||
        $tld = ($this->variant === static::VARIANT_INTERNATIONAL) ? "com" : "pl";
 | 
			
		||||
        $host = "api.smsapi.{$tld}";
 | 
			
		||||
        $backupHost = "api2.smsapi.{$tld}";
 | 
			
		||||
 | 
			
		||||
        // One user at a time.
 | 
			
		||||
        $recipients_chunk = array_chunk($this->recipients, 1);
 | 
			
		||||
        foreach ($recipients_chunk as $recipient) {
 | 
			
		||||
            try {
 | 
			
		||||
                $response = $this->processSendOperation($host, $recipient, $message);
 | 
			
		||||
            } catch (\RuntimeException $e) {
 | 
			
		||||
                try {
 | 
			
		||||
                    $response = $this->processSendOperation($backupHost, $recipient, $message);
 | 
			
		||||
                } catch (\RuntimeException $e) {
 | 
			
		||||
                    return "({$recipient}) " . $e->getMessage();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (isset($response->error)) {
 | 
			
		||||
                return $response->message;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return 1;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Perform actual SMS sending operation
 | 
			
		||||
     *
 | 
			
		||||
     * @param $host
 | 
			
		||||
     * @param $recipient
 | 
			
		||||
     * @param $message
 | 
			
		||||
     * @return object
 | 
			
		||||
     * @throws RuntimeException
 | 
			
		||||
     */
 | 
			
		||||
    private function processSendOperation($host, $recipient, $message)
 | 
			
		||||
    {
 | 
			
		||||
        $ch = curl_init();
 | 
			
		||||
        curl_setopt($ch, CURLOPT_URL, "https://{$host}/sms.do");
 | 
			
		||||
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
 | 
			
		||||
            "access_token" => $this->password,
 | 
			
		||||
            "from" => $this->originator,
 | 
			
		||||
            "to" => $recipient,
 | 
			
		||||
            "message" => $message,
 | 
			
		||||
            "encoding" => "utf-8",
 | 
			
		||||
            "normalize" => "1",
 | 
			
		||||
            "format" => "json"
 | 
			
		||||
        )));
 | 
			
		||||
        curl_setopt($ch, CURLOPT_POST, 1);
 | 
			
		||||
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | 
			
		||||
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
 | 
			
		||||
 | 
			
		||||
        $result = curl_exec($ch);
 | 
			
		||||
 | 
			
		||||
        $error = false;
 | 
			
		||||
        if (curl_errno($ch)) {
 | 
			
		||||
            $error = curl_error($ch);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        curl_close($ch);
 | 
			
		||||
 | 
			
		||||
        if ($error !== false) {
 | 
			
		||||
            throw new \RuntimeException($error);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return json_decode($result);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue