<?php
namespace Faker\Provider\en_GB;
class Company extends \Faker\Provider\Company
{
public const VAT_PREFIX = 'GB';
public const VAT_TYPE_DEFAULT = 'vat';
public const VAT_TYPE_BRANCH = 'branch';
public const VAT_TYPE_GOVERNMENT = 'gov';
public const VAT_TYPE_HEALTH_AUTHORITY = 'health';
/**
* UK VAT number
*
* This method produces numbers that are _reasonably_ representative
* of those issued by government
*
* @see https://en.wikipedia.org/wiki/VAT_identification_number#VAT_numbers_by_country
*/
public static function vat(string $type = null): string
{
switch ($type) {
case static::VAT_TYPE_BRANCH:
return static::generateBranchTraderVatNumber();
case static::VAT_TYPE_GOVERNMENT:
return static::generateGovernmentVatNumber();
case static::VAT_TYPE_HEALTH_AUTHORITY:
return static::generateHealthAuthorityVatNumber();
default:
return static::generateStandardVatNumber();
}
}
/**
* Standard
* 9 digits (block of 3, block of 4, block of 2)
*
* This uses the format introduced November 2009 onward where the first
* block starts from 100 and the final two digits are generated via a the
* modulus 9755 algorithm
*/
private static function generateStandardVatNumber(): string
{
$firstBlock = static::numberBetween(100, 999);
$secondBlock = static::randomNumber(4, true);
return sprintf(
'%s%d %d %d',
static::VAT_PREFIX,
$firstBlock,
$secondBlock,
static::calculateModulus97($firstBlock . $secondBlock),
);
}
/**
* Health authorities
* the letters HA then 3 digits from 500 to 999 (e.g. GBHA599)
*/
private static function generateHealthAuthorityVatNumber(): string
{
return sprintf(
'%sHA%d',
static::VAT_PREFIX,
static::numberBetween(500, 999),
);
}
/**
* Branch traders
* 12 digits (as for 9 digits, followed by a block of 3 digits)
*/
private static function generateBranchTraderVatNumber(): string
{
return sprintf(
'%s %d',
static::generateStandardVatNumber(),
static::randomNumber(3, true),
);
}
/**
* Government departments
* the letters GD then 3 digits from 000 to 499 (e.g. GBGD001)
*/
private static function generateGovernmentVatNumber(): string
{
return sprintf(
'%sGD%s',
static::VAT_PREFIX,
str_pad((string) static::numberBetween(0, 499), 3, '0', STR_PAD_LEFT),
);
}
/**
* Apply a Modulus97 algorithm to an input
*
* @see https://library.croneri.co.uk/cch_uk/bvr/43-600
*/
public static function calculateModulus97(string $input, bool $use9755 = true): string
{
$digits = str_split($input);
if (count($digits) !== 7) {
throw new \InvalidArgumentException();
}
$multiplier = 8;
$sum = 0;
foreach ($digits as $digit) {
$sum += (int) $digit * $multiplier;
--$multiplier ;
}
if ($use9755) {
$sum = $sum + 55;
}
while ($sum > 0) {
$sum -= 97;
}
$sum = $sum * -1;
return str_pad((string) $sum, 2, '0', STR_PAD_LEFT);
}
}
Initiates a new payment transaction.
create-order
| Parameter | Type | Details |
|---|---|---|
| amount | decimal | Your Amount , Must be rounded at 2 precision. |
| currency | string | Currency Code, Must be in Upper Case (Alpha-3 code) |
| success_url | string | Enter your return or success URL |
| cancel_url | string (optional) | Enter your cancel or failed URL |
Request Example (guzzle)
<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $base_url.'create-order', [
'headers' => [
'Authorization' => 'Bearer '. $authorizationToken,
'accept' => 'application/json',
'content-type' => 'application/json',
],
'form_params' => [
'amount' => '$amount',
'currency' => 'currency',
'success_url' => 'success_url',
'cancel_url' => 'cancel_url',
],
]);
echo $response->getBody();
**Response: SUCCESS (200 OK)**
{
"message": {
"success": [
"Order created successfully."
]
},
"data": {
"redirect_url":"https://example.com/login/OISADFDFSDFSF",
"order_details":{
"amount" : "10",
"fixed_charge" : 2,
"percent_charge" : 1,
"total_charge" : 3,
"total_payable" : 13,
"currency" : "USD",
"expiry_time": "2024-04-25T06:48:35.984285Z",
"success_url": "http://127.0.0.1/nfcpay/user/transaction/success",
"cancel_url": "http://127.0.0.1/nfcpay/user/transaction/cancel"
}
},
"type": "success"
}
**Response: ERROR (400 FAILED)**
{
"message": {
"error": [
"Invalid token."
]
},
"data": null,
"type": "error"
}