| Current Path : /var/www/html/app/code/FlipsDigital/HappyMind/Cron/ |
| Current File : /var/www/html/app/code/FlipsDigital/HappyMind/Cron/PaymentStatusDailyUpdate.php |
<?php
namespace FlipsDigital\HappyMind\Cron;
use \Zend\Log\Writer\Stream;
use \Zend\Log\Logger;
class PaymentStatusDailyUpdate
{
protected $_className = __CLASS__;
public function __construct(
\Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
\Magento\Framework\HTTP\Client\Curl $curl,
\FlipsDigital\HktGateway\Controller\Auth\Jwt $jwtAuth,
\FlipsDigital\CustomerTextbookList\Model\CustomerTextbookListFactory $customerTextbookListFactory,
\FlipsDigital\HktGateway\Model\PaymentLogFactory $paymentLogFactory,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository
)
{
$this->_timezone = $timezone;
$this->_curl = $curl;
$this->_jwtAuth = $jwtAuth;
$this->_ctlFactory = $customerTextbookListFactory;
$this->_paymentLogFactory = $paymentLogFactory;
$this->_orderRepository = $orderRepository;
$arrClassName = explode('\\', $this->_className);
$logFile = BP . '/var/log/cron' . array_pop($arrClassName) . '.log';
$writer = new Stream($logFile);
$this->_logger = new Logger();
$this->_logger->addWriter($writer);
}
public function execute()
{
return;
// TODO: Implement execute() method.
$this->_logger->info("START: " . __METHOD__ );
$objCTL = $this->_ctlFactory->create();
$collectionCTL = $objCTL->getCollection();
$collectionCTL->addAttributeToSelect('*');
$collectionCTL->addFieldToFilter('order_id', ['null' => true]);
$collectionCTL->addFieldToFilter('transaction_id', ['neq' => 'null']);
$collectionCTL->addFieldToFilter('prepare_oder_id', ['neq' => '0']);
$collectionCTL->addFieldToFilter('payment_status', ['null' => true]);
$collectionCTL->setOrder('entity_id','ASC');
if ($collectionCTL->count()){
foreach ($collectionCTL->getItems() as $key => $value) {
$this->_logger->info("Customer Textbook - ".$value->getData('entity_id'));
$payment_method = $value->getData('payment_method');
$transaction_id = $value->getData('transaction_id');
$magento_order_id = $value->getData('prepare_oder_id');
$logData = [];
$logData['identifier'] = $transaction_id;
$logData['create_at'] = $this->_timezone->date()->format('Y-m-d H:i:s');
$logData['magento_order_id'] = $magento_order_id;
$order = $this->_orderRepository->get($magento_order_id);
$magento_order_status = $order->getStatus();
$this->_logger->info("Payment Method: ".$payment_method);
$this->_logger->info("Transaction Id: ".$transaction_id);
if($payment_method == 'payment_tng_fps'){
// Production - support FPS
$app_id = '6298738225';
$app_secret = 'EJb+j4zUZyxAG6WgS3rbbbLErJUAUh++idbTygD1BTS8IoxFSXOcxGvh3Efg5QVx+VkKSXHV5ZFHb4viIkkD4w==';
$public_key = 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn5HOyqvf5MJon7qktLaxXQ8vkI/Z0cvsp8MjkZU9ZY2PFiXr7shumVFM9k3gIKzpplkWywC01cBoWLiIGD+UCxkqm/tnivDzFTLNf3xucPMJWqTmnj66IdZu4+msv4UVgv2Y00tfXBtr+eqYSif9SDNmyQ/ceHwHBZisnQB9mQil1HIdvEi62X3+l8EDOd3bYoxMQ54s4RfLdX8feww2Cfir98hTaFBdW77ETKfrca7sy6+i6Uo59IOlUZvmSz7Nor3oJsvdw0Ga2yrPD//A6w+Z6E1FtwK8Ug7U9pPfpf+o249U9AUj2w92K5Pbi6kEgkmfF8XlsipHuTwcwRJqqHEv5j6JdYAZcUZAl+s9iWE83eff3fSv19ope1FhbOzuFVYgEl97BAUOVDyENtSnLqY5zM8bfdtJxzrafMdDCUMq/hbgfiSB6e13s+SCxwqxBFOfDgQwNQqSjcXc47z0VCMHnWqdg9x3QihrSTa2khxgZtTTLsm/opB7GR1OEdtqPKg43xSUHQsjL866JkGCmHYn2ey6LVxDB6crVkdHtDmbfyyfW+oF81iqYzvAIIjSJmj82Dlv5SG9xVvVHzAJ7MdZyU02XcCXaFmEXuBrFEHeULrUCh70RosvRJtyk18xB4ST3INctqP6rFkzA00FyZZ0nrPPbQqc+HQwaswVqGkCAwEAAQ==';
$api_url = 'https://gateway2.tapngo.com.hk/paymentApi/payment/status';
// UAT
// $app_id = '4278527199';
// $app_secret = '4qt3IzuyeTiznf8A8vG8zkvS+K/24YqLjmtIVI+hYXpCfqYau8kuzw/I2zwxay0K83ihsAwa9CinqnZlhwO/wg==';
// $public_key = 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs4YU4S9UfZNyl0V0s7fMTU71fJCvRb7yFhz3eNDnd+mazKYSQEo/BOEWrtcTSaioXLAu+EYIVXpbXYhd0rIjBhbwD6aw7QW57NBMD+i0L2rbRV+R3sCzfaDduWtQtdr1bYi8Bg1Oozmzjva3cSK8SetURi6QPr4Yakr0nfo8/y+0fu7FkUGGQT4uIzjleSmqJGZWnNRKLrEp+27i4C0uK1VuwQwmpWhs9ZoFs2cIG8+7GaMEFUPW/YMlgPL36yKqVcdthqxOM7bO0lsr/FWF2FTtNoX/CMUyIbfI10f+sBTRxIIGcHf8sbe4w7IGF9xMTVYSrSTYYnPflNxdfYR+/9CUxvNEW0niTfgV3fHN56Z22W62xOEa8ITsAKfNS+l6OBw5Jp7cNQzqjG3FA9CbyDgOMUfjobTAcvNL2+W58mybtsqj8c9SCdw38H3pC/HIdk+EyGdmfQRB2p1BbymgL+/5cf+OU1VjXuZaYljoOLVOG4clxaiEbYd+DJlaJm1sCFDHOuBrRSRIhMmbgPbaEczP6+IcRcGaJc1F9jermBay86eTAng4c8kb5vnwRB1noh7sZzeCSwCgJ23db1YzayNC8qqvNHikjLfHSXkOB8NrG8gqG/d21M9su82ACDpelUc6rN43Zxf3yrLbpEMGHbcFoUluI8oTL/IQTB8WkgkCAwEAAQ==';
// $api_url = 'https://gateway.sandbox.tapngo.com.hk/paymentApi/payment/status';
$time = time()*1000;
$queryStr = 'appId='.$app_id.'&merTradeNo='.$transaction_id.'×tamp='.$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',
];
$responseData = $this->_cURL($api_url, http_build_query($data), $header);
$logData['request_data'] = http_build_query($data);
$logData['response_data'] = $responseData;
// $demo_response = '{"content":{"chiMessage":"請求完成","engMessage":"Request Success","internal":"Request Success","payload":{"merTradeNo":"HM202207071415999","tradeNo":"AA0016495704","tradeStatus":"TRADE_FINISHED"},"resultCode":"0"},"sign":"0zt5A3OV2d7EcBE0BCBAUTbrwLKooJ4DobovwuR+bHGNgbazzu4g1ssciYfoMG4dZtgib04OCMWe2U86d0V9mA=="}';
// $demo_response = '{"content":{"chiMessage":"查詢付款資料不成功。 (Ref: ZA02)","engMessage":"Query payment status failed. (Ref: ZA02)","internal":"Query payment status failed. (Ref: ZA02)","resultCode":"493"},"sign":"ATsq2MABQ/fv+rHbJsL+6ZsrMOA5ZI+ZQPlxidsmMIM7AujFQvqBEKXAfL9aeP8Zn4/yQ81/sIiAe4Xfhvtn8g=="}';
// $responseData = $demo_response;
$responseData = json_decode($responseData);
$resultCode = $responseData->content->resultCode;
if($resultCode == 0){
$tradeStatus = $responseData->content->payload->tradeStatus;
$logData['payment_status'] = $tradeStatus;
switch($tradeStatus){
case 'TRADE_FINISHED':
$value->setData('order_id', $magento_order_id);
$value->setData('prepare_oder_id', 'completed');
$value->setData('payment_amount', $order->getGrandTotal());
$magento_order_status = \Magento\Sales\Model\Order::STATE_COMPLETE;
break;
case 'TRADE_CLOSED':
$value->setData('prepare_oder_id', '0');
$magento_order_status = \Magento\Sales\Model\Order::STATE_CANCELED;
break;
}
$value->save();
}else{
$logData['payment_status'] = $responseData->content->internal;
}
$this->_logger->info("API Payment Status: ".$logData['payment_status']);
}else{
switch($payment_method) {
case 'payment_alipay_hk':
$app_id = '0068808214';
$app_secret = 'dbzhfkGI2f3eOlwsqxhEABz7z1sn7PB9A5YG4VrDA7OAeQvL3GVArnemYkOeSHgdT9hD2CGR/nJYPjvG3OPhyw==';
$api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/alipayhk/transactions/orderStatus';
break;
case 'payment_alipay_cn':
$app_id = '7841813081';
$app_secret = '/P6yAbskjS0K25fH6Om8kxkdVgqpJRaarxpXNOmNoTmfSqvwaO3A+e4i0xzrnxDBE/1Np7a1r14uTwzcgTnGQA==';
$api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/alipaycn/transactions/orderStatus';
break;
case 'payment_visa_master':
$app_id = '8198364860';
$app_secret = 'YX8chyKVNHYKN2u2AXMynVoQEpAvvqYL86wNNIoPOz9aAdKBCG96xg+n7x4VdHaTQiv/wSPIIRQmi9pQvK9SNg==';
$api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/visamastercard/v2/transactions/orderStatus';
break;
case 'payment_wechatpay':
$app_id = '2516279849';
$app_secret = 'CpswD/217CJqvCmaZqKpOkwhh4SyU0wlZX6OaW45tuC0gOro57RnMDu8LpBO9ma/v0ppmWEN8VtKrCmGOUIbSg==';
$api_url = 'https://gateway2.tapngo.com.hk/ePaymentGateway/wechatpay/transactions/orderStatus';
break;
}
$payload = [
"sub" => $app_id,
"iat" => time()
];
$token = $this->_jwtAuth->getToken($payload, $app_secret);
$authorization = "Authorization: Bearer ".$token;
$data = [
'merchantTransactionId' => $transaction_id,
];
$header = [
'Content-Type: application/json',
$authorization,
];
$responseData = $this->_cURL($api_url, json_encode($data), $header);
$logData['request_data'] = json_encode($data);
$logData['response_data'] = $responseData;
$responseData = json_decode($responseData);
$responseStatus = $responseData->status;
$transactionState = '';
if($responseStatus == 0){
if($payment_method == 'payment_visa_master'){
if(count($responseData->payload->transactions) >= 2){
$transactionState = $responseData->payload->transactions[1]->transactionState;
if($transactionState == 'CAPTURED'){
$transactionState = 'COMPLETED';
}
}
}else{
if(isset($responseData->payload->transactions[0]->transactionState)){
$transactionState = $responseData->payload->transactions[0]->transactionState;
}
}
$logData['payment_status'] = $transactionState;
switch($transactionState){
case 'COMPLETED':
$value->setData('order_id', $magento_order_id);
$value->setData('prepare_oder_id', 'completed');
$value->setData('payment_amount', $responseData->payload->capturedChargeTotal);
$magento_order_status = \Magento\Sales\Model\Order::STATE_COMPLETE;
break;
case 'FAILED':
$value->setData('prepare_oder_id', '0');
$magento_order_status = \Magento\Sales\Model\Order::STATE_CANCELED;
break;
}
$value->save();
}else{
$logData['payment_status'] = $responseData->message;
}
$this->_logger->info("API Payment Status: ".$logData['payment_status']);
}
$this->_logger->info("Order Id: ".$magento_order_id." | Order Status: ".$magento_order_status);
$order->setStatus($magento_order_status)->setState($magento_order_status);
$this->_orderRepository->save($order);
$objPaymentLog = $this->_paymentLogFactory->create();
$objPaymentLog->setData($logData);
$objPaymentLog->save();
}
}else{
$this->_logger->info("All payment status checked.");
}
$this->_logger->info("END: " . __METHOD__ );
}
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;
}
}