PHPackages                             kopokopo/k2-connect-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. [Utility &amp; Helpers](/categories/utility)
4. /
5. kopokopo/k2-connect-php

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

kopokopo/k2-connect-php
=======================

Kopokopo's php SDK

v2.0.0(1mo ago)61.9k27[4 issues](https://github.com/kopokopo/k2-connect-php/issues)[2 PRs](https://github.com/kopokopo/k2-connect-php/pulls)MITPHPPHP ^7.4 || ^8.0CI failing

Since Apr 8Pushed 1mo ago11 watchersCompare

[ Source](https://github.com/kopokopo/k2-connect-php)[ Packagist](https://packagist.org/packages/kopokopo/k2-connect-php)[ Docs](https://github.com/kopokopo/k2-connect-php)[ RSS](/packages/kopokopo-k2-connect-php/feed)WikiDiscussions master Synced today

READMEChangelog (6)Dependencies (4)Versions (13)Used By (0)

Kopokopo PHP SDK
================

[](#kopokopo-php-sdk)

[![Latest Stable Version](https://camo.githubusercontent.com/c107e42cf77ed3b3e1de73456c5c9b56719983e37b331a0ef6cba07075ced086/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b6f706f6b6f706f2f6b322d636f6e6e6563742d706870)](https://packagist.org/packages/kopokopo/k2-connect-php)

This is a module to assist php developers in consuming Kopokopo's API

Installation
------------

[](#installation)

You can install the PHP SDK via composer.

The recommended way to install the SDK is with Composer.

```
composer require kopokopo/k2-connect-php

```

Initialisation
--------------

[](#initialisation)

The package should be configured with your client id and client secret which you can get from your account on the kopokopo's app

```
//Store your client id and client secret as environment variables

//Including the kopokopo sdk
use Kopokopo\SDK\K2;

// do not hard code these values
$options = [
    'clientId' => 'YOUR_CLIENT_ID',
    'clientSecret' => 'YOUR_CLIENT_SECRET',
    'apiKey' => 'YOUR_API_KEY',
    'baseUrl' => 'https://sandbox.kopokopo.com'
];

$K2 = new K2($options);
```

### After initialization, you can get instances of offered services as follows:

[](#after-initialization-you-can-get-instances-of-offered-services-as-follows)

- [Tokens](#tokenservice) : `$tokens = $K2->TokenService();`
- [Webhooks](#webhooks) : `$webhooks = $K2->Webhooks();`
- [STK PUSH](#stkservice) : `$stk = $K2->StkService();`
- [External Recipient](#externalrecipientservice) : `$externalRecipientService = $K2->ExternalRecipientService();`
- [Settlement Transfer](#settlementtransferservice) : `$transfer = $K2->SettlementTransferService();`
- [SendMoneyService](#SendMoneyService) : `$sendMoney = $K2->SendMoneyService();`
- [PollingService](#pollingservice) : `$polling = $K2->PollingService();`
- [ReversalService](#ReversalService): `reversalService = $K2->ReversalService();`
- [PaymentLinkService](#PaymentLinkService): `paymentLinkService = $K2->PaymentLinkService();`

Usage
-----

[](#usage)

### Tokens

[](#tokens)

You will need to pass an access token when sending data to Kopokopo's API.

This will return `accessToken` and `expiresIn` values

```
use Kopokopo\SDK\K2;

// Do not hard code these values
$options = [
  'clientId' => 'YOUR_CLIENT_ID',
  'clientSecret' => 'YOUR_CLIENT_SECRET',
  'apiKey' => 'YOUR_API_KEY',
  'baseUrl' => 'https://sandbox.kopokopo.com'
];

$K2 = new K2($options);

// Get one of the services
$tokens = $K2->TokenService();

// Use the service
$result = $tokens->getToken();

//print the result
print_r($result);
```

### Webhooks

[](#webhooks)

- Consuming

```
// TODO: review this
$router->map('POST', '/webhook', function () {
    global $K2;
    global $response;

    $webhooks = $K2->Webhooks();

    $json_str = file_get_contents('php://input');
    var_dump($json_str);

    $response = $webhooks->webhookHandler($json_str, $_SERVER['HTTP_X_KOPOKOPO_SIGNATURE']);

    echo json_encode($response);
});
```

- Subscription

```
$webhooks = $K2->Webhooks();

//To subscribe to a webhook
$response = $webhooks->subscribe([
    'eventType' => 'buygoods_transaction_received',
    'url' => 'http://localhost:8000/webhook',
    'scope' => 'till',
    'scopeReference' => '000000',
    'accessToken' => 'my_access_token',
    'enableDarajaPayload' => 'false'
]);

print_r($response);
```

### STK PUSH

[](#stk-push)

```
$stk = $K2->StkService();
$result = $stk->initiateIncomingPayment([
                'paymentChannel' => 'M-PESA STK Push',
                'tillNumber' => 'K000000',
                'firstName' => 'Jane',
                'lastName' => 'Doe',
                'phoneNumber' => '0712345678',
                'amount' => 3455,
                'email' => 'example@example.com',
                'callbackUrl' => 'http://localhost:8000/test',
                'accessToken' => 'myRand0mAcc3ssT0k3n',
            ]);
print_r($result);
```

For other usage examples check out the [example app](https://github.com/kopokopo/k2-connect-php/tree/master/example) available in this project.

Services
--------

[](#services)

The only supported ISO currency code at the moment is: `KES`

### `TokenService`

[](#tokenservice)

- `$TokenService->getToken()` to get an access token.

    - The response will have the following structure

    ```
    [ 'status' => 'success',
      'data' => [
        'accessToken' => 'GT6576QGYdYh8i5s8DnxUQVphFewh-8eiO2',
        'tokenType' => 'Bearer',
        'expiresIn' => 3600,
        'createdAt' => '2021-04-06T13:49:50+03:00'
      ]
    ]
    ```

NB: The access token is required to send subsequent requests

- `$TokenService->revokeToken(['accessToken' => 'myRand0mAcc3ssT0k3n'])` to revoke an access token.

NB: The access token cannot be used to send subsequent requests

- `$TokenService->introspectToken(['accessToken' => 'myRand0mAcc3ssT0k3n'])` to introspect a token.
- `$TokenService->infoToken(['accessToken' => 'myRand0mAcc3ssT0k3n'])` to get more information on a token

### `StkService`

[](#stkservice)

- `$StkService->initiateIncomingPayment([ stkOptions ])`: `stkOptions`: An array of arrays containing the following keys:

    - `tillNumber`: Your online payments short code from Kopo Kopo's Dashboard `REQUIRED`
    - `firstName`: Customer's first name
    - `lastName`: Customer's last name
    - `phoneNumber`: Phone number to pull money from. `REQUIRED`
    - `email`: Customer's email address
    - `currency`: 3-digit ISO format currency code. `REQUIRED`
    - `amount`: Amount to charge. `REQUIRED`
    - `callbackUrl`: Url that the [result](#responsesandresults) will be posted to `REQUIRED`
    - `paymentChannel`: Payment channel. Default is: `"M-PESA STK Push"`. `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`
    - `metadata`: It is a hash containing a maximum of 5 key value pairs
- `$StkService->getStatus([location ])`:

    - `location`: The request location you get when you send a request
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`

For more information, please read

### `ExternalRecipientService`

[](#externalrecipientservice)

- `ExternalRecipientService->addExternalRecipient([ externalRecipientOptions ])`: `externalRecipientOptions`: An array of arrays containing the following keys:

    - `type`: Recipient type `REQUIRED`
        - Mobile Wallet Recipient(`mobile_wallet`)
            - `firstName`: Pay recipient's first name `REQUIRED`
            - `lastName`: Pay recipient's last name `REQUIRED`
            - `phoneNumber`: Pay recipient's phone number `REQUIRED`
            - `email`: Pay recipient's email number
            - `network`: Pay recipient's network `REQUIRED`
        - Bank Account Recipient(`bank_account`)
            - `accountName`: Pay recipient's account name `REQUIRED`
            - `accountNumber`: Pay recipient's account number `REQUIRED`
            - `bankBranchRef`: Bank branch reference from the kopokopo dashboard `REQUIRED`
            - `settlementMethod`: Settlement method `REQUIRED`
        - External Till Recipient(`till`)
            - `tillNumber`: Pay recipient's till number `REQUIRED`
            - `tillName`: Pay recipient's till name `REQUIRED`
        - Paybill(`paybill`)
            - `paybillName`: Pay recipient's paybill name `REQUIRED`
            - `paybillNumber`: Pay recipient's paybill number `REQUIRED`
            - `paybillAccountNumber`: Pay recipient's account number `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`
- `ExternalRecipientService->getStatus([ location ])`:

    - `location`: The request location you get when you send a request
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`

For more information, please read

### `SettlementTransferService`

[](#settlementtransferservice)

- `SettlementTransferService->createMerchantBankAccount([ accountOpts ])`: `accountOpts`: An array of arrays containing the following keys:

    - `accountName`: Settlement Account Name `REQUIRED`
    - `bankBranchRef`: Settlement Bank Branch Reference `REQUIRED`
    - `accountNumber`: Settlement account number `REQUIRED`
    - `settlementMethod`: Settlement method `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`
- `SettlementTransferService->createMerchantWallet([ accountOpts ])`: `accountOpts`: An array of arrays containing the following keys:

    - `phoneNumber`: Phone number to settle to `REQUIRED`
    - `network`: Mobile money network to settle to `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`
- `SettlementTransferService->getStatus([ location ])`:

    - `location`: The request location you get when you send a request
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`

For more information, please read [api-docs#send\_money](https://api-docs.kopokopo.com/#send_money)

### `SendMoneyService`

[](#sendmoneyservice)

- `SendMoneyService->sendMoney([ sendMoneyOptions ])`: `sendMoneyOptions`: An associative array containing the following keys:

    - `destinations`: An array of nested associative arrays defining destination details.
    - `currency`: 3-digit ISO format currency code. `REQUIRED`
    - `sourceIdentifier`: The source of funds to transfer, i.e, till number or `null` for available balance.
    - `metadata`: It is a hash containing a maximum of 5 key-value pairs.
    - `callbackUrl`: URL that the result will be posted to. `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response. `REQUIRED`
- `SendMoneyService->getStatus([ statusOptions ])`: `statusOptions`: An associative array containing the following keys:

    - `location`: The request location you get when you send a request. `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response. `REQUIRED`
- For more information, please read [api-docs#send\_money](https://api-docs.kopokopo.com/#send_money)

### `PollingService`

[](#pollingservice)

- `PollingService->pollTransactions([ pollingOpts ])`: `pollingOpts`: An array of arrays containing the following keys:

    - `fromTime`: The starting time of the polling request
    - `toTime`: The end time of the polling request
    - `scope`: The scope of the polling request
    - `scopeReference`: The scope reference `REQUIRED for the 'Till' scope`
    - `callbackUrl`: Url that the [result](#responsesandresults) will be posted to `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`
- `PollingService->getStatus([ statusOpts ])`: `statusOpts`: An array of arrays containing the following keys:

    - `location`: The location url you got from the request `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response `REQUIRED`

This works the same for all requests that you get a location response.

For more information, please read [api-docs#polling](https://api-docs.kopokopo.com/#polling)

### `ReversalService`

[](#reversalservice)

- `ReversalService->initiateReversal([ reversalOptions ])`: `reversalOptions`: An associative array containing the following keys:

    - `transactionReference`: Reference of the transaction to be reversed. `REQUIRED`
    - `reason`: Reason for the reversal. `REQUIRED`
    - `metadata`: An associative array with a maximum of 5 key-value pairs.
    - `callbackUrl`: URL that the result will be posted to. `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response. `REQUIRED`
- `ReversalServices->getStatus([ statusOptions ])`: `statusOptions`An associative array containing the following keys:

    - `location`: The request location you get when you initiate a reversal request. `REQUIRED`
    - `accessToken`: Gotten from the [`TokenService`](#tokenservice) response. `REQUIRED`

### `PaymentLinkService`

[](#paymentlinkservice)

- `PaymentLinkService->createPaymentLink([ paymentLinkOptions ]):` `paymentLinkOptions`: An associative array containing the following keys:

    - `tillNumber`: Till number for the **M-PESA** or **Online Payments Account** that will receive the payment. `REQUIRED`
    - `currency`: 3-digit ISO format currency code. `REQUIRED`
    - `amount`: The amount the customer will pay. `REQUIRED`
    - `paymentReference`: The merchant internal reference for the payment.
    - `note`: Note for the customer as they make the payment.
    - `metadata`: An associative array with a maximum of 5 key pairs.
    - `callbackUrl`: URL that the payment link result will be posted to once a customer makes a payment. `REQUIRED`
    - `accessToken`: Gotten from the `TokenService` response. `REQUIRED`
- `PaymentLinkService->cancelPaymentLink([ cancellationOptions ])`: `cancellationOptions`: An associative array containing the following keys:

    - `location`: The request location you get when you send a payment link request. `REQUIRED`
    - `accessToken`: Gotten from the `TokenService` response. `REQUIRED`
- `PaymentLinkService->getStatus([ statusOptions ])`: `statusOptions`: An associative array containing the following keys:

    - `location`: The request location you get when you send a payment link request. `REQUIRED`
    - `accessToken`: Gotten from the `TokenService` response. `REQUIRED`

### Responses and Results

[](#responses-and-results)

- All the post requests are asynchronous apart from `TokenService`. This means that the result will be posted to your custom callback url when the request is complete. The immediate response of the post requests contain the `location` url of the request you have sent which you can use to query the status.

Note: The asynchronous results are processed like webhooks.

- To access the different parts of the response or webhook payload passed, use the following keys to access:

#### Token Response

[](#token-response)

- getToken() successful response

    - `acessToken`
    - `tokenType`
    - `expiresIn`
    - `createdAt`
- introspectToken() successful response

    - `active`
    - `scope`
    - `clientId`
    - `tokenType`
    - `exp` - expiring time
    - `iat` - initiated at
- infoToken() successful response

    - `scope`
    - `expiresIn`
    - `resourceOwnerId`
    - `applicationId`
    - `tokenType`
    - `createdAt`

#### Webhooks

[](#webhooks-1)

- Buygoods Received

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `resourceId`
    - `reference`
    - `originationTime`
    - `senderPhoneNumber`
    - `amount`
    - `currency`
    - `tillNumber`
    - `system`
    - `status`
    - `senderFirstName`
    - `senderMiddleName`
    - `senderLastName`
    - `linkSelf`
    - `linkResource`
- B2b transaction received

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `resourceId`
    - `reference`
    - `originationTime`
    - `sendingTill`
    - `amount`
    - `currency`
    - `tillNumber`
    - `system`
    - `status`
    - `linkSelf`
    - `linkResource`
- Merchant to merchant transaction received

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `resourceId`
    - `originationTime`
    - `sendingMerchant`
    - `amount`
    - `currency`
    - `status`
    - `linkSelf`
    - `linkResource`
- Buygoods transaction reversed

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `resourceId`
    - `reference`
    - `originationTime`
    - `senderPhoneNumber`
    - `amount`
    - `currency`
    - `tillNumber`
    - `system`
    - `status`
    - `senderFirstName`
    - `senderMiddleName`
    - `senderLastName`
    - `linkSelf`
    - `linkResource`
- Transfer completed webhook

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `resourceId`
    - `originationTime`
    - `amount`
    - `currency`
    - `status`
    - `disbursements`
    - `linkSelf`
    - `linkResource`
    - `destinationReference`
    - `destinationType`
    - if destination type is bank:

        - `settlementMethod`
        - `bankBranchRef`
        - `accountName`
        - `accountNumber`
    - if destination type is mobile wallet:

        - `firstName`
        - `lastName`
        - `phoneNumber`
        - `network`
- Customer created webhook

    - `id`
    - `topic`
    - `createdAt`
    - `eventType`
    - `firstName`
    - `middleName`
    - `lastName`
    - `phoneNumber`
    - `linkSelf`
    - `linkResource`

#### Results

[](#results)

- Send Money Result

    - `id`
    - `type`
    - `createdAt`
    - `status`
    - `sourcedIdentifier`
    - `destinations`
    - `currency`
    - `transferBatches`
    - `errors`
    - `metadata`
    - `linkSelf`
    - `callbackUrl`
- Stk Push Result

    - Successful result

        - `id`
        - `type`
        - `initiationTime`
        - `status`
        - `eventType`
        - `resourceId`
        - `reference`
        - `originationTime`
        - `senderPhoneNumber`
        - `amount`
        - `currency`
        - `tillNumber`
        - `system`
        - `senderFirstName`
        - `senderMiddleName`
        - `senderLastName`
        - `resourceStatus`
        - `errors`
        - `metadata`
        - `linkSelf`
        - `callbackUrl`
    - Unsuccessful result

        - `id`
        - `type`
        - `initiationTime`
        - `status`
        - `eventType`
        - `resource`
        - `errors`
        - `metadata`
        - `linkSelf`
        - `callbackUrl`
- Polling Result

    - `id`
    - `type`
    - `status`
    - `fromTime`
    - `toTime`
    - `scope`
    - `scopeReference`
    - `transactions`
    - `linkSelf`
    - `callbackUrl`
- Reversal Result

    - `id`
    - `type`
    - `transactionReference`
    - `status`
    - `reason`
    - `reversalBulkPayment`
    - `errors`
    - `metadata`
    - `createdAt`
    - `callbackUrl`
    - `linkSelf`
- Payment Link Result

    - `id`
    - `type`
    - `status`
    - `currency`
    - `amount`
    - `tillName`
    - `tillNumber`
    - `paymentReference`
    - `note`
    - `createdAt`
    - `paymentLink`
    - `errors`
    - `metadata`
    - `callbackUrl`
    - `linkSelf`

#### Status Payloads

[](#status-payloads)

- Webhook Subscription Status

    - `id`
    - `type`
    - `eventType`
    - `webhookUri`
    - `status`
    - `scope`
    - `scopeReference`
- Merchant Bank Account Status

    - `id`
    - `type`
    - `accountNumber`
    - `accountName`
    - `bankBranchRef`
    - `settlementMethod`
    - `status`
    - `accountReference`
- Merchant Mobile Wallet Status

    - `id`
    - `type`
    - `firstName`
    - `lastName`
    - `phoneNumber`
    - `network`
    - `status`
    - `accountReference`
- Pay Recipient Status

    - `id`
    - `type`
    - `recipientType`
    - `status`
    - `recipientReference`
    - If `recipientType == "Bank Account"`

        - `accountNumber`
        - `accountName`
        - `bankBranchRef`
        - `settlementMethod`
    - If `recipientType == "Mobile Wallet"`

        - `firstName`
        - `lastName`
        - `phoneNumber`
        - `network`
        - `email`
    - If `recipientType == "Till"`

        - `tillNumber`
        - `tillName`
    - If `recipientType == "Paybill"`

        - `paybillName`
        - `paybillNumber`
        - `paybillAccountNumber`
- Send Money Status

    - This payload is similar to `Send Money Result` payload
- Stk Push Status

    - Successful request
        - This payload is similar to the successful result
    - Failed request
        - This payload is similar to failed result
    - Pending request
        - `id`
        - `type`
        - `initiationTime`
        - `status`
        - `eventType`
        - `resource`
        - `errors`
        - `metadata`
        - `linkSelf`
        - `callbackUrl`
- Polling Status

    - This payload is the same as the `Polling` result payload
- Reversal Status

    - This payload is similar to `Reversal Result` payload
- Payment Link Status

    - This payload is similar to `Payment Link Result` payload

#### Error responses

[](#error-responses)

- `errorCode`
- `errorMessage`
- Token Error Responses

    - `error`
    - `errorDescription`

For more information on the expected payloads and error codes, please read the [api docs](https://api-docs.kopokopo.com)

Author
------

[](#author)

[Nicollet Njora](https://github.com/NicoNjora)

Contributions
-------------

[](#contributions)

We welcome those with open arms just make a pull request and we will review.

### Development

[](#development)

Run all tests:

```
$ composer install
$ php vendor/bin/phpunit tests --testdox
```

### Issues

[](#issues)

If you find a bug, please file an issue on [our issue tracker on GitHub](https://github.com/kopokopo/k2-connect-php/issues).

License
-------

[](#license)

k2-connect-php is MIT licensed. See [LICENSE](https://github.com/kopokopo/k2-connect-php/blob/master/LICENSE) for details.

Change log
----------

[](#change-log)

###  Health Score

51

—

FairBetter than 95% of packages

Maintenance76

Regular maintenance activity

Popularity31

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 59.3% 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

Every ~372 days

Recently: every ~449 days

Total

6

Last Release

49d ago

Major Versions

v1.4.0 → v2.0.02026-05-15

PHP version history (2 changes)v1.3.0PHP ^7.4

v1.4.0PHP ^7.4 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/0972078770445eadcaa427560400f241ac1fff55c4b1513f13b567e6363720cb?d=identicon)[niconjora](/maintainers/niconjora)

![](https://www.gravatar.com/avatar/986d411d098232429e9029328055270cbb407b4d75a3a1ef203b78307b80468c?d=identicon)[dondeng](/maintainers/dondeng)

---

Top Contributors

[![NicolletNjora](https://avatars.githubusercontent.com/u/59557529?v=4)](https://github.com/NicolletNjora "NicolletNjora (83 commits)")[![NicoNjora](https://avatars.githubusercontent.com/u/25723927?v=4)](https://github.com/NicoNjora "NicoNjora (27 commits)")[![Ginger-Stone](https://avatars.githubusercontent.com/u/33225248?v=4)](https://github.com/Ginger-Stone "Ginger-Stone (10 commits)")[![ngugimuchangi](https://avatars.githubusercontent.com/u/101399030?v=4)](https://github.com/ngugimuchangi "ngugimuchangi (10 commits)")[![gillerick](https://avatars.githubusercontent.com/u/37691932?v=4)](https://github.com/gillerick "gillerick (3 commits)")[![Wambui-Mwangi](https://avatars.githubusercontent.com/u/124131028?v=4)](https://github.com/Wambui-Mwangi "Wambui-Mwangi (2 commits)")[![Brian1011](https://avatars.githubusercontent.com/u/23728456?v=4)](https://github.com/Brian1011 "Brian1011 (2 commits)")[![not-diba](https://avatars.githubusercontent.com/u/38106494?v=4)](https://github.com/not-diba "not-diba (2 commits)")[![dondeng](https://avatars.githubusercontent.com/u/793559?v=4)](https://github.com/dondeng "dondeng (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/kopokopo-k2-connect-php/health.svg)

```
[![Health](https://phpackages.com/badges/kopokopo-k2-connect-php/health.svg)](https://phpackages.com/packages/kopokopo-k2-connect-php)
```

###  Alternatives

[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.3k543.5M2.6k](/packages/aws-aws-sdk-php)[neuron-core/neuron-ai

The PHP Agentic Framework.

2.0k656.1k38](/packages/neuron-core-neuron-ai)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3741.3M47](/packages/tencentcloud-tencentcloud-sdk-php)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

751291.4k43](/packages/civicrm-civicrm-core)[spatie/laravel-export

Create a static site bundle from a Laravel app

674146.0k6](/packages/spatie-laravel-export)[oat-sa/tao-core

TAO core extension

66143.7k122](/packages/oat-sa-tao-core)

PHPackages © 2026

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