BILLmanager рд╢рд┐рд╡рд╛рдп ISPManager5 lite рдордзреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдбрд┐рд╕реНрдХрдиреЗрдХреНрд╢рди

рджрд┐рд▓реЗрдГ

  1. рд╢рд╛рд╢реНрд╡рдд рдкрд░рд╡рд╛рдиреНрдпрд╛рд╕рд╣ VPS рд╕рд░реНрд╡реНрд╣рд░ ispmanager lite 5
  2. рдкреНрд░рддрд┐ рд╕рд░реНрд╡реНрд╣рд░ 10-20 рд╡рд╛рдкрд░рдХрд░реНрддреЗ
  3. рдЬреНрдпрд╛рдВрдЪреЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдВрдкрд▓реЗ рдЖрд╣реЗ рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдирд┐рдпрдорд┐рдд рд╕реНрдорд░рдгрдкрддреНрд░рд╛рдВрд╕рд╣ Google Calendar
  4. рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА, рд╡рд┐рд╢реЗрд╖рдд: рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рдирд╕рд╣ рдкреИрд╕реЗ рджреЗрдгреЗ рд▓рд╛рдЬрд┐рд░рд╡рд╛рдгреЗ рдЖрд╣реЗ.

рдХреНрд▓рд╛рдпрдВрдЯрд▓рд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧрд╕рд╛рдареА рдкреИрд╕реЗ рджреНрдпрд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓ рдЕрд╢рд╛ Google рдХреЕрд▓реЗрдВрдбрд░ рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓ рд╕реНрдорд░рдгрдкрддреНрд░рд╛рдВрдкрд╛рд╕реВрди рдореБрдХреНрдд рд╣реЛрдгреЗ рд╣реЗ рдзреНрдпреЗрдп рдЖрд╣реЗ. тАЬрддреНрдпрд╛рд▓рд╛ рдЕрдЬреВрди рдереЛрдбреЗ рдХрд╛рдо рдХрд░реВ рджреНрдпрд╛, рддреЛ рд▓рд╡рдХрд░рдЪ рдкреИрд╕реЗ рджреЗрдИрд▓тАЭ, тАЬрддреЗ рдмрдВрдж рдХрд░рдгреЗ рдХрд╕реЗ рддрд░реА рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗтАЭ рдпрд╛рдкрд╛рд╕реВрди рд╕реНрд╡рддрдГрд▓рд╛ рдореБрдХреНрдд рдХрд░рд╛ рдЖрдгрд┐ рд╣реЗ рдирд┐рд░реНрд╡рд┐рдХрд╛рд░ рдорд╢реАрдирдХрдбреЗ рд╕реЛрдкрд╡рд╛.

рдЕрд░реНрдерд╛рдд, рдореА рдкреНрд░рдердо рдЧреБрдЧрд▓ рдХреЗрд▓реЗ рдЖрдгрд┐ рд╢реЛрдзрд▓реЗ, рдкрд░рдВрддреБ рдорд▓рд╛ рдХреЛрдгрддреЗрд╣реА рдЙрдкрд╛рдп рд╕рд╛рдкрдбрд▓реЗ рдирд╛рд╣реАрдд, рд╣реЗ рд╕рд░реНрд╡ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрд╡рд░реВрди рдЙрдХрд│рд▓реЗ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ BILLmanager рдЪреЗ рд╕рджрд╕реНрдпрддреНрд╡ рдШреНрдпрд╛рдпрдЪреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореБрджреНрджрд╛ рдХреНрд░рдорд╛рдВрдХ 4 рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдорд╣рддреНрд╡рд╛рдЪрд╛ рдЖрдгрд┐ рдЧрдВрднреАрд░ рдЖрд╣реЗ, рдорд▓рд╛ рддреЗ рдорд┐рд│рдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рддреВрди рд╕реБрдЯрдХрд╛ рдЖрдгрд┐ рдирд┐рд░реНрдгрдп рдЗрддрдХрд╛ рдХрдареАрдг рдирд╡реНрд╣рддрд╛.

рдордЧ рдЖрдореНрд╣реА рдХрд╛рдп рдХрд░реВ?

/usr/local/mgr5/etc/sql/ рдбрд┐рд░реЗрдХреНрдЯреНрд░реАрдордзреНрдпреЗ user.addon рд╣реЗ рдлреЛрд▓реНрдбрд░ рддрдпрд╛рд░ рдХрд░рд╛, рджреЛрди рд░рд┐рдХрд╛рдореНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕:

  1. pay_date
  2. uwemail

