https://github.com/rentpost/forte-payments-php
Forte client library written in PHP for version 3 of the REST API
https://github.com/rentpost/forte-payments-php
forte-api forte-sandbox php
Last synced: 6 months ago
JSON representation
Forte client library written in PHP for version 3 of the REST API
- Host: GitHub
- URL: https://github.com/rentpost/forte-payments-php
- Owner: rentpost
- License: mit
- Created: 2018-09-24T20:46:29.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-08-18T04:39:02.000Z (11 months ago)
- Last Synced: 2025-09-20T09:52:00.092Z (10 months ago)
- Topics: forte-api, forte-sandbox, php
- Language: PHP
- Size: 290 KB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Forte API v3 PHP Client Library
Forte client library written in PHP for version 3 of the REST API
## Forte API Documentation
https://restdocs.forte.net/
## Installation
Run the following command to include this library within your project
```
composer require rentpost/forte-payments-php
```
## Configuration
You'll first want to create a configuration file that defines your environments and their respective
configuration settings. As an example, we're showing a Symfony service container config. However,
this is just passing an array in the following format:
```php
[
'environments' => [
'sandbox' => [
'access_id' => 'xxxxxxxx',
'secure_key' => 'xxxxxxxx',
...
],
'live' => [
'access_id' => 'xxxxxxxx',
'secure_key' => 'xxxxxxxx',
...
],
],
]
```
*It's important to note that Forte's sandbox is quite limited for many resources. Therefore, it's
possible to override which environment is used for certain "sub resources"
(API resources/endpoints)*
### Development Environments
An example Symfony service container yaml configuration for a development environment, using a
"livetest" environemnt with specific sub resource overrides.
```yaml
parameters:
forte_api_client_settings:
environments:
sandbox:
access_id: "%forte_api_default_access_id%"
secure_key: "%forte_api_default_secure_key%"
authenticating_organization_id: "%forte_api_default_authenticating_organization_id%"
sandbox: "%forte_api_default_sandbox%"
base_uri: ~
debug: false
livetest:
access_id: "%forte_api_livetest_access_id%"
secure_key: "%forte_api_livetest_secure_key%"
authenticating_organization_id: "%forte_api_livetest_authenticating_organization_id%"
sandbox: "%forte_api_livetest_sandbox%"
base_uri: ~
debug: false
```
### Production Environments
A simple Symfony service container configuration for a production environemtn without any
necessary overrides.
```yaml
parameters:
forte_api_client_settings:
environments:
live:
access_id: "%forte_api_default_access_id%"
secure_key: "%forte_api_default_secure_key%"
authenticating_organization_id: "%forte_api_default_authenticating_organization_id%"
sandbox: "%forte_api_default_sandbox%"
base_uri: ~
debug: false
```
## Usage
Here is an example credit card 'sale' transaction.
### PSR Logger
We first create a dummy logger. Feel free to use any PSR compliant logger. This is used when
debugging is enabled in the configuration. Otherwise, all Exceptions will surface and must be caught.
```php
use Psr\Log\LoggerInterface;
namespace Acme\File;
class Logger implements LoggerInterface
{
public function log($level, $message, array $context = []) {
// Handle logging
}
// Other interface methods
}
```
### Create Transaction
To use, you'll want to call the `Rentpost\ForteApi\Client\Factory::make` method which will give you
a `Rentpost\ForteApi\Client\ForteClient` object. The `ForteClient` object provides access to all
"sub resources" (Forte API endpoint/resources).
The library makes use of `Model` and `Attribute` objects which assist with validation and
serialization. Any complex values will make use of an `Attribute`. A `Model` is an object
representation of a Forte API resource and all required and optional parameters.
```php
use Acme\File\Logger as FileLogger;
use Rentpost\ForteApi\Attribute;
use Rentpost\ForteApi\Client\Factory as ForteApiClientFactory;
use Rentpost\ForteApi\Exception\Request\AbstractRequestException;
use Rentpost\ForteApi\Model;
// The first parameter is our settings array. See the "Configuration" section
$settings = [
'environments' => [
'sandbox' => [
'access_id' => 'xxxxxxxx',
'secure_key' => 'xxxxxxxx',
...
],
'live' => [
'access_id' => 'xxxxxxxx',
'secure_key' => 'xxxxxxxx',
...
]
],
];
$forteClient = new ForteApiClientFactory::make($settings, new FileLogger());
$organizationId = new Attribute\Id\OrganizationId('org_123456');
$locationId = new Attribute\Id\LocationId('loc_123456');
$card = new Model\Card();
$card->setCardType('visa')
->setNameOnCard('John Doe')
->setAccountNumber('1234567890')
->setExpireMonth('01')
->setExpireYear('2019')
->setCardVerificationValue('123');
$address = new Model\PhysicalAddress();
->setStreetLine1('123 Foo St.')
->setStreetLine2('Apt. 123')
->setLocality('New York') // City/town/village
->setRegion('NY') // State or province
->setPostalCode(new Attribute\PostalCode('12345'));
$transaction = new Model\Transaction();
$transaction->setAction('sale')
->setCard($card) // Or setEcheck for ACH
->setBillingAddress($address)
->setOrderNumber('PO-12345')
->setAuthorizationAmount(new Attribute\Money('100.00'))
->setCustomerIpAddress(new Attribute\IpAddress('192.168.0.1'));
try {
$forteClient->useTransactions()->create(
$organizationId,
$locationId,
$transaction
);
} catch (AbstractRequestException $e) {
$logger->log($e->getModel()->getResponse()->getResponseDesc());
throw $e;
}
```
## Testing
This library makes use of `make` recipes to execute all necessary commands. To view a list of
recipes just execute `make`.
### Requirements
Running tests against Forte's sandbox environment will not return back any meaningful results for
many resources. Therefore, an additional "livetest" account is needed for running various tests.
This is a real account. You could use a production account in place of this (not advised). But be
aware that, in either case, real money will be moved if used for transaction endpoints. Forte can
setup a "livetest" account for you if needed with very low transaction limits to prevent mistakes.
The following dev composer packages are required for automated testing.
- "phpunit/phpunit" (version 7.0+)
- "vladahejda/phpunit-assert-exception" for `assertException` and related trait
PHPUnit is used for both unit tests, and integration test (Testing actual API calls to Forte)
### Configuration
The integration tests require some settings. This is done via the `test/settings.php` file. See `test/settings.php.dist` as an example.
### Running
Before running tests, you'll need to be sure the project is initialized and vendor packages are
installed via `Composer`. To do so, run `make init` first. Then you can run tests as follows:
```
make test
```
## Issues / Bugs / Questions
Please feel free to raise an issue against this repository if you have any questions or problems
## Todo
There are still a few "sub resource" classes (read: Forte endpoints/resources)that haven't been completed/aren't supported yet. This is simply because we aren't using these. Feel free to submit these as a pull request, or issue ticket if necessary.
## Contributing
New contributors to this project are welcome. If you are interested in contributing please
send a courtesy email to dev@rentpost.com
## Authors and Maintainers
- Jacob Thomason
- Sam Anthony
## License
This library is released under the MIT license.