PHPackages                             pmill/clockwork-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. pmill/clockwork-php

ActiveLibrary

pmill/clockwork-php
===================

1.3.2(10y ago)092PHP

Since Dec 2Pushed 10y ago1 watchersCompare

[ Source](https://github.com/pmill/clockwork-php)[ Packagist](https://packagist.org/packages/pmill/clockwork-php)[ RSS](/packages/pmill-clockwork-php/feed)WikiDiscussions master Synced today

READMEChangelog (1)DependenciesVersions (3)Used By (0)

Clockwork SMS API Wrapper for PHP
=================================

[](#clockwork-sms-api-wrapper-for-php)

This wrapper lets you interact with Clockwork without the hassle of having to create any XML or make HTTP calls.

What's Clockwork?
-----------------

[](#whats-clockwork)

[Clockwork](http://www.clockworksms.com/) is Mediaburst's SMS API.

### Prerequisites

[](#prerequisites)

- A [Clockwork](http://www.clockworksms.com/) account

Usage
-----

[](#usage)

Require the Clockwork library:

```
require 'class-Clockwork.php';
```

### Sending a message

[](#sending-a-message)

```
$clockwork = new Clockwork( $API_KEY );
$message = array( 'to' => '441234567891', 'message' => 'This is a test!' );
$result = $clockwork->send( $message );
```

### Sending multiple messages

[](#sending-multiple-messages)

We recommend you use batch sizes of 500 messages or fewer. By limiting the batch size it prevents any timeouts when sending.

```
$clockwork = new Clockwork( $API_KEY );
$messages = array(
    array( 'to' => '441234567891', 'message' => 'This is a test!' ),
    array( 'to' => '441234567892', 'message' => 'This is a test 2!' )
);
$results = $clockwork->send( $messages );
```

### Handling the response

[](#handling-the-response)

The responses come back as arrays, these contain the unique Clockwork message ID, whether the message worked (`success`), and the original SMS so you can update your database.

```
Array
(
    [id] => VE_164732148
    [success] => 1
    [sms] => Array
        (
            [to] => 441234567891
            [message] => This is a test!
        )

)

```

If you send multiple SMS messages in a single send, you'll get back an array of results, one per SMS.

The result will look something like this:

```
Array
(
    [0] => Array
        (
            [id] => VI_143228951
            [success] => 1
            [sms] => Array
                (
                    [to] => 441234567891
                    [message] => This is a test!
                )

        )

    [1] => Array
        (
            [id] => VI_143228952
            [success] => 1
            [sms] => Array
                (
                    [to] => 441234567892
                    [message] => This is a test 2!
                )

        )

)

```

If a message fails, the reason for failure will be set in `error_code` and `error_message`.

For example, if you send to invalid phone number "abc":

```
Array
(
    [error_code] => 10
    [error_message] => Invalid 'To' Parameter
    [success] => 0
    [sms] => Array
        (
            [to] => abc
            [message] => This is a test!
        )

)

```

### Checking your balance

[](#checking-your-balance)

Check your available SMS balance:

```
$clockwork = new Clockwork( $API_KEY );
$clockwork->checkBalance();
```

This will return:

```
Array
(
    [symbol] => £
    [balance] => 351.91
    [code] => GBP
)

```

### Handling Errors

[](#handling-errors)

The Clockwork wrapper will throw a `ClockworkException` if the entire call failed.

```
try
{
    $clockwork = new Clockwork( 'invalid_key' );
    $message = array( 'to' => 'abc', 'message' => 'This is a test!' );
    $result = $clockwork->send( $message );
}
catch( ClockworkException $e )
{
    print $e->getMessage();
    // Invalid API Key
}
```

### Advanced Usage

[](#advanced-usage)

This class has a few additional features that some users may find useful, if these are not set your account defaults will be used.

### Optional Parameters

[](#optional-parameters)

See the [Clockwork Documentation](http://www.clockworksms.com/doc/clever-stuff/xml-interface/send-sms/) for full details on these options.

- $from \[string\]

    The from address displayed on a phone when they receive a message
- $long \[boolean\]

    Enable long SMS. A standard text can contain 160 characters, a long SMS supports up to 459.
- $truncate \[nullable boolean\]

    Truncate the message payload if it is too long, if this is set to false, the message will fail if it is too long.
- $invalid\_char\_action \[string\]

    What to do if the message contains an invalid character. Possible values are

    - error - Fail the message
    - remove - Remove the invalid characters then send
    - replace - Replace some common invalid characters such as replacing curved quotes with straight quotes
- $ssl \[boolean, default: true\]

    Use SSL when making an HTTP request to the Clockwork API

### Setting Options

[](#setting-options)

#### Global Options

[](#global-options)

Options set on the API object will apply to all SMS messages unless specifically overridden.

In this example both messages will be sent from Clockwork:

```
$options = array( 'from' => 'Clockwork' );
$clockwork = new Clockwork( $API_KEY, $options );
$messages = array(
    array( 'to' => '441234567891', 'message' => 'This is a test!' ),
    array( 'to' => '441234567892', 'message' => 'This is a test 2!' )
);
$results = $clockwork->send( $messages );
```

#### Per-message Options

[](#per-message-options)

Set option values individually on each message.

In this example, one message will be from Clockwork and the other from 84433:

```
$clockwork = new Clockwork( $API_KEY, $options );
$messages = array(
    array( 'to' => '441234567891', 'message' => 'This is a test!', 'from' => 'Clockwork' ),
    array( 'to' => '441234567892', 'message' => 'This is a test 2!', 'from' => '84433' )
);
$results = $clockwork->send( $messages );
```

### SSL Errors

[](#ssl-errors)

Due to the huge variety of PHP setups out there a small proportion of users may get PHP errors when making API calls due to their SSL configuration.

The errors will generally look something like this:

```
Fatal error:
Uncaught exception 'Exception' with message 'HTTP Error calling Clockwork API
HTTP Status: 0
cURL Erorr: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed'

```

If you're seeing this error there are two fixes available, the first is easy, simply disable SSL on Clockwork calls. Alternatively you can setup your PHP install with the correct root certificates.

#### Disable SSL on Clockwork calls

[](#disable-ssl-on-clockwork-calls)

```
$options = array( 'ssl' => false );
$clockwork = new Clockwork( $API_KEY, $options );
```

#### Setup SSL root certificates on your server

[](#setup-ssl-root-certificates-on-your-server)

This is much more complicated as it depends on your setup, however there are many guides available online. Try a search term like "windows php curl root certificates" or "ubuntu update root certificates".

License
=======

[](#license)

This project is licensed under the ISC open-source license.

A copy of this license can be found in license.txt.

Contributing
============

[](#contributing)

If you have any feedback on this wrapper drop us an email to .

The project is hosted on GitHub at . If you would like to contribute a bug fix or improvement please fork the project and submit a pull request.

###  Health Score

28

—

LowBetter than 57% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 94.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3762d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/fb0ec83fead40be88e6b0e3c143eae8fb3510c6e78417b271c9ed962863316cf?d=identicon)[pmill](/maintainers/pmill)

---

Top Contributors

[![jfi](https://avatars.githubusercontent.com/u/663625?v=4)](https://github.com/jfi "jfi (18 commits)")[![pmill](https://avatars.githubusercontent.com/u/3912365?v=4)](https://github.com/pmill "pmill (1 commits)")

### Embed Badge

![Health badge](/badges/pmill-clockwork-php/health.svg)

```
[![Health](https://phpackages.com/badges/pmill-clockwork-php/health.svg)](https://phpackages.com/packages/pmill-clockwork-php)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
