PHPackages                             bereank/coupler - 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. [API Development](/categories/api)
4. /
5. bereank/coupler

ActiveLibrary[API Development](/categories/api)

bereank/coupler
===============

A dedicated Laravel-PHP library crafted exclusively for seamless integration with the SAP Business One Service Layer API.

0.1.2(1y ago)213246[1 issues](https://github.com/bereank/coupler/issues)MITPHP

Since Jul 17Pushed 1y ago2 watchersCompare

[ Source](https://github.com/bereank/coupler)[ Packagist](https://packagist.org/packages/bereank/coupler)[ RSS](/packages/bereank-coupler/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (2)Versions (4)Used By (0)

⚗️ About Coupler
----------------

[](#️-about-coupler)

A dedicated Laravel-PHP library crafted exclusively for seamless integration with the SAP Business One Service Layer API.

It's heavily inspired by syedhussim's [php-sapb1](https://github.com/syedhussim/php-sapb1).

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

[](#installation)

You can install the package via composer:

```
composer require bereank/coupler
```

Usage
-----

[](#usage)

Create an array to store your SAP Business One Service Layer configuration details.

```
$config = [
    'https' => true,
    'host' => 'IP or Hostname',
    'port' => 50000,
    'sslOptions' => [
        "cafile" => "path/to/certificate.crt",
        "verify_peer" => true,
        "verify_peer_name" => true,
    ],
    'version' => 2
];
```

Create a new Service Layer session.

```
$sap = SAPClient::createSession($config, 'SAP UserName', 'SAP Password', 'Company');
```

The static `createSession()` method will return a new instance of `SAPClient`. The SAPClient object provides a `service($name)` method which returns a new instance of Service with the specified name. Using this Service object you can perform CRUD actions.

### Querying A Service

[](#querying-a-service)

The `queryBuilder()` method of the Service class returns a new instance of Query. The Query class allows you to use chainable methods to filter the requested service.

The following code sample shows how to filter Sales Orders using the Orders service.

```
$sap = SAPClient::createSession($config, 'SAP UserName', 'SAP Password', 'Company');
$orders = $sap->getService('Orders');

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->orderBy('DocNum', 'asc')
    ->limit(5)
    ->findAll();
```

The `findAll()` method will return a collection of records that match the search criteria. To return a specific record using an `id` use the `find($id)` method.

```
...
$orders = $sap->getService('Orders');

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->find(123456); // DocEntry value
```

Depending on the service, `$id` may be a numeric value or a string. If you want to know which field is used as the id for a service, call the `getMetaData()` method on the Service object as shown below.

```
...
$meta = $orders->getMetaData();
```

### Creating A Service

[](#creating-a-service)

The following code sample shows how to create a new Sales Order using the create() method of the Service object.

```
...
$orders = $sap->getService('Orders');

$result = $orders->create([
    'CardCode' => 'BP Card Code',
    'DocDueDate' => 'Doc due date',
    'DocumentLines' => [
        [
            "ItemCode" => "Item Code",
            "Quantity" => 100,
        ]
    ]
]);
```

You must provide any User Defined Fields that are required to create a Sales Order. If successful, the newly created Sales Order will be returned as an object.

### Updating A Service

[](#updating-a-service)

The following code sample demonstrates how to update a service using the `update()` method of the Service object.

```
...
$orders = $sap->getService('Orders');

$result = $orders->update(19925, [
    'Comments' => 'Comment added here'
]);
```

Note that the first argument to the update() method is the `id` of the entity to update. In the case of a Sales Order the `id` is the DocEntry field. If the update is successful a boolean true value is returned.

### Adding Headers

[](#adding-headers)

You can specify oData headers by calling the headers() method on a Service instance with an array of headers.

```
...
$orders = $sap->getService('Orders');
$orders->headers(['Prefer' => 'odata.maxpagesize=0']);

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->find(123456); // DocEntry value
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Berean Kibet](https://github.com/bereank)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance31

Infrequent updates — may be unmaintained

Popularity24

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity36

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 ~175 days

Total

3

Last Release

684d ago

### Community

Maintainers

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

---

Top Contributors

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

---

Tags

laravellaravel-packagesapservice-layer

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/bereank-coupler/health.svg)

```
[![Health](https://phpackages.com/badges/bereank-coupler/health.svg)](https://phpackages.com/packages/bereank-coupler)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

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