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

354 lines
14 KiB
PHP
Executable File

<?php
namespace App\Package;
use Illuminate\Http\Request;
class Payment extends Reference implements Tap{
protected $CARD_SET = false;
public function __construct($config = []){
foreach ($this->REQUIRED_CONFIG_VARS as $parm => $req_status) {
if (key_exists($parm,$config)) {
$this->CONFIG_VARS[$parm] = $config[$parm];
}else{
if($req_status){
throw new \InvalidArgumentException("InvalidArgumentException $parm field");
}
}
}
}
public function card(Request $request,$data){
$this->cardValidator($data);
$IP = $request->ip();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/tokens",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"card\":{\"number\": ".$this->CARD_VARS['number']." ,\"exp_month\":".$this->CARD_VARS['exp_month'].",\"exp_year\":".$this->CARD_VARS['exp_year'].",\"cvc\":".$this->CARD_VARS['cvc'].",\"name\":\"".$this->CARD_VARS['name']."\",\"address\":{\"country\":\" ".$this->CARD_VARS['country']." \",\"line1\":\" ".$this->CARD_VARS['line1']." \",\"city\":\"".$this->CARD_VARS['city']."\",\"street\":\"".$this->CARD_VARS['street']."\",\"avenue\":\"".$this->CARD_VARS['avenue']."\"}},\"client_ip\":\"".$IP."\"}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \InvalidArgumentException("InvalidArgumentException $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \InvalidArgumentException("Error : ".$json_response->errors[0]->code." ");
}
if (isset($json_response->object) && $json_response->object == "token") {
$this->CHARGE_VARS['source']['id'] = $json_response->id;
$CARD_SET = true;
}
}
}
public function charge($data = [],$redirect = true){
$this->chargeValidator($data);
$curl = curl_init();
if($this->CARD_SET){
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/charges",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"amount\":".$this->CHARGE_VARS['amount'].",\"currency\":\"".$this->CHARGE_VARS['currency']."\",\"threeDSecure\":".$this->CHARGE_VARS['threeDSecure'].",\"save_card\":".(string)$this->CHARGE_VARS['save_card'].",\"description\":\"".$this->CHARGE_VARS['description']."\",
\"statement_descriptor\":\"".$this->CHARGE_VARS['statement_descriptor']."\",\"metadata\":{\"udf1\":\"".$this->CHARGE_VARS['metadata']['udf1']."\",
\"udf2\":\"".$this->CHARGE_VARS['metadata']['udf2']."\"},\"reference\":{\"transaction\":\"".$this->CHARGE_VARS['reference']['transaction']."\",
\"order\":\"".$this->CHARGE_VARS['reference']['order']."\"},\"receipt\":{\"email\":".$this->CHARGE_VARS['receipt']['email'].",
\"sms\":".$this->CHARGE_VARS['receipt']['sms']."},\"customer\":{\"first_name\":\"".$this->CHARGE_VARS['customer']['first_name']."\",
\"middle_name\":\"".$this->CHARGE_VARS['customer']['middle_name']."\",\"last_name\":\"".$this->CHARGE_VARS['customer']['last_name']."\",
\"email\":\"".$this->CHARGE_VARS['customer']['email']."\",\"phone\":{\"country_code\":\"".$this->CHARGE_VARS['customer']['phone']['country_code']."\",
\"number\":\"".$this->CHARGE_VARS['customer']['phone']['number']."\"}},
\"source\":{\"object\":\"token\",\"id\":\"".$this->CHARGE_VARS['source']['id']."\"},\"post\":{\"url\":\"".$this->CHARGE_VARS['post']['url']."\"},
\"redirect\":{\"url\":\"".$this->CHARGE_VARS['redirect']['url']."\"}}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
}else{
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/charges",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"amount\":".$this->CHARGE_VARS['amount'].",\"currency\":\"".$this->CHARGE_VARS['currency']."\",\"threeDSecure\":".$this->CHARGE_VARS['threeDSecure'].",\"save_card\":".(string)$this->CHARGE_VARS['save_card'].",\"description\":\"".$this->CHARGE_VARS['description']."\",
\"statement_descriptor\":\"".$this->CHARGE_VARS['statement_descriptor']."\",\"metadata\":{\"udf1\":\"".$this->CHARGE_VARS['metadata']['udf1']."\",
\"udf2\":\"".$this->CHARGE_VARS['metadata']['udf2']."\"},\"reference\":{\"transaction\":\"".$this->CHARGE_VARS['reference']['transaction']."\",
\"order\":\"".$this->CHARGE_VARS['reference']['order']."\"},\"receipt\":{\"email\":".$this->CHARGE_VARS['receipt']['email'].",
\"sms\":".$this->CHARGE_VARS['receipt']['sms']."},\"customer\":{\"first_name\":\"".$this->CHARGE_VARS['customer']['first_name']."\",
\"middle_name\":\"".$this->CHARGE_VARS['customer']['middle_name']."\",\"last_name\":\"".$this->CHARGE_VARS['customer']['last_name']."\",
\"email\":\"".$this->CHARGE_VARS['customer']['email']."\",\"phone\":{\"country_code\":\"".$this->CHARGE_VARS['customer']['phone']['country_code']."\",
\"number\":\"".$this->CHARGE_VARS['customer']['phone']['number']."\"}},\"merchant\":{\"id\":\"".$this->CHARGE_VARS['merchant']['id']."\"},
\"source\":{\"id\":\"".$this->CHARGE_VARS['source']['id']."\"},\"post\":{\"url\":\"".$this->CHARGE_VARS['post']['url']."\"},
\"redirect\":{\"url\":\"".$this->CHARGE_VARS['redirect']['url']."\"}}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
}
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$json_response->errors[0]->code."");
}
if (isset($json_response->object) && $json_response->object == "charge" && isset($json_response->transaction->url)) {
if($redirect){
return redirect($json_response->transaction->url);
}
return $json_response;
}else{
throw new \Exception("Error : ".$json_response." ");
}
}
}
public function getCharge($charge_id){
if ($charge_id != null) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/charges/$charge_id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => "{}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$json_response->errors[0]->code." ");
}
if (isset($json_response->object) && $json_response->object == "charge" && isset($json_response->id)) {
return $json_response;
}else{
throw new \Exception("Error : ".$response." ");
}
}
}
return false;
}
public function chargesList($options = array()){
$this->chargesListValidator($options);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/charges/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"period\":{\"date\":{\"from\":".$this->CHARGES_FILTER['period']['date']['from'].",\"to\":".$this->CHARGES_FILTER['period']['date']['to']."}},\"status\":\" ".$this->CHARGES_FILTER['status']." \",\"limit\":".$this->CHARGES_FILTER['limit']."}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$json_response->errors[0]->code." ");
}
if (isset($json_response->object_type) && $json_response->object_type == "list") {
return $json_response;
}else{
throw new \Exception("Error : ".$response." ");
}
}
return false;
}
public function refund($data = []){
$this->refungValidator($data);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/refunds",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"charge_id\":\"".$this->REFUND_VARS['charge_id']."\",\"amount\":".$this->REFUND_VARS['amount'].",\"currency\":\"".$this->REFUND_VARS['currency']."\",\"description\":\"".$this->REFUND_VARS['description']."\",\"reason\":\"".$this->REFUND_VARS['reason']."\",
\"reference\":{\"merchant\":\"".$this->REFUND_VARS['reference']['merchant']."\"},\"metadata\":{\"udf1\":\"".$this->REFUND_VARS['metadata']['udf1']."\",\"udf2\":\"".$this->REFUND_VARS['metadata']['udf2']."\"},\"post\":{\"url\":\"".$this->REFUND_VARS['post']['url']."\"}}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$response." ");
}
if (isset($json_response->object) && $json_response->object == "refund") {
return $json_response;
}else{
throw new \Exception("Error : ".$response." ");
}
}
return false;
}
public function getRefund($refund_id){
if ($refund_id == null) {
throw new \InvalidArgumentException("InvalidArgumentException refund_id required");
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/refunds/$refund_id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => "{}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$json_response->errors[0]->code." ");
}
if (isset($json_response->object) && $json_response->object == "refund") {
return $json_response;
}else{
throw new \Exception("Error : ".$response." ");
}
}
return false;
}
public function refundList($options = []){
$this->refundsListValidator($options);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.tap.company/v2/refunds/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"period\":{\"date\":{\"from\":".$this->REFUNDS_FILTER['period']['date']['from'].",\"to\":".$this->REFUNDS_FILTER['period']['date']['to']."}},\"starting_after\":\"\",\"limit\":".$this->REFUNDS_FILTER['limit']."}",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer ".$this->CONFIG_VARS['company_tap_secret_key']." ",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
throw new \Exception("Exception $err");
} else {
$json_response = json_decode($response);
if (isset($json_response->errors) && is_array($json_response->errors) && count($json_response->errors) > 0) {
throw new \Exception("Error : ".$json_response->errors[0]->code." ");
}
if (isset($json_response->object) && $json_response->object == "list") {
return $json_response;
}else{
throw new \Exception("Error : ".$response." ");
}
}
return false;
}
}