BILLmanager рдмрд┐рдирд╛ ISPManager5 рд▓рд╛рдЗрдЯрдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдЪреНрдЫреЗрдж

рджрд┐рдЗрдПрдХреЛ:

  1. рд╕реНрдерд╛рдпреА рдЗрдЬрд╛рдЬрддрдкрддреНрд░рдХреЛ рд╕рд╛рде VPS рд╕рд░реНрднрд░ ispmanager рд▓рд╛рдЗрдЯ 5
  2. 10-20 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдкреНрд░рддрд┐ рд╕рд░реНрднрд░
  3. рдЧреБрдЧрд▓ рдХреНрдпрд╛рд▓реЗрдиреНрдбрд░ рдирд┐рдпрдорд┐рдд рд░рд┐рдорд╛рдЗрдиреНрдбрд░рд╣рд░реВ рд╕рдВрдЧ рдЬреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рднрдПрдХреЛ рдЫ
  4. рдпреЛ рдЕрд░реВ рдХреБрдиреИ рдХреБрд░рд╛рдХреЛ рд▓рд╛рдЧрд┐ рднреБрдХреНрддрд╛рди рдЧрд░реНрди рд▓рд╛рдЬрдорд░реНрджреЛ рдХреБрд░рд╛ рд╣реЛ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд╕рджрд╕реНрдпрддрд╛рдХреЛ рд╕рд╛рдеред

рд▓рдХреНрд╖реНрдп рднрдиреЗрдХреЛ рдЧреНрд░рд╛рд╣рдХрд▓рд╛рдИ рдЧреБрдЧрд▓ рдХреНрдпрд╛рд▓реЗрдиреНрдбрд░ рд░ рдореНрдпрд╛рдиреБрдЕрд▓ рд░рд┐рдорд╛рдЗрдиреНрдбрд░рд╣рд░реВрдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрдиреБ рд╣реЛ рдЬреБрди рдЙрд╕рд▓реЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧрдХреЛ рд▓рд╛рдЧрд┐ рднреБрдХреНрддрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред "рдЙрд╕рд▓рд╛рдИ рдЕрд▓рд┐ рдмрдвреА рдХрд╛рдо рдЧрд░реНрди рджрд┐рдиреБрд╣реЛрд╕реН, рдЙрд╕рд▓реЗ рдЫрд┐рдЯреНрдЯреИ рддрд┐рд░реНрдиреЗрдЫ", "рдпрд╕рд▓рд╛рдИ рдмрдиреНрдж рдЧрд░реНрди рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рд▓реЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ", рд░ рдпреЛ рдЖрддреНрдорд╛рд╡рд┐рд╣реАрди рдореЗрд╕рд┐рдирд▓рд╛рдИ рд╕реБрдореНрдкрдиреБрд╣реЛрд╕реНред

рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЧреБрдЧрд▓ рдЧрд░реЗрдВ рд░ рдЦреЛрдЬреЗ, рддрд░ рдХреБрдиреИ рд╕рдорд╛рдзрд╛рди рдлреЗрд▓рд╛ рдкрд╛рд░реЗрди, рдпреЛ рд╕рдмреИ рддрдереНрдпрдорд╛ рдЙрдорд╛рд▓реЗрдХреЛ рдЫ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ BILLmanager рдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБ рдкрд░реНрдЫ, рддрд░ рдмреБрдБрджрд╛ рдирдореНрдмрд░ 4 рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░ рдЧрдореНрднреАрд░ рдЫ, рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреИрдиред рдпрд╕рд▓рд╛рдИ рдЫреБрдЯрдХрд╛рд░рд╛ред рд░ рдирд┐рд░реНрдгрдп рдзреЗрд░реИ рдЧрд╛рд╣реНрд░реЛ рдЫреИрдиред

рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореАрд▓реЗ рдХреЗ рдЧрд░реНрдиреЗ?

/usr/local/mgr5/etc/sql/ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛, рджреБрдИ рдЦрд╛рд▓реА рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ user.addon рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

  1. рднреБрдХреНрддрд╛рдиреА_рдорд┐рддрд┐
  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 рд▓рд╛рдЗрдЯрдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдЪреНрдЫреЗрдж

рдлрд┐рд▓реНрдбрд╣рд░реВрдорд╛ рд╣рд╛рдореА рд╣реЛрд╕реНрдЯрд┐рдЩрд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рджрд┐рдирд╕рдореНрдо рд▓реЗрдЦреНрдЫреМрдВ, рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдХреБрди рдЗрдореЗрд▓, рд╣реЛрд╕реНрдЯрд┐рдЩ рдЪрд╛рдБрдбреИ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫ рднрдиреЗрд░ рд░рд┐рдорд╛рдЗрдиреНрдбрд░рд╣рд░реВ рдХрд╣рд╛рдБ рдкрдард╛рдЙрдиреЗред

рдЕрдм рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рд▓реЗ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдореНрдЭрд╛рдЙрдиреЗрдЫ рдХрд┐ рд╣реЛрд╕реНрдЯрд┐рдЩ рдХреЗрд╣реА рдЕрдиреНрддрд░рд╛рд▓рд╣рд░реВрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫред рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдкреНрдд рд╣реБрдБрджреИрдЫред рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рдкреНрд░рд╢рд╛рд╕рдХрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдХреНрд╖рдо рдЫред

рдорд▓рд╛рдИ рдпрд╕рдорд╛ 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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди