Basic NCIP library

v0.2.3 2014-08-13 10:29 UTC


Build Status Coverage Status Latest Stable Version Total Downloads License

php-ncip is a php package for parsing and formatting NCIP request and response messages. Development has been guided by a desire for a simple API rather than a complete one. Only a small subset of the NCIP specification is currently covered, but suggestions for additions are welcome.



Add the package to the require list of your composer.json file.

    "require": {
        "danmichaelo/ncip": "dev-master"

and run composer install to get the latest version of the package.

Additional steps for Laravel 4

The package comes with a Laravel 4 service provider that you can install if you like. It comes with a config file, so you can set settings there instead of passing them to the constructor.

To register the service provider, add 'Scriptotek\NcipServiceProvider', to the list of providers in app/config/app.php. Then run php artisan config:publish danmichaelo/ncip in your terminal to create the config file app/config/packages/danmichael/ncip/config.php.



To construct a client, you need to specify the url to the NCIP srvice, a freely choosen user agent string for your client, and the agency id. The agency id identifies your institution, as specified in the NCIP protocol.

use Scriptotek\Ncip\NcipConnector,

$ncipUrl = '';
$userAgent = 'My NCIP client/0.1';
$agencyId = 'a';

$conn = new NcipConnector($ncipUrl, $userAgent, $agencyId);
$client = new NcipClient($conn);

To construct a server:

use Scriptotek\Ncip\NcipServer;

$server = new NcipServer;

If you have registered the Laravel 4 service provider, the classes can be constructed through the applications container instead:

$client = App::make('ncip.client');
$server = App::make('ncip.server');

// Or if you have access to an instance of the application.
$client = $app['ncip.client'];
$server = $app['ncip.server'];

The settings are now pulled from app/config/packages/danmichael/ncip/config.php instead, and the NcipConnector is injected into the NcipClient automatically.

Client example:

$user = $client->lookupUser('abc123');
if ($user->exists) {
    echo 'Hello ' . $user->firstName . ' ' . $user->lastName;
} else {
    echo 'User not found';

Server example:

$postData = file_get_contents('php://input');
$request = $server->parseRequest($postData);

if ($request->is('LookupUser')) {

    $response = new UserResponse;
    $response->userId = $request->userId;
    $response->firstName = 'Meriadoc';
    $response->lastName = 'Brandybuck';
    echo $response->xml();



The client emits events on each request to the server. This can be useful to implement logging. The events are request.item, request.user, request.checkout, request.checkin and request.renew.

$client->on('request.checkout', function($userId, $itemId) {
    $log->addInfo('Requested checkout of item "' . $itemId . '" for user "' . $userId . '"');

For debugging, events message.send and message.recv are emitted on each message sent to and received from the server. The message xml body is given as the first argument.

$client->on('message.send', function($msg) {
    printf("[SEND] %s\n", $msg);
$client->on('message.recv', function($msg) {
    printf("[RECV] %s\n", $msg);