hostbill支付宝模块bug

用户支付账单后会出现重复入账,少则一两次多则七八次。。。。


不排除支付宝跳转返回的时候用户F5刷新导致重复入账。。


附bug截图

  host-alipay-bug.png

Windows 2003的登录取消CTRL+ALT+DEL和关机事件跟踪

运行“gpedit.msc”打开“组策略编辑器”

计算机配置 -> Windows 设置 -> 安全设置 -> 本地策略 -> 安全选项

“交互式登陆:不需要按 CTRL+ALT+DEL”改为“已启用”

显示“关闭事件跟踪程序”

计算机配置 ->管理模板 -> 系统

显示“关闭事件跟踪程序”改为“已禁用”


hostbill下kloxo接口模块源码

<?php

class Kloxo extends HostingModule {

   //Version

   protected $version ='1.00';

   //Description

   protected $description='Kloxo provisioning module';

   //Enable AJAX

   protected $ajaxLoadValues=true;

   //End INIT

                                                       

   //Translations

   protected $lang=array(

       'english'=>array(

           'acc-type'=>'Account Type',

           'resource-plan'=>'Plan Name',

           'dns-template'=>'DNS Template',

       ),

       'german'=>array(

           'acc-type'=>'Account-Typ',

           'resource-plan'=>'Plannamen',

           'dns-template'=>'DNS Schablone',

       )

   );

   //End Translations

//Server Settings APPprotected $options = array(

               'option1' =>array (

                       'name'=> 'acc-type',

                       'value' =>false,

                       'type'=> 'select',

                       'default'=> array("customer","reseller"),

               ),

               'option2' =>array (

                       'name'=> 'resource-plan',

                       'value' => false,

                       'type'=> 'input',

                       'default'=>false,

               ),

               'option3' =>array (

                       'name'=> 'dns-template',

                       'value' => false,

                       'type'=> 'input',

                       'default'=>false,

               ),

       );

       //account specific stuff below

       protected $details = array(

                                                       

                                                       

               'option6' =>array (

                       'name'=> 'domain',

                       'value' => false,

                       'type'=> 'input',

                       'default'=>false

               ),

               'option1' =>array (

                       'name'=> 'username',

                       'value' => false,

                       'type'=> 'input',

                       'default'=>false

               ),

               'option2' =>array (

                       'name'=> 'password',

                       'value' => false,

                       'type'=> 'input',

                       'default'=>false

               ),

       );

       //End User Specifics

       //Start Action Handler

    protected $commands = array(

               'Suspend','Terminate','ChangePackage','ChangePassword','Create','Unsuspend'//,'getResourcePlansInfo'

       );

                                                       

                                                       

                                                       

                                                       

   //connection

   private $server_username;

   private $server_password;

   private $server_hostname;

   private $server_ip;

   public function connect($connect) {

       $this->server_username = $connect['username'];

       $this->server_password = $connect['password'];

       $this->server_hostname = $connect['hostname'];

       $this->server_ip = $connect['ip'];

        if($connect['secure']) {

               $this->port = 7777;              

               $this->http = "https";

               }

           else {

               $this->port = 7778;

               $this->http = "http";

   }

   }//endconnection

                                                       

                                                       

                                                       

   //Default Kloxo JSON Processing

   public function lxlabs_get_via_json($protocol, $server, $port, $param) {

       $param = "login-class=client&login-name=admin&login-password=pass&output-type=json&$param";

       $url = "$protocol://$server:$port/webcommand.php";

       $ch = curl_init($url);

       curl_setopt($ch, CURLOPT_POST, true);

       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

       curl_setopt($ch, CURLOPT_POSTFIELDS, $param);

       $totalout = curl_exec($ch);

       $totalout = trim($totalout);

       //Replace require JSON.php START X0001

       require_once('JSON.php');

       //end Replace X0001

       $json = new Services_JSON();

       $object = $json->decode($totalout);

                                                       

if (!is_object($object)) {

print("Fatal Error. Got a non-object from the server: $totalout\n");

exit;

}

                                                       

return $object;

}//end Kloxo's JSON

