# matscode/paystack
###### This package is for communicating with PAYSTACK RESTful API. [Paystack](https://paystack.com/)
Having other resource point available on PAYSTACK API, Resources like;
- Transaction
- Customers
- Plans
- Subscription
- Transfers
- Charges
- and many more
Just to name a few, it is only the Transaction Resource that is made available currently in this package. Development is ongoing while releases are Stable. Incase you find a BUG/Security Issue, Please, do be kind to open an issue or email [matscode(at)Gmail(dot)Com](mailto://matscode@gmail.com).
**PS**: This library also works for you if you use paystack inline. You just have to use the `verify()` method, passing in your transaction `$reference|$token|$id` is compulsory.
## Requirements
- Curl
## Install
### Via Composer
``` bash
$ composer require matscode/paystack
```
If you use a Framework, check your documentation for how vendor packages are autoloaded else Add this to the top of your source file;
``` php
require_once __DIR__ . "/vendor/autoload.php";
```
## Making Transactions/Recieving Payment
### Starting Up Paystack Transaction
``` php
use Matscode\Paystack\Transaction;
use Matscode\Paystack\Utility\Debug; // for Debugging purpose
use Matscode\Paystack\Utility\Http;
$secretKey = 'sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// creating the transaction object
$Transaction = new Transaction( $secretKey );
```
### Initializing Transaction
Set data/payload/requestBody to post with initialize request. Minimum required data are email and amount.
``` php
// Set data to post using array
$data =
[
'email' => 'customer@email.com',
'amount' => 500000 // amount is treated in kobo using this method
];
$response = $Transaction->initialize($data);
```
OR
``` php
// Set data to post using this method
$response =
$Transaction
->setCallbackUrl('http://michaelakanji.com') // to override/set callback_url, it can also be set on your dashboard
->setEmail( 'matscode@gmail.com' )
->setAmount( 75000 ) // amount is treated in Naira while using this method
->initialize();
```
If you want to get the 200OK raw Object as it is sent by Paystack, Set the 2nd argument of the `initialize()` to `true`, example below
``` php
// Set data to post using this method
$response =
$Transaction
->setEmail( 'matscode@gmail.com' )
->setAmount( 75000 ) // amount is treated in Naira while using this method
->initialize([], true);
```
Now do a redirect to payment page (using authorization_url)
NOTE: Recommended to Debug `$response` or check if authorizationUrl is set, and save your Transaction reference code. useful to verify Transaction status
``` php
// recommend to save Transaction reference in database and do a redirect
$reference = $response->reference;
// redirect
Http::redirect($response->authorizationUrl);
```
Using a Framework? It is recommended you use the reverse routing/redirection functions provided by your Framework
### Verifying Transaction
This part would live in your callback file i.e `callback.php` or `whatsoever_you_name.php`
It is also imperative that you create Transaction Obj once more.
This method would return the Transaction Obj but `false` if saved `$reference` is not passed in as argument and also cant be guessed. Using `verify()` would require you do a manual check on the response Obj
``` php
$response = $Transaction->verify();
// Debuging the $response
Debug::print_r( $response);
```
OR
``` php
// This method does the check for you and return `(bool) true|false`
$response = $Transaction->isSuccessful();
```
The two methods above try to guess your Transaction `$reference` but it is highly recommended you pass the Transaction `$reference` as an argument on the method as follows
``` php
// This method does the check for you and return `(bool) true|false`
$response = $Transaction->isSuccessful($reference);
```
Moreso, you can also compare if amount paid by customer is the amount expected. This method only works after calling `verify()` or `isSuccessful()` in the same script. It is recommended to do this if you use paystack inline to initialize the transaction.
``` php
$amountExpected = 5000; // amount must be in kobo
// returns `(bool) true|false`
$Transaction->amountEquals($amountExpected);
```
Now you can process Customer Valuable.
You might wanna save Transaction `$authorizationCode` for the current customer subsequent Transaction but not a nessecity. It would only counts to future updates of this package or if you choose to extend the package.
``` php
// returns Auth_xxxxxxx
$response = $Transaction->authorizationCode($reference); // can also guess Transaction $reference
```
## Hire Me
I am available on contract if you need help integrating paystack into your Business Website or something.
Contact me via my email above - [michaelakanji.com](http://michaelakanji.com)
## Contributions
If you seem to understand the architecture, you are welcome to fork and pull else you can wait a bit more till when i provide convention documentation.
## Licence
GNU GPLV3