If you don't have a UserApp account, you need to create one.
-
App Id: The App Id identifies your app. After you have logged in, you should see your
App Idinstantly. If you're having trouble finding it, follow this guide. -
Token: A token authenticates a user on your app. If you want to create a token for your logged in user, follow this guide. If you want to authenticate using a username/password, you can acquire your token by calling
$api->user->login(...);
UserApp relies on the autoloading features of PHP to load its files when needed. The autoloading complies with the PSR-0 standard which makes it compatible with most of the major frameworks and libraries. Autoloading in your application is handled automatically when managing the dependencies with Composer.
{
"require": {
"userapp/userapp": "~1.1.0"
}
}
require 'autoload.php';
$api = new \UserApp\API("YOUR APP ID");
If you want to create a client with additional options the easiest way is to pass an array with the options as shown below.
$api = new \UserApp\API(array(
"debug" => true,
"throw_errors" => false
));
If you pass a string value into the constructor the first argument will be treated as the App Id, the second as the Token. If you pass an array then it will always be treated as additional options. I.e. some valid constructs are:
$api = new \UserApp\API("MY APP ID");
$api = new \UserApp\API("MY APP ID", array(
"option" => "some value"
));
$api = new \UserApp\API("MY APP ID", "MY TOKEN", array(
"option" => "some value"
));
This client has no hard-coded API definitions built into it. It merly acts as a proxy which means that you'll never have to update the client once new API methods are released. If you want to call a service/method all you have to do is look at the API documentation and follow the convention below:
$result = $api->[service]->[method](array([argument] => [value]));
The API user.login and its arguments login and password translates to:
$login_result = $api->user->login(array(
"login" => "test",
"password" => "test"
));
The API user.invoice.search and its argument user_id translates to:
$invoices = $api->user->invoice->search(array(
"user_id" => "test123"
));
The API property.save and its arguments name, type and default_value translates to:
$property = $api->property->save(array(
"name" => "my new property",
"type" => "boolean",
"default_value" => true
));
The API user.logout without any arguments translates to:
$api->user->logout();
Options determine the configuration of a client. If no options are passed to a client, the options will automatically be inherited from the client global options (\UserApp\ClientOptions->getGlobal()).
- Version (
version): Version of the API to call against. Default1. - App Id (
app_id): App to authenticate against. Defaultnull. - Token (
token): Token to authenticate with. Defaultnull. - Debug mode (
debug): Log steps performed when sending/receiving data from UserApp. Default:false. - Secure mode (
secure): Call the API using HTTPS. Default:true. - Base address (
base_address): The address to call against. Default:api.userapp.io. - Throw errors (
throw_errors): Whether or not to throw an exception when response is an error. I.e. result{"error_code":"SOME_ERROR","message":"Some message"}results in an exception of type\UserApp\Exceptions\ServiceException.
Options can either be set in global or local scope. Global is the scope in which all clients inherit their default options from.
Global options can be set using
\UserApp\API::setGlobalOptions(array(
"app_id" => "MY APP ID",
"token" => "MY TOKEN"
)).
The easiest way to set a local scoped option is to do it in the constructor when creating a new client.
$api = new \UserApp\API(array(
"debug" => true,
"throw_errors" => false
));
If you want to set an option after the client has been created you can do it as shown below.
$api->setOption("debug", true);
Setting multiple options is done almost the same way.
$api->setOptions(array(
"debug" => true,
"throw_errors" => false
));
A more detailed set of examples can be found in /examples.
$api = new \UserApp\API("YOUR APP-ID");
$api->user->save(array(
"login" => "johndoe81",
"password" => "iwasfirst!111"
));
$api = new \UserApp\API("YOUR APP-ID");
$api->user->login(array(
"login" => "johndoe81",
"password" => "iwasfirst!111"
));
$api->user->save(array(
"user_id" => "self",
"first_name" => "John",
"last_name" => "Doe"
));
$api->user->logout();
$api = new \UserApp\API("YOUR APP-ID", "YOUR TOKEN");
$search_result = $api->user->search(array(
"filters" => array(
"query" => "*bob*"
),
"sort" => array(
"created_at" => "desc"
)
));
print_r($search_result->items);
If you want to configure the client to call a specific API version you can do it by either setting the version option, or by calling the client using the convention $api->v[version number]. If no version is set it will automatically default to 1.
Since no version has been specified, this call will be made against version 1 (default).
$api->user->login(array("login" => "test", "password" => "test"));
Since the version has been explicitly specified using options, the call will be made against version 2.
$api = new \UserApp\API(array("version" => 2));
$api->user->login(array("login" => "test", "password" => "test"));
Since the version has been explicitly specified, the call will be made against version 3.
$api->v3->user->login(array("login" => "test", "password" => "test"));
This library emits the following events:
- success Emitted when a call succeeds.
- error Emitted when a call results in an error.
- unauthorized Emitted when a call results in an authentication error. Emitted before emitting the error event.
$api->on('success', function($sender, $call_context, $result){
echo(sprintf("Call to %s.%s resulted in %s", $call_context->service, $call_context->method, json_encode($result)));
});
Sometimes to debug an API error it's important to see what is being sent/received from the calls that one make to understand the underlying reason. If you're interested in seeing these logs, you can set the client option debug to true, then print the logs after you've made your API call (as shown below).
$api = new \UserApp\API(array("debug" => true));
$api->user->login(array("login" => "test", "password" => "test"));
print_r($api->getLogger()->getLogs());
When the option throw_errors is set to true (default) the client will automatically throw a \UserApp\Exceptions\ServiceException exception when a call results in an error. I.e.
try{
$api->user->save(array("user_id" => "invalid user id"));
}catch(\UserApp\Exceptions\ServiceException $exception){
switch($exception->getErrorCode()){
// Handle specific error
case "INVALID_ARGUMENT_USER_ID":
throw new Exception("User does not exist");
default:
throw $exception;
}
}
Setting throw_errors to false is more of a way to tell the client to be silent. This will not throw any service specific exceptions. Though, it might throw a \UserApp\Exceptions\UserAppException.
$result = $api->user->save(array("user_id" => "invalid user id"));
if(is_object($result) && isset($result->error_code)){
if($result->error_code == "INVALID_ARGUMENT_USER_ID"){
// Handle specific error
}
}
$api->on('error', function($sender, $call_context, $error){
echo(sprintf("Call to %s.%s resulted in error %s (%s)", $call_context->service, $call_context->method, $error->message, $error->error_code)));
});
$api->on('unauthorized', function($sender, $call_context, $error){
header("Location: /login.php");
die();
});
- Set the client option
debugtotrue(see section options for more details on setting client options). If no logger is set, this automatically adds a MemoryLogger to your API client. The logger is retrievable using$api->getLogger(). - Like above, set the option
throw_errorstofalse. This disables any error exceptions (\UserApp\Exceptions\ServiceException) being thrown. - Make the API calls that you want to debug. E.g.
$user->user->login(array("login" => "test")); - Print the logs!
print_r($api->getLogger()->getLogs()); - Stuck? Send the output to [email protected] and we'll help you out.
You are missing the cURL extension. Follow these instructions to install it: http://askubuntu.com/questions/9293/how-do-i-install-curl-in-php5 (Ubuntu)
Try executing: # sudo apt-get install php5-json (Ubuntu).
Even though this client works as a proxy and there are no hard-coded API definitions built into it, there are still a few tweaks that are API specific.
In other words:
$login_result = $api->user->login(array("login" => "test", "password" => "test"));
Is exactly the same as:
$login_result = $api->user->login(array("login" => "test", "password" => "test"));
$api->setOption("token", $login_result->token);
In other words:
$api->user->logout();
Is exactly the same as:
$api->user->logout();
$api->setOption("token", null);
- PHP >= 5.3.2
- cURL
MIT - For more details, see LICENSE.

