Files
HRM-System/app/Libraries/Tap/Reference.php
2026-04-13 08:16:56 +08:00

307 lines
9.2 KiB
PHP
Executable File

<?php
namespace App\Package;
class Reference
{
protected $REQUIRED_CONFIG_VARS = ['company_tap_secret_key'=>true];
protected $CONFIG_VARS = ['company_tap_secret_key'=>null];
protected $CARD_VARS = ['number' => null,'exp_month' => null,'exp_year' => null,'cvc' => null,'name'=>null,'country'=>null,'line1'=>null,'city'=>null,'street'=>null,'avenue'=>null];
protected $REQUIRED_CUSTOMER_VARS = ['name'];
protected $REQUIRED_CARD_VARS = ['number' => true,'exp_month' => true,'exp_year' => true,'cvc' => true];
protected $REQUIRED_CHARGE_VARS = [
'customer' => [
'first_name' => true,'middle_name' => false,'last_name' => false,'email' => false,
'phone' => [
'country_code' => false,'number' => false
]
],
'address' => [
'country' => false,'city' => false,'line1' => false,'ip' => false
],
'amount' => true,'currency' => true,'save_card' => false,'threeDSecure' => true,'description' => true,'statement_descriptor' => false,
'metadata' => [
'udf1' => false,'udf2' => false
],
'reference' => [
'transaction' => false,'order' => false
],
'receipt' => [
'email' => false,'sms' => false
],
'merchant' => [
'id' => false
],
'source'=>[
'id' => false
],
'post' => [
'url' => true
],
'redirect'=>[
'url' => true
]
];
protected $CHARGE_VARS = [
'customer' => [
'first_name' => null,'middle_name'=>null,'last_name'=>null,'email'=>null,
'phone'=> [
'country_code' => null, 'number' => null
]
],
'address' => [
'country' => null,'city' => null,'line1' => null,'ip' => null
],
'amount' => null,'currency' => null,'save_card' => 'false','description' => null,'threeDSecure' => 'true','statement_descriptor' => null,
'metadata' => [
'udf1' => null,'udf2' => null
],
'reference' => [
'transaction' => null,'order' => null
],
'receipt' => [
'email'=>'true','sms' => 'true'
],
'merchant' => [
'id' => null
],
'source'=>[
'id' => null
],
'post' => [
'url' => null
],
'redirect'=>[
'url'
]
];
protected $REFUND_VARS = [
'charge_id' => null,
'amount' => null,
'currency' => null,
'description' => null,
'reason' => null,
'reference' => [
'merchant' => null
],
'metadata' => [
'udf1' => null,
'udf2' => null,
],
'post' => [
'url' => null
]
];
protected $REQUIRED_REFUND_VARS = [
'charge_id' => true,
'amount' => true,
'currency' => true,
'description' => false,
'reason' => true,
'reference' => [
'merchant' => false
],
'metadata' => [
'udf1' => false,
'udf2' => false,
],
'post' => [
'url' => true
]
];
protected $CHARGES_FILTER = [
'period' => [
'date' => [
'from' => 'null',
'to' => 'null'
]
],
'status' => 'null',
'limit' => 24
];
protected $REFUNDS_FILTER = [
'period' => [
'date' => [
'from' => 'null',
'to' => 'null'
]
],
'limit' => 24
];
protected $CHARGE_STATUS_LIST = [
'INITIATED','ABANDONED','CANCELLED','FAILED','DECLINED','RESTRICTED','CAPTURED','VOID','TIMEDOUT','UNKNOWN'
];
protected function cardValidator($data){
foreach ($this->REQUIRED_CARD_VARS as $parm => $req_status) {
if (key_exists($parm,$data)) {
$this->CARD_VARS[$parm] = $data[$parm];
}else{
if($req_status){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $parm field");
}
}
}
}
protected function chargeValidator($data){
foreach ($this->REQUIRED_CHARGE_VARS as $Firstkey => $req_status) {
if (is_array($req_status)) {
$SecondArray = $this->REQUIRED_CHARGE_VARS[$Firstkey];
foreach ($SecondArray as $Secondkey => $req_status2) {
if (is_array($req_status2)) {
$ThirdArray = $this->REQUIRED_CHARGE_VARS[$Firstkey][$Secondkey];
foreach ($ThirdArray as $Thirdkey => $req_status3) {
if (isset($data[$Firstkey][$Secondkey]) && key_exists($Thirdkey,$data[$Firstkey][$Secondkey])) {
$this->CHARGE_VARS[$Firstkey][$Secondkey] = $data[$Firstkey][$Secondkey];
}else{
if($req_status3){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey.$Secondkey.$Thirdkey required");
}else{
if (in_array($Thirdkey,['country_code','number']) && $this->CHARGE_VARS[$Firstkey][$Secondkey][$Thirdkey] == null ) {
if (!isset($this->CHARGE_VARS['customer']['email']) || isset($this->CHARGE_VARS['customer']['email']) && $this->CHARGE_VARS['customer']['email'] == null) {
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey.phone or $Firstkey.email is required");
}
}
}
}
}
}else{
if (isset($data[$Firstkey]) && key_exists($Secondkey,$data[$Firstkey])) {
$this->CHARGE_VARS[$Firstkey][$Secondkey] = $data[$Firstkey][$Secondkey];
}else{
if($req_status2){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey.$Secondkey required");
}
}
}
}
}else{
if (key_exists($Firstkey,$data)) {
$this->CHARGE_VARS[$Firstkey] = $data[$Firstkey];
}else{
if($req_status){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey field");
}
}
}
}
}
protected function refungValidator($data){
foreach ($this->REQUIRED_REFUND_VARS as $Firstkey => $req_status) {
if (is_array($req_status)) {
$SecondArray = $this->REQUIRED_REFUND_VARS[$Firstkey];
foreach ($SecondArray as $Secondkey => $req_status2) {
if (isset($data[$Firstkey]) && key_exists($Secondkey,$data[$Firstkey])) {
$this->REFUND_VARS[$Firstkey][$Secondkey] = $data[$Firstkey][$Secondkey];
}else{
if($req_status2){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey.$Secondkey required");
}
}
}
}else{
if (key_exists($Firstkey,$data)) {
$this->REFUND_VARS[$Firstkey] = $data[$Firstkey];
}else{
if($req_status){
// missing required parm
throw new \InvalidArgumentException("InvalidArgumentException $Firstkey field");
}
}
}
}
}
protected function chargesListValidator($options){
if (isset($options['period'])) {
if (isset($options['period']['date']['from'])) {
$strtotime = strtotime($options['period']['date']['from']);
if ($strtotime != false && $strtotime > 0) {
$this->CHARGES_FILTER['period']['date']['from'] = $strtotime;
}else{
throw new \Exception("Exception period from date not valid !");
}
}
if (isset($options['period']['date']['to'])) {
$strtotime = strtotime($options['period']['date']['to']);
if ($strtotime != false && $strtotime > 0) {
$this->CHARGES_FILTER['period']['date']['to'] = $strtotime;
}else{
throw new \Exception("Exception period to date not valid !");
}
}
}
if (isset($options['status'])) {
if (in_array($options['status'],$this->CHARGE_STATUS_LIST)) {
$this->CHARGES_FILTER['status'] = $options['status'];
}else{
throw new \Exception("Exception charge status not valid !");
}
}
if (isset($options['limit'])) {
if (is_numeric($options['limit']) && $options['limit'] > 0 && $options['limit'] < 51) {
$this->CHARGES_FILTER['limit'] = $options['limit'];
}else{
throw new \Exception("Exception charges limit not valid !");
}
}
}
protected function refundsListValidator($options){
if (isset($options['period'])) {
if (isset($options['period']['date']['from'])) {
$strtotime = strtotime($options['period']['date']['from']);
if ($strtotime != false && $strtotime > 0) {
$this->REFUNDS_FILTER['period']['date']['from'] = $strtotime;
}else{
throw new \Exception("Exception period from date not valid !");
}
}
if (isset($options['period']['date']['to'])) {
$strtotime = strtotime($options['period']['date']['to']);
if ($strtotime != false && $strtotime > 0) {
$this->REFUNDS_FILTER['period']['date']['to'] = $strtotime;
}else{
throw new \Exception("Exception period to date not valid !");
}
}
}
if (isset($options['limit'])) {
if (is_numeric($options['limit']) && $options['limit'] > 0 && $options['limit'] < 51) {
$this->REFUNDS_FILTER['limit'] = $options['limit'];
}else{
throw new \Exception("Exception refunds limit not valid !");
}
}
}
}