142 lines
4.1 KiB
PHP
142 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\External\Payments;
|
|
|
|
use Illuminate\Support\Arr;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
use App\Classes\External\Payments;
|
|
|
|
class Ezypay extends Payments
|
|
{
|
|
protected function connect(string $url,array $args=[])
|
|
{
|
|
if ($x=$this->mustPause()) {
|
|
Log::error('API Throttle, waiting .',['m'=>__METHOD__]);
|
|
sleep($x);
|
|
}
|
|
|
|
$client = $this->getClient(config('services.ezypay.base_uri'));
|
|
|
|
$result = $client->request('GET',$url.($args ? '?'.http_build_query($args) : ''),[
|
|
'headers' => [
|
|
'Authorization'=>'Basic '.base64_encode(config('services.ezypay.token_user').':'),
|
|
'Accept'=>'application/json',
|
|
],
|
|
]);
|
|
|
|
$api_remain = Arr::get($result->getHeader('X-RateLimit-Remaining'),0);
|
|
$api_reset = Arr::get($result->getHeader('X-RateLimit-Reset'),0);
|
|
|
|
if ($api_remain == 0) {
|
|
Log::error('API Throttle.',['m'=>__METHOD__]);
|
|
Cache::put('api_throttle',$api_reset,now()->addSeconds($api_reset));
|
|
}
|
|
|
|
return json_decode($result->getBody()->getContents());
|
|
}
|
|
|
|
public function getCustomer(string $id)
|
|
{
|
|
return Cache::remember(__METHOD__.$id,86400,function() use ($id) {
|
|
return collect($this->connect('accounts/customerid/'.$id));
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get a list of configured customers
|
|
*
|
|
* @return Collection
|
|
* @todo Hard coded at 100 clients - need to make this more dynamic
|
|
*
|
|
* {#1079
|
|
* +"TermsAndConditions": true
|
|
* +"Account": {#1082
|
|
* +"PaymentMethodId": 0
|
|
* }
|
|
* +"Address1": "1 Road Street "
|
|
* +"BillingStatus": "Active"
|
|
* +"BusinessAccountReference": "12345"
|
|
* +"CountryCode": "AU"
|
|
* +"Email": "user@example.com"
|
|
* +"EzypayReferenceNumber": 12345678
|
|
* +"Firstname": "Bart"
|
|
* +"Id": "6219c42b-8e56-4e4e-af3a-76ddf4b0e4e1"
|
|
* +"MobilePhone": ""
|
|
* +"Postcode": "1234"
|
|
* +"ReferenceId": "01nnnn"
|
|
* +"State": "VIC"
|
|
* +"Suburb": "TOWN"
|
|
* +"Towncity": ""
|
|
* +"Surname": "Simpson "
|
|
* +"PaymentPlanId": "00000000-0000-0000-0000-000000000000"
|
|
* +"DateOfBirth": "1970-01-01T00:00:00.000"
|
|
* +"Gender": "M"
|
|
* +"DebitType": 0
|
|
* +"RecurringAmount": 0.0
|
|
* +"Frequency": 0
|
|
* +"FrequencyType": 0
|
|
* +"StartDate": "0001-01-01T00:00:00.000"
|
|
* +"RecurringDebitEndType": 0
|
|
* +"TotalAmountCollected": 0.0
|
|
* +"MinimumNumberOfPayment": 0
|
|
* +"RecurringWithDifferentFirstDebitAmount": 0.0
|
|
* +"RecurringDebitFirstDebitDate": "0001-01-01T00:00:00.000"
|
|
* +"RecurringDebitAmount": 0.0
|
|
* +"RecurringDebitFrequency": 0
|
|
* +"RecurringDebitFrequencyType": 0
|
|
* +"RecurringDebitStartDate": "0001-01-01T00:00:00.000"
|
|
* +"RecurringDebitDifferentFirstAmountEndType": 0
|
|
* +"RecurringDebitTotalAmountCollected": 0.0
|
|
* +"RecurringDebitMinimumNumberOfPayment": 0
|
|
* +"OnceOffAmount": 0.0
|
|
* +"OnceOffStartDate": "0001-01-01T00:00:00.000"
|
|
* }
|
|
*/
|
|
public function getCustomers(): Collection
|
|
{
|
|
return Cache::remember(__METHOD__,86400,function() {
|
|
return collect($this->connect('customers?pageSize=100'));
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Get Specific debits for a client.
|
|
*
|
|
* @param array $opt
|
|
* @return Collection
|
|
*
|
|
* Illuminate\Support\Collection^ {#1077
|
|
* #items: array:4 [
|
|
* 0 => {#1826
|
|
* +"Amount": 99.99
|
|
* +"Id": "76666ef1-106c-458c-9162-e77fe746517c"
|
|
* +"CustomerId": "6219c42b-8e56-4e4e-af3a-76ddf4b0e4e1"
|
|
* +"Date": "2021-10-01T00:00:00.000"
|
|
* +"Status": "Pending"
|
|
* }
|
|
* 1 => {#2075
|
|
* +"Amount": 99.99
|
|
* +"Id": "80ba201d-fb6f-4700-b1b7-2b13fbfa91d5"
|
|
* +"CustomerId": "6219c42b-8e56-4e4e-af3a-76ddf4b0e4e1"
|
|
* +"Date": "2021-09-01T00:00:00.000"
|
|
* +"Status": "Pending"
|
|
* }
|
|
*/
|
|
public function getDebits($opt=[]): Collection
|
|
{
|
|
return Cache::remember(__METHOD__.http_build_query($opt),86400,function() use ($opt) {
|
|
return Collect($this->connect('debits'.($opt ? '?'.http_build_query($opt) : '')));
|
|
});
|
|
}
|
|
|
|
public function getSettlements($opt=[]): Collection
|
|
{
|
|
return Cache::remember(__METHOD__.http_build_query($opt),86400,function() use ($opt) {
|
|
return Collect($this->connect('settlements/'.config('services.ezypay.guid').($opt ? '?'.http_build_query($opt) : '')));
|
|
});
|
|
}
|
|
}
|