рд╣реЗ рдкреЕрдиреЗрд▓рд▓рд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛ рджреЗрдИрд▓
/usr/local/mgr5/etc/ispmgr.db
рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЯреЗрдмрд▓рдордзреНрдпреЗ рджреЛрди рд╕рдВрдмрдВрдзрд┐рдд рдлреАрд▓реНрдб рдЖрд╣реЗрдд рдЬрд┐рдереЗ рдкреНрд░рд╢рд╛рд╕рдХ рдкреЕрдиреЗрд▓рдордзреАрд▓ рдореВрд▓реНрдпреЗ рд▓рд┐рд╣рд┐рд▓реА рдЬрд╛рддреАрд▓.

рд╕рд╛рдордЧреНрд░реАрд╕рд╣ /usr/local/mgr5/etc/xml рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ ispmgr_mod_pay_data.xml рдирд╛рд╡рд╛рдЪреА рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рд╛.

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
	<metadata name="user.edit">
		<form>
			<page name="main">
				<field name="pay_date">
					<input type="text" name="pay_date"/>
				</field>
				<field name="uwemail">
					<input type="text" name="uwemail"/>
				</field>
			</page>
		</form>
	</metadata>
	<lang name="ru">
		<messages name="user.edit">
			<msg name="pay_date" sqlname="pay_date">╨Ю╨┐╨╗╨░╤З╨╡╨╜╨╛ ╨┤╨╛</msg>
			<msg name="uwemail" sqlname="uwemail">╨Я╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤М╤Б╨║╨╕╨╣ email</msg>
		</messages>
	</lang>	
	<lang name="en">
		<messages name="user.edit">
			<msg name="pay_date" sqlname="pay_date">Paid before</msg>
			<msg name="uwemail" sqlname="uwemail">User email</msg>
		</messages>
	</lang>
</mgrdata>

рд╣реЗ рдкреЕрдиреЗрд▓рд▓рд╛ рдПрдХ рдирд┐рдпрдо рджреЗрддреЗ рдЬреЗрдгреЗрдХрд░реВрди рдЖрдордЪреА рдлреАрд▓реНрдб рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрдкрд╛рджрди рдлреЙрд░реНрдордордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓.

рдкреЕрдиреЗрд▓ рд░реАрдмреВрдЯ рдХрд░рд╛:

/usr/local/mgr5/sbin/mgrctl -m ispmgr exit

рдЖрдореНрд╣реА рдорд┐рд│рд╡рд╛:

BILLmanager рд╢рд┐рд╡рд╛рдп ISPManager5 lite рдордзреАрд▓ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдбрд┐рд╕реНрдХрдиреЗрдХреНрд╢рди

рд╣реЛрд╕реНрдЯрд┐рдВрдЧрдиреЗ рдХреЛрдгрддреНрдпрд╛ рджрд┐рд╡рд╕рд╛рдкрд░реНрдпрдВрдд рдХрд╛рдо рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреЗ рдХреЛрдгрддреЗ рдИрдореЗрд▓, рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд▓рд╡рдХрд░рдЪ рд╕рдВрдкреЗрд▓ рдпрд╛рдЪреА рд╕реНрдорд░рдгрдкрддреНрд░реЗ рдХреЛрдареЗ рдкрд╛рдард╡рд╛рдпрдЪреА рд╣реЗ рдЖрдореНрд╣реА рдлреАрд▓реНрдбрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рддреЛ.

рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рдЬреА рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрдИрд▓ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛рд╣реА рдЕрдВрддрд░рд╛рдиреЗ рд╕рдВрдкрддреЗ. рдкреНрд░рд╢рд╛рд╕рдХрд╛рд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рд╛ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реЛрдд рдЖрд╣реЗ. рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рдкреНрд░рд╢рд╛рд╕рдХрд╛рд╕ рд╕реВрдЪрд┐рдд рдХрд░рд╛ рдХреА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрдХреНрд╖рдо рдЖрд╣реЗ.

рдорд▓рд╛ рддреНрдпрд╛рд╡рд░ php рдЖрд╡рдбрд▓рд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рд▓реА.

