BILLmanager เชตเชฟเชจเชพ ISPManager5 เชฒเชพเช‡เชŸเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซเช‚ เชธเซเชตเชšเชพเชฒเชฟเชค เชœเซ‹เชกเชพเชฃ

เช†เชชเซ‡เชฒ:

  1. เช•เชพเชฏเชฎเซ€ เชฒเชพเชฏเชธเชจเซเชธ เชธเชพเชฅเซ‡ VPS เชธเชฐเซเชตเชฐ ispmanager lite 5
  2. เชธเชฐเซเชตเชฐ เชฆเซ€เช  10-20 เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“
  3. เชœเซ‡เชฎเชจเซ€ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เชธเชฎเชพเชชเซเชค เชฅเชˆ เช—เชˆ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชฐเซ€เชฎเชพเช‡เชจเซเชกเชฐเซเชธ เชธเชพเชฅเซ‡ Google เช•เซ‡เชฒเซ‡เชจเซเชกเชฐ
  4. เช…เชจเซเชฏ เช•เช‚เชˆเชชเชฃ เชฎเชพเชŸเซ‡ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเชตเซ€ เชถเชฐเชฎเชœเชจเช• เช›เซ‡, เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชธเชฌเซเชธเซเช•เซเชฐเชฟเชชเซเชถเชจ เชธเชพเชฅเซ‡.

เชงเซเชฏเซ‡เชฏ เช•เซเชฒเชพเชฏเชจเซเชŸเชจเซ‡ Google เช•เซ…เชฒเซ‡เชจเซเชกเชฐ เช…เชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒ เชฐเซ€เชฎเชพเช‡เชจเซเชกเชฐเซเชธเชฅเซ€ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเชตเชพเชจเซ‹ เช›เซ‡ เชœเซ‡ เชคเซ‡เชจเซ‡ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. "เชคเซ‡เชจเซ‡ เชฅเซ‹เชกเซเช‚ เชตเชงเซ เช•เชพเชฎ เช•เชฐเชตเชพ เชฆเซ‹, เชคเซ‡ เชŸเซ‚เช‚เช• เชธเชฎเชฏเชฎเชพเช‚ เชšเซ‚เช•เชตเชฃเซ€ เช•เชฐเชถเซ‡", "เชคเซ‡เชจเซ‡ เชฌเช‚เชง เช•เชฐเชตเซเช‚ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เช›เซ‡" เชฅเซ€ เชชเซ‹เชคเชพเชจเซ‡ เชฎเซเช•เซเชค เช•เชฐเซ‹, เช…เชจเซ‡ เช†เชจเซ‡ เช†เชคเซเชฎเชพ เชตเชฟเชจเชพเชจเชพ เชฎเชถเซ€เชจเชจเซ‡ เชธเซ‹เช‚เชชเซ‹.

เช…เชฒเชฌเชคเซเชค, เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเชพ เช—เซ‚เช—เชฒ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชถเซ‹เชงเซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เช•เซ‹เชˆ เช‰เช•เซ‡เชฒ เชฎเชณเซเชฏเซ‹ เชจเชนเซ€เช‚, เช† เชฌเชงเซเช‚ เช เชนเช•เซ€เช•เชค เชชเชฐ เช‰เชญเชฐเซ€ เช†เชตเซเชฏเซเช‚ เช•เซ‡ เชคเชฎเชพเชฐเซ‡ BILLmanager เชชเชฐ เชธเชฌเซเชธเซเช•เซเชฐเชพเช‡เชฌ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฌเชฟเช‚เชฆเซ เชจเช‚เชฌเชฐ 4 เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช–เซ‚เชฌ เชœ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช…เชจเซ‡ เช—เช‚เชญเซ€เชฐ เช›เซ‡, เชฎเชจเซ‡ เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚. เชคเซ‡เชฎเชพเช‚เชฅเซ€ เช›เซเชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเซ‹. เช…เชจเซ‡ เชจเชฟเชฐเซเชฃเชฏ เชเชŸเชฒเซ‹ เชฎเซเชถเซเช•เซ‡เชฒ เชจ เชนเซ‹เชตเชพเชจเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚.

เชคเซ‹ เช†เชชเชฃเซ‡ เชถเซเช‚ เช•เชฐเซ€เช?

เชเช• เชซเซ‹เชฒเซเชกเชฐ user.addon เชฌเชจเชพเชตเซ‹, /usr/local/mgr5/etc/sql/ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚, เชฌเซ‡ เช–เชพเชฒเซ€ เชซเชพเชˆเชฒเซ‹:

  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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