Your IP : 216.73.216.220


Current Path : /var/www/html/app/code/FlipsDigital/HktGateway/Helper/
Upload File :
Current File : /var/www/html/app/code/FlipsDigital/HktGateway/Helper/OrderStatus.php

<?php

namespace FlipsDigital\HktGateway\Helper;
use \Magento\Framework\App\Helper\AbstractHelper;
// use \FlipsDigital\HktGateway\Controller\Auth\Jwt;

class OrderStatus extends AbstractHelper
{
    public function __construct(
        \FlipsDigital\HktGateway\Controller\Auth\Jwt $jwtAuth,
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
        \FlipsDigital\HktGateway\Model\PaymentLogFactory $paymentLogFactory
    )
    {
        $this->_jwtAuth = $jwtAuth;
        $this->_timezone = $timezone;
        $this->_paymentLogFactory = $paymentLogFactory;
    }
    public function getStoreConfig()
    {
        return true;
    }
    public function alipayHK($transaction_id)
    {
        $transaction_status = 'PENDING';
        $logData = [];
        $logData['identifier'] = $transaction_id;
        $app_id = '0068808214';
        $app_secret = 'dbzhfkGI2f3eOlwsqxhEABz7z1sn7PB9A5YG4VrDA7OAeQvL3GVArnemYkOeSHgdT9hD2CGR/nJYPjvG3OPhyw==';
        $api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/alipayhk/transactions/orderStatus';
        
        $data = $this->_apiRequestData($transaction_id);
        $logData['request_data'] = json_encode($data);
        $header = $this->_apiHeader($app_id, $app_secret);
        $responseData = $this->_cURL($api_url, json_encode($data), $header);
        $logData['response_data'] = $responseData;
        $responseData = json_decode($responseData);
        $api_status_code = $responseData->status;

        if($api_status_code == 0){
            // "COMPLETED", "FAILED", "PENDING"
            $transaction_status = $this->_getTransactionStatus($responseData);
            $logData['payment_status'] = $transaction_status;
        }else{
            $logData['payment_status'] = $api_status_code.': '.$responseData->message;
        }
        $this->_createPaymentLog($logData);

        return $transaction_status;
    }
    public function alipayCN($transaction_id)
    {
        $transaction_status = 'PENDING';
        $logData = [];
        $logData['identifier'] = $transaction_id;
        $app_id = '7841813081';
        $app_secret = '/P6yAbskjS0K25fH6Om8kxkdVgqpJRaarxpXNOmNoTmfSqvwaO3A+e4i0xzrnxDBE/1Np7a1r14uTwzcgTnGQA==';
        $api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/alipaycn/transactions/orderStatus';
        
        $data = $this->_apiRequestData($transaction_id);
        $logData['request_data'] = json_encode($data);
        $header = $this->_apiHeader($app_id, $app_secret);
        $responseData = $this->_cURL($api_url, json_encode($data), $header);
        $logData['response_data'] = $responseData;
        $responseData = json_decode($responseData);
        $api_status_code = $responseData->status;

        if($api_status_code == 0){
            // "COMPLETED", "FAILED", "PENDING"
            $transaction_status = $this->_getTransactionStatus($responseData);
            $logData['payment_status'] = $transaction_status;
        }else{
            $logData['payment_status'] = $api_status_code.': '.$responseData->message;
        }
        $this->_createPaymentLog($logData);

        return $transaction_status;
    }
    public function visaMaster($transaction_id)
    {
        $transaction_status = 'PENDING';
        $logData = [];
        $logData['identifier'] = $transaction_id;
        $app_id = '8198364860';
        $app_secret = 'YX8chyKVNHYKN2u2AXMynVoQEpAvvqYL86wNNIoPOz9aAdKBCG96xg+n7x4VdHaTQiv/wSPIIRQmi9pQvK9SNg==';
        $api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/visamastercard/v2/transactions/orderStatus';
        
        $data = $this->_apiRequestData($transaction_id);
        $logData['request_data'] = json_encode($data);
        $header = $this->_apiHeader($app_id, $app_secret);
        $responseData = $this->_cURL($api_url, json_encode($data), $header);
        $logData['response_data'] = $responseData;
        $responseData = json_decode($responseData);
        $api_status_code = $responseData->status;

        if($api_status_code == 0){
            // "TEMPLATE", "CAPTURED", "DECLINED", "FAILED"
            if(isset($responseData->payload->transactions[1]->transactionState)){
                $transaction_status = $responseData->payload->transactions[1]->transactionState;
            }else{
                if(strtotime($responseData->payload->transactions[0]->paymentUrlExpireTimestamp) < time()){
                    $transaction_status = 'FAILED';
                }
            }
            $logData['payment_status'] = $transaction_status;
        }else{
            $logData['payment_status'] = $api_status_code.': '.$responseData->message;
        }
        $this->_createPaymentLog($logData);

        return $transaction_status;
    }
    public function wechatpay($transaction_id)
    {
        $transaction_status = 'PENDING';
        $logData = [];
        $logData['identifier'] = $transaction_id;
        $app_id = '2516279849';
        $app_secret = 'CpswD/217CJqvCmaZqKpOkwhh4SyU0wlZX6OaW45tuC0gOro57RnMDu8LpBO9ma/v0ppmWEN8VtKrCmGOUIbSg==';
        $api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/wechatpay/transactions/orderStatus';
        
        $data = $this->_apiRequestData($transaction_id);
        $logData['request_data'] = json_encode($data);
        $header = $this->_apiHeader($app_id, $app_secret);
        $responseData = $this->_cURL($api_url, json_encode($data), $header);
        $logData['response_data'] = $responseData;
        $responseData = json_decode($responseData);
        $api_status_code = $responseData->status;

        if($api_status_code == 0){
            // "COMPLETED", "FAILED", "PENDING"
            $transaction_status = $this->_getTransactionStatus($responseData);
            $logData['payment_status'] = $transaction_status;
        }else{
            $logData['payment_status'] = $api_status_code.': '.$responseData->message;
        }
        $this->_createPaymentLog($logData);

        return $transaction_status;
    }
    public function tapngo($transaction_id)
    {
        // Production - support FPS
        $app_id = '6298738225';
        $app_secret = 'EJb+j4zUZyxAG6WgS3rbbbLErJUAUh++idbTygD1BTS8IoxFSXOcxGvh3Efg5QVx+VkKSXHV5ZFHb4viIkkD4w==';
        $api_url = 'https://gateway2.tapngo.com.hk/paymentApi/payment/status';

        // UAT
        // $app_id = '4278527199';
        // $app_secret = '4qt3IzuyeTiznf8A8vG8zkvS+K/24YqLjmtIVI+hYXpCfqYau8kuzw/I2zwxay0K83ihsAwa9CinqnZlhwO/wg==';
        // $api_url = 'https://gateway.sandbox.tapngo.com.hk/paymentApi/payment/status';

        $logData = [];
        $logData['identifier'] = $transaction_id;
        $time = time()*1000;
        $queryStr = 'appId='.$app_id.'&merTradeNo='.$transaction_id.'&timestamp='.$time;
        $sign = hash_hmac('sha512', $queryStr, $app_secret, true);
        $data = [
            'appId' => $app_id,
            'merTradeNo' => $transaction_id,
            'timestamp' => $time,
            'sign' => base64_encode($sign),
        ];
        $header = [
            'Content-Type: application/x-www-form-urlencoded',
            'Accept: application/json',
        ];
        $logData['request_data'] = http_build_query($data);
        $responseData = $this->_cURL($api_url, http_build_query($data), $header);
        $logData['response_data'] = $responseData;
        $responseData = json_decode($this->_cURL($api_url, http_build_query($data), $header));
        $api_status_code = $responseData->content->resultCode;
        
        if($api_status_code == 0){
            // TRADE_FINISHED – payment success, TRADE_CLOSED – payment cancelled / failed, WAIT_TO_PAY – payment is processing
            $transaction_status = $responseData->content->payload->tradeStatus;
        }else{
            $transaction_status = 'FAILED';
        }
        $logData['payment_status'] = $transaction_status;
        $this->_createPaymentLog($logData);
        
        return $transaction_status;
    }
    protected function _cURL($api_url, $data, $header)
    {
        $ch = curl_init();
        $options = [
            CURLOPT_URL => $api_url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_HTTPHEADER => $header
        ];
        curl_setopt_array($ch, $options);
        $response = curl_exec($ch);
        curl_close($ch);
        return $response;
    }
    protected function _apiHeader($app_id, $app_secret)
    {
        $payload = [
            "sub" => $app_id,
            "iat" => time()
        ];
        $token = $this->_jwtAuth->getToken($payload, $app_secret);
        $authorization = "Authorization: Bearer ".$token;
        $header = [
            'Content-Type: application/json',
            $authorization,
        ];
        return $header;
    }
    protected function _apiRequestData($transaction_id)
    {
        $data = [
            'merchantTransactionId' => $transaction_id,
        ];
        return $data;
    }
    protected function _getTransactionStatus($responseData)
    {
        if(isset($responseData->payload->transactions[0]->transactionState)){
            $transaction_status = $responseData->payload->transactions[0]->transactionState;
        }else{
            $transaction_status = 'FAILED';
        }
        return $transaction_status;
    }
    protected function _createPaymentLog($logData)
    {
        $logData['create_at'] = $this->_timezone->date()->format('Y-m-d H:i:s');
        $objPaymentLog = $this->_paymentLogFactory->create();
        $objPaymentLog->setData($logData);
        $objPaymentLog->save();
    }
}