Nguyễn Tiến Dũng 3d31201a05 11/5/2022
2022-05-11 21:09:39 +07:00

789 lines
31 KiB
PHP

<?php
namespace App\Http\Controllers\dgaAdmin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class MomoApi extends Controller
{
private $BankId = array(
'BIDV' => array(
'partnerCode' => '110',
),
'VTB' => array(
'partnerCode' => '102',
),
'MB' => array(
'partnerCode' => '301',
),
'ACB' => array(
'partnerCode' => '115',
),
'VCB' => array(
'partnerCode' => '12345',
),
'VPB' => array(
'partnerCode' => '103',
),
'VIB' => array(
'partnerCode' => '113',
),
'EXB' => array(
'partnerCode' => '107',
),
'OCB' => array(
'partnerCode' => '104',
),
'SCB' => array(
'partnerCode' => '111',
),
);
private $ohash;
private $TimeSetUp = 600; // seconds
private $amount = 100000;
private $hours = 200;
private $keys;
private $send = array();
private $rsa;
private $URLAction = array(
"CHECK_USER_BE_MSG" => "https://api.momo.vn/backend/auth-app/public/CHECK_USER_BE_MSG", //Check người dùng
"SEND_OTP_MSG" => "https://api.momo.vn/backend/otp-app/public/SEND_OTP_MSG", //Gửi OTP
"REG_DEVICE_MSG" => "https://api.momo.vn/backend/otp-app/public/REG_DEVICE_MSG", // Xác minh OTP
"QUERY_TRAN_HIS_MSG" => "https://owa.momo.vn/api/QUERY_TRAN_HIS_MSG", // Check ls giao dịch
"USER_LOGIN_MSG" => "https://owa.momo.vn/public/login", // Đăng Nhập
"QUERY_TRAN_HIS_MSG_NEW" => "https://m.mservice.io/hydra/v2/user/noti", // check ls giao dịch
"M2MU_INIT" => "https://owa.momo.vn/api/M2MU_INIT", // Chuyển tiền
"M2MU_CONFIRM" => "https://owa.momo.vn/api/M2MU_CONFIRM", // Chuyển tiền
"LOAN_MSG" => "https://owa.momo.vn/api/LOAN_MSG", // yêu cầu chuyển tiền
'M2M_VALIDATE_MSG' => 'https://owa.momo.vn/api/M2M_VALIDATE_MSG', // Ko rõ chức năng
'CHECK_USER_PRIVATE' => 'https://owa.momo.vn/api/CHECK_USER_PRIVATE', // Check người dùng ẩn
'TRAN_HIS_INIT_MSG' => 'https://owa.momo.vn/api/TRAN_HIS_INIT_MSG', // Rút tiền, chuyển tiền
'TRAN_HIS_CONFIRM_MSG' => 'https://owa.momo.vn/api/TRAN_HIS_CONFIRM_MSG', // rút tiền chuyển tiền
'GET_CORE_PREPAID_CARD' => 'https://owa.momo.vn/api/sync/GET_CORE_PREPAID_CARD',
'ins_qoala_phone' => 'https://owa.momo.vn/proxy/ins_qoala_phone',
'GET_DETAIL_LOAN' => 'https://owa.momo.vn/api/GET_DETAIL_LOAN', // Get danh sách yêu cầu chuyển
'LOAN_UPDATE_STATUS' => 'https://owa.momo.vn/api/LOAN_UPDATE_STATUS', // Từ chỗi chuyển tiền
'CANCEL_LOAN_REQUEST' => 'https://owa.momo.vn/api/CANCEL_LOAN_REQUEST', // Huỷe chuyển tiền
'LOAN_SUGGEST' => 'https://owa.momo.vn/api/LOAN_SUGGEST',
'STANDARD_LOAN_REQUEST' => 'https://owa.momo.vn/api/STANDARD_LOAN_REQUEST',
'SAY_THANKS' => 'https://owa.momo.vn/api/SAY_THANKS', // Gửi lời nhắn khi nhận tiền
'HEARTED_TRANSACTIONS' => 'https://owa.momo.vn/api/HEARTED_TRANSACTIONS',
'VERIFY_MAP' => 'https://owa.momo.vn/api/VERIFY_MAP', // Liên kết ngân hàng
'service' => "https://owa.momo.vn/service", // Check ngân hàng qua stk
'NEXT_PAGE_MSG' => 'https://owa.momo.vn/api/NEXT_PAGE_MSG', // mua thẻ điện thoại
'dev_backend_gift-recommend' => 'https://owa.momo.vn/proxy/dev_backend_gift-recommend', // check gift
'ekyc_init' => 'https://owa.momo.vn/proxy/ekyc_init', // Xác minh cmnd
'ekyc_ocr' => 'https://owa.momo.vn/proxy/ekyc_ocr', // xác minh cmnd
'GetDataStoreMsg' => 'https://owa.momo.vn/api/GetDataStoreMsg', // Get danh sách ngân hàng đã chuyển
'VOUCHER_GET' => 'https://owa.momo.vn/api/sync/VOUVHER_GET', // get voucher
'END_USER_QUICK_REGISTER' => 'https://api.momo.vn/backend/auth-app/public/END_USER_QUICK_REGISTER', // đăng kí
'AGENT_MODIFY' => 'https://api.momo.vn/backend/auth-app/api/AGENT_MODIFY', // Cập nhật tên email
'ekyc_ocr_result' => 'https://owa.momo.vn/proxy/ekyc_ocr_result', // xác minh cmnd
'CHECK_INFO' => 'https://owa.momo.vn/api/CHECK_INFO', // Check hóa đơn
'BANK_OTP' => 'https://owa.momo.vn/api/BANK_OTP', // Rút tiền
'SERVICE_UNAVAILABLE' => 'https://owa.momo.vn/api/SERVICE_UNAVAILABLE', // Bên bảo mật
'ekyc_ocr_confirm' => 'https://owa.momo.vn/proxy/ekyc_ocr_confirm', //Xác minh cmnd
'sync' => 'https://owa.momo.vn/api/sync', // Lấy biến động số dư
'MANAGE_CREDIT_CARD' => 'https://owa.momo.vn/api/MANAGE_CREDIT_CARD', //Thêm visa marter card
'UN_MAP' => 'https://owa.momo.vn/api/UN_MAP', // Hủy liên kết thẻ
'WALLET_MAPPING' => 'https://owa.momo.vn/api/WALLET_MAPPING', // Liên kết thẻ
'NAPAS_CASHIN_INIT_MSG' => 'https://owa.momo.vn/api/NAPAS_CASHIN_INIT_MSG',
"CARD_GET" => "https://owa.momo.vn/api/sync/CARD_GET",
'NAPAS_CASHIN_DELETE_TOKEN_MSG' => 'https://owa.momo.vn/api/NAPAS_CASHIN_DELETE_TOKEN_MSG',
'API_DEFAULT_SOURCE' => 'https://owa.momo.vn/api/API_DEFAULT_SOURCE'
);
private $momo_data_config = array(
"appVer" => 31110,
"appCode" => "3.1.11"
);
public function SendOTP($data)
{
$result = $this->SEND_OTP_MSG($data);
if ($result["errorCode"] != 0) {
return array(
"status" => "error",
"code" => $result["errorCode"],
"message" => $result["errorDesc"]
);
} else {
return array(
"status" => "success",
"message" => "Thành công"
);
}
return $result;
}
private function SEND_OTP_MSG($data)
{
$header = array(
"agent_id: undefined",
"sessionkey:",
"user_phone: undefined",
"authorization: Bearer undefined",
"msgtype: SEND_OTP_MSG",
"Host: api.momo.vn",
"User-Agent: okhttp/3.14.17",
"app_version: " . $this->momo_data_config["appVer"],
"app_code: " . $this->momo_data_config["appCode"],
"device_os: ANDROID"
);
$microtime = $this->get_microtime();
$Data = array(
'user' => $data['phone'],
'msgType' => 'SEND_OTP_MSG',
'cmdId' => (string) $microtime . '000000',
'lang' => 'vi',
'time' => $microtime,
'channel' => 'APP',
'appVer' => $this->momo_data_config["appVer"],
'appCode' => $this->momo_data_config["appCode"],
'deviceOS' => 'ANDROID',
'buildNumber' => 0,
'appId' => 'vn.momo.platform',
'result' => true,
'errorCode' => 0,
'errorDesc' => '',
'momoMsg' =>
array(
'_class' => 'mservice.backend.entity.msg.RegDeviceMsg',
'number' => $data['phone'],
'imei' => $data["imei"],
'cname' => 'Vietnam',
'ccode' => '084',
'device' => $data["device"],
'firmware' => '23',
'hardware' => $data["hardware"],
'manufacture' => $data["facture"],
'csp' => '',
'icc' => '',
'mcc' => '452',
'device_os' => 'Ios',
'secure_id' => $data['SECUREID'],
),
'extra' =>
array(
'action' => 'SEND',
'rkey' => $data["rkey"],
'AAID' => $data["AAID"],
'IDFA' => '',
'TOKEN' => $data["TOKEN"],
'SIMULATOR' => '',
'SECUREID' => $data['SECUREID'],
'MODELID' => $data["MODELID"],
'isVoice' => false,
'REQUIRE_HASH_STRING_OTP' => true,
'checkSum' => '',
),
);
return $this->CURL("SEND_OTP_MSG", $header, $Data);
}
public function REG_DEVICE_MSG($data)
{
$microtime = $this->get_microtime();
$header = array(
"agent_id: undefined",
"sessionkey:",
"user_phone: undefined",
"authorization: Bearer undefined",
"msgtype: REG_DEVICE_MSG",
"Host: api.momo.vn",
"User-Agent: okhttp/3.14.17",
"app_version: " . $this->momo_data_config["appVer"],
"app_code: " . $this->momo_data_config["appCode"],
"device_os: ANDROID"
);
$Data = '{
"user": "' . $data["phone"] . '",
"msgType": "REG_DEVICE_MSG",
"cmdId": "' . $microtime . '000000",
"lang": "vi",
"time": ' . $microtime . ',
"channel": "APP",
"appVer": ' . $this->momo_data_config["appVer"] . ',
"appCode": "' . $this->momo_data_config["appCode"] . '",
"deviceOS": "ANDROID",
"buildNumber": 0,
"appId": "vn.momo.platform",
"result": true,
"errorCode": 0,
"errorDesc": "",
"momoMsg": {
"_class": "mservice.backend.entity.msg.RegDeviceMsg",
"number": "' . $data["phone"] . '",
"imei": "' . $data["imei"] . '",
"cname": "Vietnam",
"ccode": "084",
"device": "' . $data["device"] . '",
"firmware": "23",
"hardware": "' . $data["hardware"] . '",
"manufacture": "' . $data["facture"] . '",
"csp": "",
"icc": "",
"mcc": "",
"device_os": "Android",
"secure_id": "' . $data["SECUREID"] . '"
},
"extra": {
"ohash": "' . $data['ohash'] . '",
"AAID": "' . $data["AAID"] . '",
"IDFA": "",
"TOKEN": "' . $data["TOKEN"] . '",
"SIMULATOR": "",
"SECUREID": "' . $data["SECUREID"] . '",
"MODELID": "' . $data["MODELID"] . '",
"checkSum": ""
}
}';
return $this->CURL("REG_DEVICE_MSG", $header, $Data);
}
public function USER_LOGIN_MSG($data)
{
$microtime = $this->get_microtime();
$header = array(
"agent_id: " . $data["agent_id"],
"user_phone: " . $data["phone"],
"sessionkey: " . (!empty($data["sessionkey"])) ? $data["sessionkey"] : "",
"authorization: Bearer " . $data["authorization"],
"msgtype: USER_LOGIN_MSG",
"Host: owa.momo.vn",
"user_id: " . $data["phone"],
"User-Agent: okhttp/3.14.17",
"app_version: " . $this->momo_data_config["appVer"],
"app_code: " . $this->momo_data_config["appCode"],
"device_os: ANDROID"
);
$Data = array(
'user' => $data['phone'],
'msgType' => 'USER_LOGIN_MSG',
'pass' => $data['password'],
'cmdId' => (string) $microtime . '000000',
'lang' => 'vi',
'time' => $microtime,
'channel' => 'APP',
'appVer' => $this->momo_data_config["appVer"],
'appCode' => $this->momo_data_config["appCode"],
'deviceOS' => 'ANDROID',
'buildNumber' => 0,
'appId' => 'vn.momo.platform',
'result' => true,
'errorCode' => 0,
'errorDesc' => '',
'momoMsg' =>
array(
'_class' => 'mservice.backend.entity.msg.LoginMsg',
'isSetup' => false,
),
'extra' =>
array(
'pHash' => $this->get_pHash($data),
'AAID' => $data['AAID'],
'IDFA' => '',
'TOKEN' => $data['TOKEN'],
'SIMULATOR' => '',
'SECUREID' => $data['SECUREID'],
'MODELID' => $data['MODELID'],
'checkSum' => $this->generateCheckSum('USER_LOGIN_MSG', $microtime, $data),
),
);
return $this->CURL("USER_LOGIN_MSG", $header, $Data);
}
public function CheckHisNew($hours = 5, $data)
{
$begin = (time() - (3600 * $hours)) * 1000;
$header = array(
"authorization: Bearer " . $data["authorization"],
"user_phone: " . $data["phone"],
"sessionkey: " . $data["sessionkey"],
"agent_id: " . $data["agent_id"],
'app_version: ' . $this->momo_data_config["appVer"],
'app_code: ' . $this->momo_data_config["appCode"],
"Host: m.mservice.io"
);
$Data = '{
"userId": "' . $data['phone'] . '",
"fromTime": ' . $begin . ',
"toTime": ' . $this->get_microtime() . ',
"limit": 5000,
"cursor": "",
"cusPhoneNumber": ""
}';
$result = $this->CURL("QUERY_TRAN_HIS_MSG_NEW", $header, $Data);
if (!is_array($result)) {
return array(
"status" => "error",
"code" => -5,
"message" => "Hết thời gian truy cập vui lòng đăng nhập lại"
);
}
$tranHisMsg = $result["message"]["data"]["notifications"];
$return = array();
foreach ($tranHisMsg as $value) {
if($value["type"] != 77) continue;
$extra = json_decode($value["extra"],true);
$amount = $value['caption'];
$name = explode("từ", $amount)[1] ?: "";
if (strpos($amount, "Nhận") !== false && $name) {
preg_match('#Nhận (.+?)đ#is', $amount, $amount);
$amount = str_replace(".", "", $amount[1]) > 0 ? str_replace(".", "", $amount[1]) : '0';
//Cover body to comment
$comment = $value['body'];
$comment = ltrim($comment, '"');
$comment = explode('"', $comment);
$comment = $comment[0];
if ($comment == "Nhấn để xem chi tiết.") {
$comment = "";
}
$return[] = array(
"tranId" => $value["tranId"],
"ID" => $value["ID"],
"patnerID" => $value["sender"],
"partnerName" => $name,
"comment" => $comment,
"amount" => (int)$amount,
"millisecond" => $value["time"]
);
}
}
return array('status' => 'success', 'author' => 'DUNGA', 'data' => $return);
}
public function CHECK_USER_PRIVATE($receiver, $data)
{
$microtime = $this->get_microtime();
$requestkeyRaw = $this->generateRandom(32);
$requestkey = $this->RSA_Encrypt($data["RSA_PUBLIC_KEY"], $requestkeyRaw);
$header = array(
"agent_id: " . $data["agent_id"],
"user_phone: " . $data["phone"],
"sessionkey: " . $data["sessionkey"],
"authorization: Bearer " . $data["authorization"],
"msgtype: CHECK_USER_PRIVATE",
"userid: " . $data["phone"],
"requestkey: " . $requestkey,
"Host: owa.momo.vn"
);
$Data = '{
"user":"' . $data['phone'] . '",
"msgType":"CHECK_USER_PRIVATE",
"cmdId":"' . $microtime . '000000",
"lang":"vi",
"time":' . (int) $microtime . ',
"channel":"APP",
"appVer": ' . $this->momo_data_config["appVer"] . ',
"appCode": "' . $this->momo_data_config["appCode"] . '",
"deviceOS":"ANDROID",
"buildNumber":1916,
"appId":"vn.momo.transfer",
"result":true,
"errorCode":0,
"errorDesc":"",
"momoMsg":
{
"_class":"mservice.backend.entity.msg.LoginMsg",
"getMutualFriend":false
},
"extra":
{
"CHECK_INFO_NUMBER":"' . $receiver . '",
"checkSum":"' . $this->generateCheckSum('CHECK_USER_PRIVATE', $microtime, $data) . '"
}
}';
return $this->CURL("CHECK_USER_PRIVATE", $header, $this->Encrypt_data($Data, $requestkeyRaw));
}
public function CHECK_USER_BE_MSG($data)
{
$microtime = $this->get_microtime();
$header = array(
"agent_id: undefined",
"sessionkey:",
"user_phone: undefined",
"authorization: Bearer undefined",
"msgtype: CHECK_USER_BE_MSG",
"Host: api.momo.vn",
"User-Agent: okhttp/3.14.17",
"app_version: ".$this->momo_data_config["appVer"],
"app_code: ",
"device_os: ANDROID"
);
$Data = array (
'user' => $data['phone'],
'msgType' => 'CHECK_USER_BE_MSG',
'cmdId' => (string) $microtime. '000000',
'lang' => 'vi',
'time' => $microtime,
'channel' => 'APP',
'appVer' => $this->momo_data_config["appVer"],
'appCode' => $this->momo_data_config["appCode"],
'deviceOS' => 'ANDROID',
'buildNumber' => 0,
'appId' => 'vn.momo.platform',
'result' => true,
'errorCode' => 0,
'errorDesc' => '',
'momoMsg' =>
array (
'_class' => 'mservice.backend.entity.msg.RegDeviceMsg',
'number' => $data['phone'],
'imei' => $data["imei"],
'cname' => 'Vietnam',
'ccode' => '084',
'device' => $data["device"],
'firmware' => '23',
'hardware' => $data["hardware"],
'manufacture' => $data["facture"],
'csp' => 'Viettel',
'icc' => '',
'mcc' => '452',
'device_os' => 'Android',
'secure_id' => $data["SECUREID"],
),
'extra' =>
array (
'checkSum' => '',
),
);
return $this->CURL("CHECK_USER_BE_MSG",$header,$Data);
}
public function M2MU_INIT($dataPhone, $dataSend)
{
$microtime = $this->get_microtime();
$requestkeyRaw = $this->generateRandom(32);
$requestkey = $this->RSA_Encrypt($dataPhone["RSA_PUBLIC_KEY"],$requestkeyRaw);
$header = array(
"agent_id: ".$dataPhone["agent_id"],
"user_phone: ".$dataPhone["phone"],
"sessionkey: ".$dataPhone["sessionkey"],
"authorization: Bearer ".$dataPhone["authorization"],
"msgtype: M2MU_INIT",
"userid: ".$dataPhone["phone"],
"requestkey: ".$requestkey,
"Host: owa.momo.vn"
);
$ipaddress = $this->get_ip_address();
$Data = array (
'user' => $dataPhone['phone'],
'msgType' => 'M2MU_INIT',
'cmdId' => (string) $microtime.'000000',
'lang' => 'vi',
'time' => (int) $microtime,
'channel' => 'APP',
'appVer' => $this->momo_data_config["appVer"],
'appCode' => $this->momo_data_config["appCode"],
'deviceOS' => 'ANDROID',
'buildNumber' => 0,
'appId' => 'vn.momo.platform',
'result' => true,
'errorCode' => 0,
'errorDesc' => '',
'momoMsg' =>
array (
'clientTime' => (int) $microtime - 221,
'tranType' => 2018,
'comment' => $dataSend['comment'],
'amount' => $dataSend['amount'],
'partnerId' => $dataSend['receiver'],
'partnerName' => $dataSend['partnerName'],
'ref' => '',
'serviceCode' => 'transfer_p2p',
'serviceId' => 'transfer_p2p',
'_class' => 'mservice.backend.entity.msg.M2MUInitMsg',
'tranList' =>
array (
0 =>
array (
'partnerName' => $dataSend['partnerName'],
'partnerId' => $dataSend['receiver'],
'originalAmount' => $dataSend['amount'],
'serviceCode' => 'transfer_p2p',
'stickers' => '',
'themeBackground' => '#f5fff6',
'themeUrl' => 'https://cdn.mservice.com.vn/app/img/transfer/theme/Corona_750x260.png',
'transferSource' => '',
'socialUserId' => '',
'_class' => 'mservice.backend.entity.msg.M2MUInitMsg',
'tranType' => 2018,
'comment' => $dataSend['comment'],
'moneySource' => 1,
'partnerCode' => 'momo',
'serviceMode' => 'transfer_p2p',
'serviceId' => 'transfer_p2p',
'extras' => '{"loanId":0,"appSendChat":false,"loanIds":[],"stickers":"","themeUrl":"https://cdn.mservice.com.vn/app/img/transfer/theme/Corona_750x260.png","hidePhone":false,"vpc_CardType":"SML","vpc_TicketNo":"'.$ipaddress.'","vpc_PaymentGateway":""}',
),
),
'extras' => '{"loanId":0,"appSendChat":false,"loanIds":[],"stickers":"","themeUrl":"https://cdn.mservice.com.vn/app/img/transfer/theme/Corona_750x260.png","hidePhone":false,"vpc_CardType":"SML","vpc_TicketNo":"'.$ipaddress.'","vpc_PaymentGateway":""}',
'moneySource' => 1,
'partnerCode' => 'momo',
'rowCardId' => '',
'giftId' => '',
'useVoucher' => 0,
'prepaidIds' => '',
'usePrepaid' => 0,
),
'extra' =>
array (
'checkSum' => $this->generateCheckSum('M2MU_INIT', $microtime, $dataPhone),
),
);
return $this->CURL("M2MU_INIT",$header,$this->Encrypt_data($Data,$requestkeyRaw));
}
public function M2MU_CONFIRM($ID, $data, $dataSend)
{
$microtime = $this->get_microtime();
$requestkeyRaw = $this->generateRandom(32);
$requestkey = $this->RSA_Encrypt($data["RSA_PUBLIC_KEY"],$requestkeyRaw);
$header = array(
"agent_id: ".$data["agent_id"],
"user_phone: ".$data["phone"],
"sessionkey: ".$data["sessionkey"],
"authorization: Bearer ".$data["authorization"],
"msgtype: M2MU_INIT",
"userid: ".$data["phone"],
"requestkey: ".$requestkey,
"Host: owa.momo.vn"
);
$ipaddress = $this->get_ip_address();
$Data = array(
'user' => $data['phone'],
'pass' => $data['password'],
'msgType' => 'M2MU_CONFIRM',
'cmdId' => (string) $microtime.'000000',
'lang' => 'vi',
'time' =>(int) $microtime,
'channel' => 'APP',
'appVer' => $this->momo_data_config["appVer"],
'appCode' => $this->momo_data_config["appCode"],
'deviceOS' => 'ANDROID',
'buildNumber' => 0,
'appId' => 'vn.momo.platform',
'result' => true,
'errorCode' => 0,
'errorDesc' => '',
'momoMsg' =>
array(
'ids' =>
array (
0 => $ID,
),
'totalAmount' => $dataSend['amount'],
'originalAmount' => $dataSend['amount'],
'originalClass' => 'mservice.backend.entity.msg.M2MUConfirmMsg',
'originalPhone' => $data['phone'],
'totalFee' => '0.0',
'id' => $ID,
'GetUserInfoTaskRequest' => $dataSend['receiver'],
'tranList' =>
array (
0 =>
array(
'_class' => 'mservice.backend.entity.msg.TranHisMsg',
'user' => $data['phone'],
'clientTime' => (int) ($microtime - 211),
'tranType' => 36,
'amount' => (int) $dataSend['amount'],
'receiverType' => 1,
),
1 =>
array(
'_class' => 'mservice.backend.entity.msg.TranHisMsg',
'user' => $data['phone'],
'clientTime' => (int) ($microtime - 211),
'tranType' => 36,
'partnerId' => $dataSend['receiver'],
'amount' => 100,
'comment' => '',
'ownerName' => $data['Name'],
'receiverType' => 0,
'partnerExtra1' => '{"totalAmount":'.$dataSend['amount'].'}',
'partnerInvNo' => 'borrow',
),
),
'serviceId' => 'transfer_p2p',
'serviceCode' => 'transfer_p2p',
'clientTime' => (int) ($microtime - 211),
'tranType' => 2018,
'comment' => '',
'ref' => '',
'amount' => $dataSend['amount'],
'partnerId' => $dataSend['receiver'],
'bankInId' => '',
'otp' => '',
'otpBanknet' => '',
'_class' => 'mservice.backend.entity.msg.M2MUConfirmMsg',
'extras' => '{"appSendChat":false,"vpc_CardType":"SML","vpc_TicketNo":"'.$ipaddress.'"","vpc_PaymentGateway":""}',
),
'extra' =>
array(
'checkSum' => $this-> generateCheckSum('M2MU_CONFIRM',$microtime, $data),
),
);
return $this->CURL("M2MU_CONFIRM",$header,$this->Encrypt_data($Data,$requestkeyRaw));
}
private function CURL($Action, $header, $data)
{
$Data = is_array($data) ? json_encode($data) : $data;
$curl = curl_init();
// echo strlen($Data); die;
$header[] = 'Content-Type: application/json';
$header[] = 'accept: application/json';
$header[] = 'Content-Length: ' . strlen($Data);
$opt = array(
CURLOPT_URL => $this->URLAction[$Action],
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_POST => empty($data) ? FALSE : TRUE,
CURLOPT_POSTFIELDS => $Data,
CURLOPT_CUSTOMREQUEST => empty($data) ? 'GET' : 'POST',
CURLOPT_HTTPHEADER => $header,
CURLOPT_ENCODING => "",
CURLOPT_HEADER => FALSE,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_TIMEOUT => 20,
);
curl_setopt_array($curl, $opt);
$body = curl_exec($curl);
// echo strlen($body); die;
if (is_object(json_decode($body))) {
return json_decode($body, true);
}
return json_decode($this->Decrypt_data($body), true);
}
public function Decrypt_data($data)
{
$iv = pack('C*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return openssl_decrypt(base64_decode($data), 'AES-256-CBC', $this->keys, OPENSSL_RAW_DATA, $iv);
}
public function generateCheckSum($type, $microtime, $data)
{
$Encrypt = $data["phone"] . $microtime . '000000' . $type . ($microtime / 1000000000000.0) . 'E12';
$iv = pack('C*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return base64_encode(openssl_encrypt($Encrypt, 'AES-256-CBC', $data["setupKeyDecrypt"], OPENSSL_RAW_DATA, $iv));
}
private function get_pHash($data)
{
$key = $data["imei"] . "|" . $data["password"];
$iv = pack('C*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return base64_encode(openssl_encrypt($key, 'AES-256-CBC', $data['setupKeyDecrypt'], OPENSSL_RAW_DATA, $iv));
}
public function get_setupKey($setUpKey, $data)
{
$iv = pack('C*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
return openssl_decrypt(base64_decode($setUpKey), 'AES-256-CBC', $data["ohash"], OPENSSL_RAW_DATA, $iv);
}
public function generateRandom($length = 20)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
private function get_SECUREID($length = 17)
{
$characters = '0123456789abcdef';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
public function get_microtime()
{
return round(microtime(true) * 1000);
}
public function generateImei()
{
return $this->generateRandomString(8) . '-' . $this->generateRandomString(4) . '-' . $this->generateRandomString(4) . '-' . $this->generateRandomString(4) . '-' . $this->generateRandomString(12);
}
private function generateRandomString($length = 20)
{
$characters = '0123456789abcdef';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
public function get_TOKEN()
{
return $this->generateRandom(22) . ':' . $this->generateRandom(9) . '-' . $this->generateRandom(20) . '-' . $this->generateRandom(12) . '-' . $this->generateRandom(7) . '-' . $this->generateRandom(7) . '-' . $this->generateRandom(53) . '-' . $this->generateRandom(9) . '_' . $this->generateRandom(11) . '-' . $this->generateRandom(4);
}
public function Encrypt_data($data,$key)
{
$iv = pack('C*', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
$this->keys = $key;
return base64_encode(openssl_encrypt(is_array($data) ? json_encode($data) : $data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv));
}
public function RSA_Encrypt($key,$content)
{
if(empty($this->rsa)){
$this->INCLUDE_RSA($key);
}
return base64_encode($this->rsa->encrypt($content));
}
private function INCLUDE_RSA($key)
{
require_once ('Crypt/RSA.php');
$this->rsa = new Crypt_RSA();
$this->rsa->loadKey($key);
$this->rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
return $this;
}
private function get_ip_address()
{
$isValid = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP,FILTER_FLAG_IPV4);
if(!empty($isValid)){
return $_SERVER['REMOTE_ADDR'];
}
try {
$isIpv4 = json_decode(file_get_contents('https://api.ipify.org?format=json'), true);
return $isIpv4['ip'];
} catch (\Throwable $e){
return '116.107.187.109';
}
}
}