BILLmanager เด‡เดฒเตเดฒเดพเดคเต† ISPManager5 เดฒเตˆเดฑเตเดฑเดฟเดฒเต† เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดฏเดพเดจเตเดคเตเดฐเดฟเด• เดตเดฟเดšเตเด›เต‡เดฆเดฟเด•เตเด•เตฝ

เดจเตฝเด•เดฟเดฏเดคเต:

  1. เดชเต†เตผเดชเต†เดšเตเดตเตฝ เดฒเตˆเดธเตปเดธเตเดณเตเดณ VPS เดธเต†เตผเดตเตผ ispmanager lite 5
  2. เด’เดฐเต เดธเต†เตผเดตเดฑเดฟเดจเต 10-20 เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพ
  3. เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดคเต€เตผเดจเตเดจเดตเตผเด•เตเด•เดพเดฏเดฟ เดชเดคเดฟเดตเต เด“เตผเดฎเตเดฎเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เดณเตเดฎเดพเดฏเดฟ เด—เต‚เด—เดฟเตพ เด•เดฒเดฃเตเดŸเตผ
  4. เดฎเดฑเตเดฑเต†เดจเตเดคเดฟเดจเตเด‚ เดชเดฃเด‚ เดจเตฝเด•เตเดจเตเดจเดคเต เดฒเดœเตเดœเดพเด•เดฐเดฎเดพเดฃเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เด’เดฐเต เดธเดฌเตเดธเตเด•เตเดฐเดฟเดชเตเดทเตป.

เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดจเดพเดฏเดฟ เดชเดฃเด‚ เดจเตฝเด•เต‡เดฃเตเดŸ Google เด•เดฒเดฃเตเดŸเดฑเตเด‚ เดฎเดพเดจเตเดตเตฝ เดฑเดฟเดฎเตˆเตปเดกเดฑเตเด•เดณเตเด‚ เด’เดดเดฟเดตเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดฒเด•เตเดทเตเดฏเด‚. "เด…เดตเดจเต† เด•เตเดฑเดšเตเดšเตเด•เต‚เดŸเดฟ เดœเต‹เดฒเดฟ เดšเต†เดฏเตเดฏเดŸเตเดŸเต†, เด…เดตเตป เด‰เดŸเตป เดชเดฃเด‚ เดจเตฝเด•เตเด‚", "เด‡เดคเต เด“เดซเดพเด•เตเด•เตเดจเตเดจเดคเต เดŽเด™เตเด™เดจเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดธเต—เด•เดฐเตเดฏเดฎเดพเดฃเต" เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดธเตเดตเดฏเด‚ เดฎเต‹เดšเดฟเดคเดฐเดพเดตเตเด•, เด•เต‚เดŸเดพเดคเต† เด‡เดคเต เด†เดคเตเดฎเดพเดตเดฟเดฒเตเดฒเดพเดคเตเดค เดฏเดจเตเดคเตเดฐเดคเตเดคเต† เดเตฝเดชเตเดชเดฟเด•เตเด•เตเด•.

เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดžเดพเตป เด†เดฆเตเดฏเด‚ เด—เต‚เด—เดฟเตพ เดšเต†เดฏเตโ€Œเดคเต เดคเดฟเดฐเดžเตเดžเต, เดชเด•เตเดทเต‡ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตŠเดจเตเดจเตเด‚ เด•เดฃเตเดŸเต†เดคเตเดคเดฟเดฏเดฟเดฒเตเดฒ, เดจเดฟเด™เตเด™เตพ 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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•