tripay pg and list channels

This commit is contained in:
Ibnu Maksum
2022-09-07 14:44:04 +07:00
parent 41aa9f74ea
commit 8b7001b5ef
20 changed files with 759 additions and 36 deletions

View File

@ -47,6 +47,13 @@ function _get($param, $defvalue = '')
}
}
class Lang {
public static function T($var) {
return Lang($var);
}
}
require('system/orm.php');
ORM::configure("mysql:host=$db_host;dbname=$db_name");
@ -175,6 +182,29 @@ function _log($description, $type = '', $userid = '0')
$d->save();
}
function Lang($key){
global $_L,$lan_file;
if(!empty($_L[$key])){
return $_L[$key];
}
$val = $key;
$key = alphanumeric($key," ");
if(!empty($_L[$key])){
return $_L[$key];
}else if(!empty($_L[str_replace(' ','_',$key)])){
return $_L[str_replace(' ','_',$key)];
}else{
$key = str_replace(' ','_',$key);
file_put_contents($lan_file, "$"."_L['$key'] = '".addslashes($val)."';\n", FILE_APPEND);
return $val;
}
}
function alphanumeric($str, $tambahan = "")
{
return preg_replace("/[^a-zA-Z0-9" . $tambahan . "]+/", "", $str);
}
function sendTelegram($txt)
{
@ -195,6 +225,16 @@ function sendSMS($phone, $txt)
}
}
function sendWhatsapp($phone, $txt)
{
global $_c;
if(!empty($_c['wa_url'])){
$waurl = str_replace('[number]',urlencode($phone),$_c['wa_url']);
$waurl = str_replace('[text]',urlencode($txt),$waurl);
file_get_contents($waurl);
}
}
function time_elapsed_string($datetime, $full = false)
{

View File

@ -0,0 +1,13 @@
<?php
/**
* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/)
**/
_auth();
$ui->assign('_title', 'Community - '. $config['CompanyName']);
$ui->assign('_system_menu', 'community');
$action = $routes['1'];
$admin = Admin::_info();
$ui->assign('_admin', $admin);
$ui->display('community.tpl');

View File

@ -0,0 +1,39 @@
<?php
/**
* PHP Mikrotik Billing (https://ibnux.github.io/phpmixbill/)
**/
_auth();
$ui->assign('_system_menu', 'order');
$action = $routes['1'];
$user = User::_info();
$ui->assign('_user', $user);
//Client Page
$bill = User::_billing();
$ui->assign('_bill', $bill);
switch ($action) {
case 'voucher':
$ui->assign('_title', $_L['Order_Voucher'].' - '. $config['CompanyName']);
$ui->display('user-order.tpl');
break;
case 'ppoe':
$ui->assign('_title', 'Order PPOE Internet- '. $config['CompanyName']);$routers = ORM::for_table('tbl_routers')->find_many();
$plans = ORM::for_table('tbl_plans')->where('type', 'PPPOE')->find_many();
$ui->assign('routers',$routers);
$ui->assign('plans', $plans);
$ui->display('user-orderPPOE.tpl');
break;
case 'hotspot':
$ui->assign('_title', 'Order Hotspot Internet- '. $config['CompanyName']);
$routers = ORM::for_table('tbl_routers')->find_many();
$plans = ORM::for_table('tbl_plans')->where('type', 'Hotspot')->find_many();
$ui->assign('routers',$routers);
$ui->assign('plans', $plans);
$ui->display('user-orderHotspot.tpl');
break;
default:
$ui->display('404.tpl');
}

View File

@ -12,6 +12,7 @@ $ui->assign('_admin', $admin);
switch ($action) {
case 'xendit':
$ui->assign('_title', 'Xendit - Payment Gateway - '. $config['CompanyName']);
$ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_xendit.json'), true));
$ui->display('app-xendit.tpl');
break;
case 'xendit-post':
@ -37,6 +38,16 @@ switch ($action) {
$d->value = $xendit_verification_token;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'xendit_channel')->find_one();
if($d){
$d->value = implode(',',$_POST['xendit_channel']);
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'xendit_channel';
$d->value = implode(',',$_POST['xendit_channel']);
$d->save();
}
_log('[' . $admin['username'] . ']: Xendit ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
@ -44,7 +55,7 @@ switch ($action) {
break;
case 'midtrans':
$ui->assign('_title', 'Midtrans - Payment Gateway - '. $config['CompanyName']);
$ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_midtrans.json'), true));
$ui->display('app-midtrans.tpl');
break;
case 'midtrans-post':
@ -81,9 +92,73 @@ switch ($action) {
$d->value = $midtrans_server_key;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'midtrans_channel')->find_one();
if($d){
$d->value = implode(',',$_POST['midtrans_channel']);
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'midtrans_channel';
$d->value = implode(',',$_POST['midtrans_channel']);
$d->save();
}
_log('[' . $admin['username'] . ']: Midtrans ' . $_L['Settings_Saved_Successfully'], 'Admin', $admin['id']);
r2(U . 'paymentgateway/midtrans', 's', $_L['Settings_Saved_Successfully']);
break;
case 'tripay':
$ui->assign('_title', 'Tripay - Payment Gateway - '. $config['CompanyName']);
$ui->assign('channels', json_decode(file_get_contents('system/paymentgateway/channel_tripay.json'), true));
$ui->display('app-tripay.tpl');
break;
case 'tripay-post':
$tripay_merchant = _post('tripay_merchant');
$tripay_api_key = _post('tripay_api_key');
$tripay_secret_key = _post('tripay_secret_key');
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_merchant')->find_one();
if($d){
$d->value = $tripay_merchant;
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'tripay_merchant';
$d->value = $tripay_merchant;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_api_key')->find_one();
if($d){
$d->value = $tripay_api_key;
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'tripay_api_key';
$d->value = $tripay_api_key;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_secret_key')->find_one();
if($d){
$d->value = $tripay_secret_key;
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'tripay_secret_key';
$d->value = $tripay_secret_key;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'tripay_channel')->find_one();
if($d){
$d->value = implode(',',$_POST['tripay_channel']);
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'tripay_channel';
$d->value = implode(',',$_POST['tripay_channel']);
$d->save();
}
_log('[' . $admin['username'] . ']: Tripay ' . $_L['Settings_Saved_Successfully'].json_encode($_POST['tripay_channel']), 'Admin', $admin['id']);
r2(U . 'paymentgateway/tripay', 's', $_L['Settings_Saved_Successfully']);
break;
}

View File

@ -406,7 +406,7 @@ switch ($action) {
$in = ORM::for_table('tbl_transactions')->where('username', $c['username'])->order_by_desc('id')->find_one();
$ui->assign('in', $in);
sendSMS($c['username'], "*$_c[CompanyName]*\n".
sendWhatsapp($c['username'], "*$_c[CompanyName]*\n".
"$_c[address]\n".
"$_c[phone]\n".
"\n\n".
@ -1050,7 +1050,7 @@ switch ($action) {
$ui->assign('in', $in);
sendSMS($c['username'], "*$_c[CompanyName]*\n".
sendWhatsapp($c['username'], "*$_c[CompanyName]*\n".
"$_c[address]\n".
"$_c[phone]\n".
"\n\n".

View File

@ -18,9 +18,11 @@ use PEAR2\Net\RouterOS;
require_once 'system/autoload/PEAR2/Autoload.php';
$otpPath = 'system/uploads/sms/';
switch ($do) {
case 'post':
$otp_code = _post('otp_code');
$username = _post('username');
$fullname = _post('fullname');
$password = _post('password');
@ -41,6 +43,32 @@ switch ($do) {
$msg .= $_L['PasswordsNotMatch'] . '<br>';
}
if(!empty($_c['sms_url'])){
$otpPath .= sha1($username.$db_password).".txt";
if(file_exists($otpPath) && time()-filemtime($otpPath)>300){
unlink($otpPath);
r2(U . 'register', 's', 'Verification code expired');
}else if(file_exists($otpPath)){
$code = file_get_contents($otpPath);
if($code!=$otp_code){
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
$ui->assign('address', $address);
$ui->assign('phonenumber', $phonenumber);
$ui->assign('notify', '<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>Verification code is Wrong</div></div>');
$ui->display('register-otp.tpl');
exit();
}else{
unlink($otpPath);
}
}else{
r2(U . 'register', 's', 'No Verification code');
}
}
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
$msg .= $_L['account_already_exist'] . '<br>';
@ -65,9 +93,8 @@ switch ($do) {
<span aria-hidden="true">×</span>
</button>
<div>Failed to register</div></div>');
$ui->display('register.tpl');
r2(U . 'register', 's', 'Failed to register');
}
//r2(U . 'register', 's', $_L['account_created_successfully']);
} else {
$ui->assign('username', $username);
$ui->assign('fullname', $fullname);
@ -83,10 +110,47 @@ switch ($do) {
break;
default:
$ui->assign('username', "");
$ui->assign('fullname', "");
$ui->assign('address', "");
$ui->assign('phonenumber', "");
$ui->display('register.tpl');
if(!empty($_c['sms_url'])){
$username = _post('username');
if(!empty($username)){
$d = ORM::for_table('tbl_customers')->where('username', $username)->find_one();
if ($d) {
r2(U . 'register', 's', $_L['account_already_exist']);
}
if(!file_exists($otpPath)){
mkdir($otpPath);
touch($otpPath.'index.html');
}
$otpPath .= sha1($username.$db_password).".txt";
if(file_exists($otpPath) && time()-filemtime($otpPath)<120){
$ui->assign('username', $username);
$ui->assign('notify', '<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>Please wait '.(120-(time()-filemtime($otpPath))).' seconds before sending another SMS</div></div>');
$ui->display('register-otp.tpl');
}else{
$otp = rand(100000,999999);
file_put_contents($otpPath, $otp);
sendSMS($username,$_c['CompanyName']."\nYour Verification code are: $otp");
$ui->assign('username', $username);
$ui->assign('notify', '<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">
<span aria-hidden="true">×</span>
</button>
<div>Verification code has been sent to your phone</div></div>');
$ui->display('register-otp.tpl');
}
}else{
$ui->display('register-rotp.tpl');
}
}else{
$ui->assign('username', "");
$ui->assign('fullname', "");
$ui->assign('address', "");
$ui->assign('otp', false);
$ui->display('register.tpl');
}
break;
}

View File

@ -130,9 +130,17 @@ switch ($action) {
}
if($d['name'] != $name){
$c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->find_one();
$c = ORM::for_table('tbl_routers')->where('name',$name)->where_not_equal('id',$id)->find_one();
if($c){
$msg .= $_L['Router_already_exist']. '<br>';
$msg .= 'Name Already Exists<br>';
}
}
$oldname = $d['name'];
if($d['ip_address'] != $ip_address){
$c = ORM::for_table('tbl_routers')->where('ip_address',$ip_address)->where_not_equal('id',$id)->find_one();
if($c){
$msg .= 'IP Already Exists<br>';
}
}
@ -152,6 +160,24 @@ switch ($action) {
$d->password = $password;
$d->description = $description;
$d->save();
$p = ORM::for_table('tbl_plans')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
$p = ORM::for_table('tbl_payment_gateway')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
$p = ORM::for_table('tbl_pool')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
$p = ORM::for_table('tbl_transactions')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
$p = ORM::for_table('tbl_user_recharges')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
$p = ORM::for_table('tbl_voucher')->where('routers',$oldname)->find_result_set();
$p->set('routers',$name);
$p->save();
r2(U . 'routers/list', 's', $_L['Updated_Successfully']);
}else{
r2(U . 'routers/edit/'.$id, 'e', $msg);

View File

@ -203,6 +203,7 @@ switch ($action) {
$telegram_bot = _post('telegram_bot');
$telegram_target_id = _post('telegram_target_id');
$sms_url = _post('sms_url');
$wa_url = _post('wa_url');
$address = _post('address');
$payment_gateway = _post('payment_gateway');
if ($company == '') {
@ -254,6 +255,17 @@ switch ($action) {
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'wa_url')->find_one();
if($d){
$d->value = $wa_url;
$d->save();
}else{
$d = ORM::for_table('tbl_appconfig')->create();
$d->setting = 'wa_url';
$d->value = $wa_url;
$d->save();
}
$d = ORM::for_table('tbl_appconfig')->where('setting', 'payment_gateway')->find_one();
if($d){
$d->value = $payment_gateway;

View File

@ -244,3 +244,13 @@ $_L['Name_Lang'] = 'Nama Bahasa';
$_L['Folder_Lang'] = 'Nama Folder';
$_L['Translator'] = 'Translator';
$_L['Lang_already_exist'] = 'Nama bahasa sudah ada';
$_L['Payment_Gateway'] = 'Payment Gateway';
$_L['Community'] = 'Community';
$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
$_L['1_user_can_be_used_for_many_devices'] = '1 user can be used for many devices?';
$_L['Cannot_be_change_after_saved'] = 'Cannot be change after saved';
$_L['Explain_Coverage_of_router'] = 'Jelaskan Cakupan wilayah hotspot';
$_L['Name_of_Area_that_router_operated'] = 'Nama Lokasi/Wilayah Router beroperasi';
$_L['Payment_Notification_URL_Recurring_Notification_URL_Pay_Account_Notification_URL'] = 'Payment Notification URL, Recurring Notification URL, Pay Account Notification URL';
$_L['Finish_Redirect_URL_Unfinish_Redirect_URL_Error_Redirect_URL'] = 'Finish Redirect URL, Unfinish Redirect URL, Error Redirect URL';

View File

@ -0,0 +1,82 @@
[
{
"id": "credit_card",
"name": "Credit Card",
"min": 10000
},
{
"id": "bca_va",
"name": "BCA",
"min": 10000
},
{
"id": "permata_va",
"name": "Permata",
"min": 10000
},
{
"id": "bni_va",
"name": "BNI",
"min": 10000
},
{
"id": "bri_va",
"name": "BRI",
"min": 10000
},
{
"id": "echannel",
"name": "Mandiri Bill",
"min": 10000
},
{
"id": "gopay",
"name": "Gopay",
"min": 1000
},
{
"id": "bca_klikbca",
"name": "KLIKBCA",
"min": 10000
},
{
"id": "bca_klikpay",
"name": "BCA KLIKPAY",
"min": 10000
},
{
"id": "cimb_clicks",
"name": "CIMB Clicks",
"min": 10000
},
{
"id": "danamon_online",
"name": "Danamon",
"min": 5000
},
{
"id": "bri_epay",
"name": "BRImo",
"min": 10000
},
{
"id": "indomaret",
"name": "Indomaret",
"min": 5000
},
{
"id": "alfamart",
"name": "Alfamart",
"min": 5000
},
{
"id": "ShopeePay",
"name": "ShopeePay",
"min": 1000
},
{
"id": "uob_ezpay",
"name": "UOB EZ Pay",
"min": 1000
}
]

View File

@ -0,0 +1,92 @@
[
{
"id": "PERMATAVA",
"name": "Permata Bank",
"min": 10000
},
{
"id": "MYBVA",
"name": "Maybank",
"min": 10000
},
{
"id": "BNIVA",
"name": "BNI",
"min": 10000
},
{
"id": "BRIVA",
"name": "BRI",
"min": 10000
},
{
"id": "MANDIRIVA",
"name": "Mandiri",
"min": 10000
},
{
"id": "BCAVA",
"name": "BCA",
"min": 10000
},
{
"id": "SMSVA",
"name": "Sinarmas",
"min": 10000
},
{
"id": "MUAMALATVA",
"name": "Muamalat",
"min": 10000
},
{
"id": "SAMPOERNAVA",
"name": "Sahabat Sampoerna",
"min": 10000
},
{
"id": "BSIVA",
"name": "BSI",
"min": 10000
},
{
"id": "ALFAMART",
"name": "Alfamart ",
"min": 5000
},
{
"id": "INDOMARET",
"name": "Indomaret ",
"min": 10000
},
{
"id": "ALFAMIDI",
"name": "Alfamidi ",
"min": 5000
},
{
"id": "OVO",
"name": "OVO",
"min": 1000
},
{
"id": "QRIS",
"name": "QRIS by ShopeePay",
"min": 1000
},
{
"id": "QRISC",
"name": "QRIS (Customizable)",
"min": 1000
},
{
"id": "QRIS2",
"name": "QRIS",
"min": 1000
},
{
"id": "SHOPEEPAY",
"name": "ShopeePay ",
"min": 1000
}
]

View File

@ -0,0 +1,82 @@
[
{
"id": "CREDIT_CARD",
"name": "CREDIT CARD",
"min": 10000
},
{
"id": "PERMATA",
"name": "Permata Bank",
"min": 10000
},
{
"id": "BNI",
"name": "BNI",
"min": 10000
},
{
"id": "BRI",
"name": "BRI",
"min": 10000
},
{
"id": "MANDIRI",
"name": "Mandiri",
"min": 10000
},
{
"id": "BCA",
"name": "BCA",
"min": 10000
},
{
"id": "BSI",
"name": "BSI",
"min": 10000
},
{
"id": "DD_BRI",
"name": "Direct Debit BRI",
"min": 10000
},
{
"id": "DD_BCA_KLIKPAY",
"name": "Direct Debit BCA KLIKPAY",
"min": 10000
},
{
"id": "ALFAMART",
"name": "Alfamart ",
"min": 5000
},
{
"id": "INDOMARET",
"name": "Indomaret ",
"min": 10000
},
{
"id": "OVO",
"name": "OVO",
"min": 1000
},
{
"id": "DANA",
"name": "DANA",
"min": 1000
},
{
"id": "LINKAJA",
"name": "LinkAja",
"min": 1000
},
{
"id": "SHOPEEPAY",
"name": "ShopeePay ",
"min": 1000
},
{
"id": "QRIS",
"name": "QRIS",
"min": 1000
}
]