private function Send($type, $param) {

                                                       

                                                       

$http = "http";

if ( $http == "http" ) {

$port  = '7778';

}

else {

$port = '7777';

}//end SetDefaultPort

$adminpassword = $this->server_password;

$adminuser = $this->server_username;

$serverloc = $this->server_ip;

$builtparameter = "login-class=client&login-name=$adminuser&login-password=$adminpassword&output-type=json&". $param;

$get = $this->lxlabs_get_via_json($this->http, $serverloc, $this->port, $builtparameter);

return array(

   'success'=>true,

);

}//End Send

                                                       

                                                       

//CreateServer

public function Create() {

//Build the string

$string = "action=add";

$string .= "&class=client";

$string .= "&v-plan_name=". $this->options['option2']['value'] ."";

$string .= "&v-type=". $this->options['option1']['value'];

$string .= "&v-contactemail=". $this->client_data['email'];

$string .= "&send_welcome_f=off";

$string .= "&v-domain_name=". $this->details['option6']['value'];

$string .= "&v-dnstemplate_name=". $this->options['option3']['value'];

$string .= "&v-password=". $this->details['option2']['value'];

$string .= "&name=". $this->details['option1']['value'];

//Finish building string $string          

//send data

$type = null;

$senddata = $this->Send($type, $string);

if ($senddata['success']) {

$this->addInfo('Account has been created');

return true;

}

else {

return false;

}

}//End Create Server

                                                                                   

//Suspend

public function Suspend() {

//Prepare string

$string = "class=client";

$string .= "&name=". $this->details['option1'];

$string .= "&action=update";

$string .= "&subaction=disable";

//End Prepare String

$type = null;

//Send Data

$senddata = $this->Send($type, $string);

if ($senddata['success']) {

$this->addinfo('Account Suspended');

return true;

}

else {

return false;

}

                                                       

}

//End Suspend

//Unsuspend

public function Unsuspend() {

//Prepare string

$string = "class=client";

$string .= "&name=". $this->details['option1'];

$string .= "&action=update";

$string .= "&subaction=enable";

//End Prepare String

$type = null;

//Send Data

$senddata = $this->Send($type, $string);

if ($senddata['success']) {

$this->addInfo('Account has been unSuspended.');

return true;

}

else {

return false;

                                                       

}

                                                       

}

//End Suspend

//Kill Account

public function Terminate() {

$string = "action=delete";

$string .= "class=client";

$string .= "name=". $this->details['option1']['value'];

$type = null;

//Send Data

$senddata = $this->Send($type, $string);

if ($senddata['success']) {

return true;

}

else {

return false;

}

}

//Finish the murder

}//End Extension

?>



ssh踢除登陆的账户

第一种办法用用fuser,一般远程登陆的都可以直接喀嚓掉,但是如果遇上是在终端上直接登陆的就得用who找出pid然后kill。

1
[root@Server ~]# <span style="color:#ff0000;">w</span><br /> 16:05:59 up 284 days,  1:47,  2 users,  load average: 0.22, 0.07, 0.02<br />USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br />root     xvc0     -                02Feb13  6.00s  0.00s  0.00s -bash<br />root     pts/0    X.254.168.X    16:11    0.00s  0.00s  0.00s w<br />

通过w命令查找出pts的ID,然后fuser对其可以下手除掉了。

1
<p><span style="color:#ff0000;">fuser -k /dev/pts/0</span></p>

终端上登陆的时候不会有pts,这就得直接对进程下手了.

1
[root@Server ~]# <span style="color:#ff0000;">who -Hu </span><br />NAME     LINE         TIME              IDLE          PID       COMMENT<br />root     xvc0         Feb  2 20:01   .               1313<br />root     pts/0        Apr 28 16:11   .               24240     (X.254.168.X)

