PHPackages                             dream-technologies/telebirr-laravel-plus - 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. [Payment Processing](/categories/payments)
4. /
5. dream-technologies/telebirr-laravel-plus

ActiveLibrary[Payment Processing](/categories/payments)

dream-technologies/telebirr-laravel-plus
========================================

Production-ready Laravel backend package for Telebirr InApp Purchase, aligned with telebirr\_inapp\_purchase\_plus Flutter SDK.

v0.1.3(1mo ago)07MITPHPPHP ^8.1CI passing

Since May 7Pushed 1mo agoCompare

[ Source](https://github.com/Dream-Technologies-PLC/telebirr-laravel-plus)[ Packagist](https://packagist.org/packages/dream-technologies/telebirr-laravel-plus)[ Docs](https://github.com/Dream-Technologies-PLC/telebirr-laravel-plus)[ RSS](/packages/dream-technologies-telebirr-laravel-plus/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (7)Versions (5)Used By (0)

telebirr-laravel-plus
=====================

[](#telebirr-laravel-plus)

Production-ready Laravel backend package for Telebirr InApp Purchase in Ethiopia.

GitHub: [Dream-Technologies-PLC/telebirr-laravel-plus](https://github.com/Dream-Technologies-PLC/telebirr-laravel-plus)

Using an AI coding assistant to integrate this package into your existing Laravel app? Add or reference [skills.md](skills.md) first so the assistant asks for the required Telebirr credentials, private key location, notify URL, existing order model, and checkout controller before changing code.

It is built to pair with the Flutter package:

- [telebirr\_inapp\_purchase\_plus on pub.dev](https://pub.dev/packages/telebirr_inapp_purchase_plus)
- [Flutter GitHub repository](https://github.com/Dream-Technologies-PLC/telebirr_inapp_purchase_plus)

Use this Laravel package on your backend. Use the Flutter package only to open the native Telebirr SDK with the `receiveCode` returned from Laravel.

What This Package Does
----------------------

[](#what-this-package-does)

- Applies Fabric Token on the backend.
- Signs Telebirr requests with your private key.
- Creates InApp orders.
- Returns `receiveCode` for Flutter.
- Provides query-order support.
- Provides notify callback route.
- Keeps secrets away from Flutter.
- Supports testbed and production environments.

What Flutter Does
-----------------

[](#what-flutter-does)

Flutter calls your Laravel endpoint:

```
POST /api/telebirr/create-order

```

Laravel returns:

```
{
  "success": true,
  "merchantOrderId": "1778141110976",
  "receiveCode": "TELEBIRR$BUYGOODS$YOUR_SHORT_CODE$12.00$024demoPrepayId$120m",
  "code": "0",
  "message": "success"
}
```

Flutter then starts payment:

```
await Telebirr.initialize(
  appId: 'YOUR_MERCHANT_APP_ID',
  shortCode: 'YOUR_SHORT_CODE',
  returnScheme: 'yourappscheme',
  environment: TelebirrEnvironment.test,
);

final result = await Telebirr.pay(receiveCode: receiveCodeFromLaravel);
```

Install
-------

[](#install)

```
composer require dream-technologies/telebirr-laravel-plus
```

This package is published for Laravel through [Packagist](https://packagist.org/), the Composer package registry. Packagist is the Laravel/PHP equivalent of pub.dev for Flutter packages.

Publish config:

```
php artisan vendor:publish --tag=telebirr-config
```

Add environment variables:

```
TELEBIRR_ENV=test
TELEBIRR_FABRIC_APP_ID=your_fabric_app_id
TELEBIRR_APP_SECRET=your_app_secret
TELEBIRR_MERCHANT_APP_ID=your_merchant_app_id
TELEBIRR_SHORT_CODE=your_business_short_code
TELEBIRR_PRIVATE_KEY_PATH=/absolute/path/to/storage/app/private/telebirr/private_key.pem
TELEBIRR_NOTIFY_URL=https://yourdomain.com/api/telebirr/notify
TELEBIRR_VERIFY_SSL=true
```

Put your private key in a private backend-only path, for example:

```
storage/app/private/telebirr/private_key.pem

```

Never place the private key in `public/`.

Routes
------

[](#routes)

Routes are registered automatically:

```
POST /api/telebirr/create-order
POST /api/telebirr/query-order
POST /api/telebirr/notify

```

Change the route prefix:

```
TELEBIRR_ROUTE_PREFIX=api/payments/telebirr
```

Disable built-in routes if you want custom controllers:

```
TELEBIRR_ROUTES_ENABLED=false
```

Create Order
------------

[](#create-order)

Request:

```
curl -X POST https://yourdomain.com/api/telebirr/create-order \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Example order",
    "amount": "12.00"
  }'
```

Response:

```
{
  "success": true,
  "merchantOrderId": "1778141110976",
  "receiveCode": "TELEBIRR$BUYGOODS$YOUR_SHORT_CODE$12.00$024demoPrepayId$120m",
  "code": "0",
  "message": "success",
  "raw": {}
}
```

Use In Your Own Controller
--------------------------

[](#use-in-your-own-controller)

```
use DreamTechnologies\TelebirrLaravelPlus\Contracts\TelebirrClient;
use DreamTechnologies\TelebirrLaravelPlus\DTO\CreateOrderData;

Route::post('/checkout/telebirr', function (TelebirrClient $telebirr) {
    $order = $telebirr->createOrder(new CreateOrderData(
        title: 'Example order',
        amount: '12.00',
    ));

    return response()->json($order->toArray());
});
```

Query Order
-----------

[](#query-order)

```
curl -X POST https://yourdomain.com/api/telebirr/query-order \
  -H "Content-Type: application/json" \
  -d '{
    "merchantOrderId": "1778141110976"
  }'
```

Use query-order when the Flutter callback is delayed, the user closes the app, or `notify_url` is delayed.

Handle Notify Callback
----------------------

[](#handle-notify-callback)

The built-in notify route logs the callback and dispatches:

```
DreamTechnologies\TelebirrLaravelPlus\Events\TelebirrNotificationReceived
```

Listen to the event in your app to update your own order records:

```
use DreamTechnologies\TelebirrLaravelPlus\Events\TelebirrNotificationReceived;
use Illuminate\Support\Facades\Event;

Event::listen(TelebirrNotificationReceived::class, function ($event) {
    // Store $event->payload, then confirm final status with queryOrder.
});
```

For final payment confirmation, prefer backend `notify_url` plus `queryOrder`.

Security Rules
--------------

[](#security-rules)

Keep these on Laravel only:

- App Secret
- Private key
- RSA signing
- Fabric Token
- createOrder
- queryOrder
- notify\_url verification

Flutter should receive only `receiveCode`, `merchantOrderId`, and safe UI status fields.

Testbed And Production
----------------------

[](#testbed-and-production)

Testbed:

```
TELEBIRR_ENV=test
```

Production:

```
TELEBIRR_ENV=production
TELEBIRR_VERIFY_SSL=true
TELEBIRR_NOTIFY_URL=https://yourdomain.com/api/telebirr/notify
```

If your organization or contract is not approved, Telebirr may return:

```
60200098: Product is not subscribed or the contract status is not allowed to do this operation.

```

Check your account at [developer.ethiotelecom.et](https://developer.ethiotelecom.et/) and make sure organization members and product contracts are approved.

Local Device Testing
--------------------

[](#local-device-testing)

Run Laravel:

```
php artisan serve --host=0.0.0.0 --port=8001
```

Use your computer LAN IP in Flutter, not `localhost`:

```
http://192.168.x.x:8001/api/telebirr/create-order

```

Contact Us
----------

[](#contact-us)

Need support with Telebirr integration, websites, mobile apps, or custom software? Contact Dream Technologies PLC: [dreamtech.et/contact](https://dreamtech.et/contact)

###  Health Score

37

—

LowBetter than 81% of packages

Maintenance94

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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 ~0 days

Total

4

Last Release

33d ago

### Community

Maintainers

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

---

Top Contributors

[![ebakebede](https://avatars.githubusercontent.com/u/156535967?v=4)](https://github.com/ebakebede "ebakebede (12 commits)")

---

Tags

laravelpaymentinappTelebirrEthiopiaflutterethiotelecom

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/dream-technologies-telebirr-laravel-plus/health.svg)

```
[![Health](https://phpackages.com/badges/dream-technologies-telebirr-laravel-plus/health.svg)](https://phpackages.com/packages/dream-technologies-telebirr-laravel-plus)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

76318.2M110](/packages/laravel-mcp)[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k104.3M822](/packages/laravel-socialite)[api-platform/laravel

API Platform support for Laravel

59156.3k10](/packages/api-platform-laravel)[laravel/surveyor

Static analysis tool for Laravel applications.

8390.3k12](/packages/laravel-surveyor)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1232.2k16](/packages/fleetbase-core-api)

PHPackages © 2026

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