<?php
$adminemail = "[email protected]"; // email ╨░╨┤╨╝╨╕╨╜╨░
$day_send_message = [30,7,5,3,1]; // ╨╖╨░ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┤╨╜╨╡╨╣ ╨╕ ╤Б ╨║╨░╨║╨╛╨╣ ╨┐╨╡╤А╨╡╨╛╨┤╨╕╤З╨╜╨╛╤Б╤В╤М╤О ╨▒╤Г╨┤╨╡╤В ╨╜╨░╨┐╨╛╨╝╨╕╨╜╨░╤В╤М ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤О ╤З╤В╨╛ ╤Е╨╛╤Б╤В╨╕╨╜╨│ ╨╖╨░╨║╨░╨╜╤З╨╕╨▓╨░╨╡╤В╤Б╤П
$db = new SQLite3('/usr/local/mgr5/etc/ispmgr.db');
$results = $db->query('SELECT * FROM users WHERE active == "on" AND pay_date IS NOT NULL');
while ($user = $results->fetchArray()) {
		$days_left=floor( ( strtotime($user['pay_date']) - time() ) / (60 * 60 * 24));
		if(in_array($days_left, $day_send_message)){
			if($user['uwemail'] != ""){
				mail($user['uwemail'], 'ISPMANAGER ╨╖╨░╨║╨░╨╜╤З╨╕╨▓╨░╨╡╤В╤Б╤П ╤Е╨╛╤Б╤В╨╕╨╜╨│ ╤З╨╡╤А╨╡╨╖ '.$days_left.' ╨┤╨╜╨╡╨╣╤П', "╨в╨╡╨║╤Б╤В ╨┤╨╗╤П ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤П ╨╛ ╤В╨╛╨╝ ╤З╤В╨╛ ╨╛╤Б╤В╨░╨╗╨╛╤Б╤М ╤Б╤В╨╛╨╗╤М╨║╨╛ ╤В╨╛ ╨┤╨╜╨╡╨╣");
			}
		}
		if( $days_left == 3 ) {
			mail($adminemail, 'ISPMANAGER USER '.$user['name'], $user['name'] . " ╨Ч╨░╨║╨╛╨╜╤З╨╕╤В╤Б╤П ╤Е╨╛╤Б╤В╨╕╨╜╨│ ╤З╨╡╤А╨╡╨╖ ".$days_left." ╨┤╨╜╤П");
		}
		if($days_left <= 0){
			mail($adminemail, 'ISPMANAGER USER '.$user['name'].' DISABLED', $user['name'].' ╨Ю╤В╨║╨╗╤О╤З╨╡╨╜');
			exec("/usr/local/mgr5/sbin/mgrctl -m ispmgr user.suspend elid=".$user["name"]);
			if( $user['uwemail'] != "" ) {
				mail($user['uwemail'], 'ISPMANAGER ╤Е╨╛╤Б╤В╨╕╨╜╨│ ╨╛╤В╨║╨╗╤О╤З╨╡╨╜', '╨в╨╡╨║╤Б╤В ╨┤╨╗╤П ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤П ╤З╤В╨╛ ╤Е╨╛╤Б╤В╨╕╨╜╨│ ╨╖╨░╨║╨╛╨╜╤З╨╕╨╗╤Б╤П'); 
			}
		}
		// ╨┐╤А╨╕ ╨╢╨╡╨╗╨░╨╜╨╕╨╕ ╨╝╨╛╨╢╨╜╨╛ ╨╡╤Й╨╡ ╨╜╨░╨┐╨╕╤Б╨░╤В╤М ╨╜╨╡╨▒╨╛╨╗╤М╤И╨╛╨╣ IF ╤З╤В╨╛ ╨▒╤Л ╨┤╨░╨╜╨╜╤Л╨╡ ╤Г╨┤╨░╨╗╤П╨╗╨╕╤Б╤М ╤З╨╡╤А╨╡╨╖ ╨╜╨╡╨║╨╛╤В╨╛╤А╨╛╨╡ ╨▓╤А╨╡╨╝╤П, ╨╜╨╛ ╨╝╨╜╨╡ ╤Н╤В╨╛ ╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛
}

рдЖрдореНрд╣реА рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдареЗрд╣реА рдЬрддрди рдХрд░рддреЛ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ рддреЗ рдХреЙрд▓ рдХрд░рддреЛ рдЖрдгрд┐ рджрд┐рд╡рд╕рд╛рддреВрди рдПрдХрджрд╛ рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд░реЙрди рдЯрд╛рд╕реНрдХ рдЬреЛрдбрддреЛ. рд╕рд░реНрд╡ рддрдпрд╛рд░ рдЖрд╣реЗ.

рдЖрддрд╛ рдорд╛рдЭреА рд╡рд┐рд╡реЗрдХрдмреБрджреНрдзреА рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдЯреЙрдб рд╕рдорд╛рдзрд╛рдиреА рдЖрд╣реЗ рдЖрдгрд┐ рдорд▓рд╛ рдХреЛрдгрддрд╛рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдЦрд░реНрдЪ рдЖрд▓рд╛ рдирд╛рд╣реА.

рдЬреНрдпрд╛ рддрд╛рд░рдЦреЗрд▓рд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧрд╕рд╛рдареА рдкреИрд╕реЗ рджрд┐рд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ рддреНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдордзреАрд▓ рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рд╕реНрдорд░рдгрдкрддреНрд░реЗ рдХреЛрдареЗ рдкрд╛рдард╡рд╛рдпрдЪреА рд╣реЗ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреЗ рдИрдореЗрд▓ рднрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.

рдПрдЦрд╛рджреНрдпрд╛рд▓рд╛ рдорджрдд рдХреЗрд▓реА рддрд░ рдЖрдирдВрдж рд╣реЛрдИрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