使用who -Hu就直接能定位出其PID,然后对其下黑手,

kill -9 1313

上面两种办法就能顺利干掉登陆的账号。

MacBook合盖不休眠解决方案

需要挂机/外出或者是只用外接显示器的时候合上盖子Mac会自动休眠,虽然带SSD系统休眠/恢复很快,系统自带没有相关的设置这时候打开sleepless就可以轻松搞定。

sleepless2.8.1下载点这里sleepless2.8.1.zip

sleepless2.8.3下载地址http://download.cnet.com/SleepLess/3000-18512_4-34360.html

解压文件后在选择“Prevent sleep with lid closed,display will NOT sleep” 就好了,未注册情况下会有一个小气泡广告,购买收费授权是9.5美元。

sleepsnap.png

苹果的Retina屏的确非常的清晰分辨率高得出奇,物理尺寸的局限还是让人捉急,在室内时间较多自然要找大显示器外接上这样自然感觉是好多了,也可以按F1将屏幕全黑,另外有种比较淫荡的方法是zai 显示器耳机孔和电源附加放一块磁盘 不用合盖就可以关闭显示器,不合盖的话通过键盘可以散热,各种利弊还是自行选择吧。

国内各种centos系统模板精简

1
yum groupremove "Mail Server" "Games and Entertainment" "X Window System" "X Software Development" "Development Libraries" "Development Tools" "Dialup Networking Support" "Games and Entertainment" "Sound and Video" "Graphics" "Editors" "Games and Entertainment" "Text-based Internet" "GNOME Desktop Environment" "GNOME Software Development"



有必要可以运行下yum grouplist看看装了那些,上面的一般能干掉一堆不怎么用的东西。

国内大多封装模板受win的习惯影响喜欢把各种东西安装进去,Linux系统做server丫不说LFS只要minimal安装就行了,节操呀.

Linux下LSI RAID卡管理

现在需求性能效率的服务器不论是做虚拟机还是跑SQL数据库,RAID是非常不错的捷径能满足容量和IO的需求


MegaRAID系列管理套件安装

1
cd /tmp
wget http://down.kvm.la/RAID/MegaCliLin.zip
unzip MegaCliLin.zip
rpm -Uvh *.rpm
cp /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/MegaCli

MegaRAID系列的命令可以查看《MegaCli 常见用法

3ware Inc系列的管理套件安装

阅读剩余部分...

买了几本书练英语音标

以前看过几个视频说中国人讲英语就像在案板上切菜一样。。。。
各种中式英语发音语法各种orz囧
现在和老外打交道的时间越来越多,有时候遇点复杂点的问题要花很多时间来沟通,老外很恼火,自己也窝火。。。
搞不好还容易整上矛盾。

Kvm关闭VNC后Guest下的Centos系统无法启动问题

Kvm虚拟化下如果关闭VNC的话Centos将无法启动
在启动进入了系统后我们修改一下grub再关闭VNC就可以启动guest的Centos系统了 附脚本
1
sed-i 's/hiddenmenu/#hiddenmenu/g' /boot/grub/grub.conf
sed-i 's/splashimage/#splashimage/g' /boot /grub/grub.conf

directadmin部分常用tips

虽然经常安装DirectAdmin但是时间长了事情多了很多东西都记不住,写好的东西都放自己电脑里面偶尔有时候还很难找到,在这儿记录一些

安装directadmin

yum -y install wget gcc gcc-c++ flex bison make bind bind-libs bind-utils openssl openssl-devel perl quota libaio libcom_err-devel libcurl-devel gd zlib-devel zip unzip libcap-devel cronie bzip2 db4-devel cyrus-sasl-devel perl-ExtUtils-Embed cd /tmp wget http://www.directadmin.com/setup.sh chmod 755 setup.sh ./setup.sh

阅读剩余部分...

Kloxo快速安装中文语言包

wget -c http://down.kvm.la/kloxo/kloxo_cn.tar.gz
tar zxf kloxo_cn.tar.gz -C /usr/local/lxlabs/kloxo/httpdocs/lang
/script/update --class=sp_specialplay --name=client-admin --subaction=skin --v-specialplay_b_s_language=cn

快速简洁,干净利落。

编译安装Mysql5.5

mysql5.5采用cmake代替了configure

groupadd mysql -g 27
useradd mysql -u 27 -g 27 -c "MySQL Server" -d /home/mysql -m
wget -c http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.19.tar.gz/from/http://mysql.he.net/
tar zxf mysql-5.5.19.tar.gz
cd mysql-5.5.19
CFLAGS="-O3" CXX=gcc
CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"

阅读剩余部分...

php安装memcache模块

安装memcahed后还需要给php安装上memcahe模块才能调用,如果你喜欢也可以用pecl install memcache安装,如果是从源码仓里面安装的php也可以直接搜索安装php-memcache
1
2
3
4
5
6
7
8
9
wget -c http://pecl.php.net/get/memcache-3.0.6.tgz
tar xzf memcache-3.0.6.tgz
cd memcache-3.0.6<div style="color:#e53333;">/usr/bin/phpize</div>
 
./configure --enable-memcache --with-php-config=<span style="color:#e53333;">/usr/bin/php-config</span> --with-zlib-dir
make
make install
echo "extension_dir = <span style="color:#e53333;">/usr/lib/php/extensions/no-debug-non-zts-20060613</span>" &gt;&gt;/etc/php.ini
echo "extension = memcache.so"&gt;&gt;/etc/php.ini<div style="color:#e53333;">/usr/bin/php -m|grep memcahe </div>
红色部分需要根据您的具体情况修改改,安装完后运行 

nginx和MySQL安装加载gperftools模块

gperftools是google小组
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if [ `uname -i` == "x86_64" ];
then
cd /tmp
wget -c http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz 
tar zxf libunwind-1.1.tar.gz
cd libunwind-1.1
./configure
make &amp;&amp; make install
fi
cd /tmp
wget -c https://gperftools.googlecode.com/files/gperftools-2.0.tar.gz
tar zxf gperftools-2.0.tar.gz
cd gperftools-2.0
./configure  
make  &amp;&amp; make install 
 
echo "/usr/local/lib" &gt; /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig
将编译好的libtcmalloc.so模块加入mysqld_safe启动的时候进行动态加载
1
2
sed -i 's/executing mysqld_safe/executing mysqld_safe\nexport LD_PRELOAD=\/usr\/local\/lib\/libtcmalloc.so/g'    /usr/bin/mysqld_safe
/etc/init.d/mysql restart
nginx不支持动态加载所以要重新编译
1
2
3
4
5
6
./configure 【其他参数】 --with-google_perftools_module
make &amp;&amp; make install 
echo "google_perftools_profiles /tmp/tcmalloc;"&gt;&gt;/etc/nginx/nginx.conf
/etc/init.d/nginx restart
mkdir /tmp/tcmalloc/ 
chmod  0777 /tmp/tcmalloc/

编译升级gcc-4.7.1

centos5升级kernel到3.7的时候发现gcc版本问题无法编译,rpm里面没有只有老版本只能自己编译一下了.
1
2
3
4
5
6
7
8
9
10
11
sudo yum install glibc-static libstdc++-static
wget http://ftp.gnu.org/gnu/gcc/gcc-4.7.1/gcc-4.7.1.tar.gz
tar xzf gcc-4.7.1.tar.gz
cd gcc-4.7.1
./contrib/download_prerequisites
cd ..
mkdir build_gcc4.7.1
cd build_gcc4.7.1
../gcc-4.7.1/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j24   #根据您的服务器CPU核心设置
sudo make install