Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Php Client Laravel Package

smsapi/php-client

PHP client library for SMSAPI, providing a simple way to send SMS and manage messaging features from PHP applications. Suitable for integrating SMS notifications and related services into Laravel or custom PHP projects.

View on GitHub
Deep Wiki
Context7

SMSAPI PHP Client

Build Status Packagist - latest version Packagist - downloads Packagist - license

Version 1.8.7 available here

SMSAPI.COM API documentation

SMSAPI.PL API documentation

Requirements

Install package with dependencies

Execute: composer require smsapi/php-client

How to pick a service

Depending on which of SMSAPI service your account is, you should pick it calling one of a method from examples below:

PSR-17 and PSR-18

Starting from version 3, SMSAPI PHP Client supports PSR-17 and PSR-18 compliant HTTP clients. That way this library is independent of client of your choice. You have to provide HTTP client, request factory and stream factory to use our library.

For your convenience we provide an adapter for Curl. To use it you have to enable PHP curl extension and install some HTTP helpers:

composer require guzzlehttp/psr7:^1

Example below shows how to make use of that adapter (pay attention to namespace Smsapi\Client\Curl):

<?php

declare(strict_types=1);

use Smsapi\Client\Curl\SmsapiHttpClient;

require_once 'vendor/autoload.php';

$client = new SmsapiHttpClient();

If your are not willing to use Curl as HTTP client then you have to provide your own HTTP client, request factory and stream factory, as in example below (pay attention to namespace Smsapi\Client):

<?php

declare(strict_types=1);

use Psr\Http\Client\ClientInterface;
use Psr\Http\Message\RequestFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
use Smsapi\Client\SmsapiHttpClient;

require_once 'vendor/autoload.php';

/**
 * @var ClientInterface $httpClient
 * @var RequestFactoryInterface $requestFactory
 * @var StreamFactoryInterface $streamFactory
 */
require_once 'your-own-psr18-stuff.php';

$client = new SmsapiHttpClient($httpClient, $requestFactory, $streamFactory);

All following examples consider you have client well-defined in client.php file.

How to use SMSAPI.COM service?

<?php

declare(strict_types=1);

use Smsapi\Client\SmsapiClient;

require_once 'vendor/autoload.php';

/**
 * @var SmsapiClient $client
 */
require_once 'client.php';

$apiToken = '0000000000000000000000000000000000000000';

$service = $client->smsapiComService($apiToken);

How to use SMSAPI.PL service?

<?php

declare(strict_types=1);

use Smsapi\Client\SmsapiClient;

require_once 'vendor/autoload.php';

/**
 * @var SmsapiClient $client
 */
require_once 'client.php';

$apiToken = '0000000000000000000000000000000000000000';

$service = $client->smsapiPlService($apiToken);

How to use SMSAPI.SE or SMSAPI.BG services?

<?php

declare(strict_types=1);

use Smsapi\Client\SmsapiClient;

require_once 'vendor/autoload.php';

/**
 * @var SmsapiClient $client
 */
require_once 'client.php';

$apiToken = '0000000000000000000000000000000000000000';
$uri = 'https://smsapi.io/';

$service = $client->smsapiComServiceWithUri($apiToken, $uri);

How to use service business features?

All following examples consider you have an account on SMSAPI.COM and service has been setup in service.php file.

How to use ping feature?

<?php

declare(strict_types=1);

use Smsapi\Client\Service\SmsapiComService;

/** @var SmsapiComService $service */
require_once 'service.php';

$result = $service->pingFeature()
    ->ping();

if ($result->authorized) {
    echo 'Authorized';
} else {
    echo 'Not authorized';
}

How to send a SMS?

<?php

declare(strict_types=1);

use Smsapi\Client\Service\SmsapiComService;
use Smsapi\Client\Feature\Sms\Bag\SendSmsBag;

/** @var SmsapiComService $service */
require_once 'service.php';

$sms = SendSmsBag::withMessage('someone phone number', 'some message');

$service->smsFeature()
    ->sendSms($sms);

How to use request parameters?

Request parameters are represented in a form of data transfer object. DTOs can be found by searching for 'bag' postfixed classes. Each bag may contain required and optional parameters.

Required parameters

Required parameters are that class public properties, usually accessible via some form of a setter or named constructor. Each parameter can be also set directly by setting bag property, as in example:

How to change SMS encoding?
<?php

declare(strict_types=1);

use Smsapi\Client\Feature\Sms\Bag\SendSmsBag;

$sms = SendSmsBag::withMessage('someone phone number', 'some message');
$sms->encoding = 'utf-8';

Optional parameters

Some of request's optional parameters have been described by docblock's '@property' annotation. You can always add any not documented here optional parameter by setting dynamic property to 'bag'. Camel case property names are being converted to snake case on the fly.

How to send a SMS with optional from field?
<?php

declare(strict_types=1);

use Smsapi\Client\Service\SmsapiComService;
use Smsapi\Client\Feature\Sms\Bag\SendSmsBag;

/** @var SmsapiComService $service */
require_once 'service.php';

$sms = SendSmsBag::withMessage('someone phone number', 'some message');
$sms->from = 'Test';

$service->smsFeature()
    ->sendSms($sms);

For more usage examples take a look at client test suite.

How to use additional features?

How to use proxy server?

To use proxy server you have to define it with your HTTP client.

How to log requests and responses?

Set logger to SmsapiHttpClient instance.

<?php

declare(strict_types=1);

use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
use Smsapi\Client\SmsapiClient;

require_once 'vendor/autoload.php';

/**
 * @var SmsapiClient $client
 */
require_once 'client.php';

$logger = new class() implements LoggerInterface
{
    use LoggerTrait;
    
    public function log($level, $message, array $context = [])
    {
        var_dump($level, $message, $context);
    }
};

$client->setLogger($logger);

How to test package

Copy phpunit.dist.xml to phpunit.xml. You may adjust it to your needs then.

Copy tests-resources/config/config.dist.yml to tests-resources/config/config.yml. Fill in SMSAPI service connection data.

How to run unit tests

Unit tests are included into package build process and run against its current version on every commit (see workflow Tests). You can run those tests locally with ease using provided Docker configuration, simply run:

make test-suite SUITE="unit"

How to run integration tests

Note that integration test works within an account you have configured in tests-resources/config/config.yml. Although those test have been written to self-cleanup on exit, in case of failure some trash data may stay. Use it with caution.

make test-suite SUITE="integration"

How to run feature tests

Feature test groups are defined in phpunit.dist.xml. To run tests execute:

make test-suite SUITE="feature-contacts"

How to run tests against PHP8

To run any of mentioned above against PHP8 use make targets with php8 suffix. See Makefile.php8.

Docs & Infos

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
besmartand-pro/php-quality-config
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity