Loading...

简单介绍如何在网站集成支付宝或者paypal及时到帐交易

类归于: 互联网事 — 江东 @ 2010-05-09 13:57:30 才(14)条评论

支付宝,安全、简单、快捷的网上支付 最近收到很多邮件,询问如何集成支付宝和paypal到网站中,而这些咨询的朋友又是比较熟悉php编程的,所以我不妨写一篇日志简单减少集成的流程:

  1. 支付宝请首先购买商家服务,否则没有API使用,同理paypal请升级为商家用户;
  2. 创建一个支付记录的数据表,表里面应该至少包含1. 交易ID 2.交易日期 3. 交易金额 4.此笔交易所有者的帐号,其他信息;
  3. 创建交易链接,创建链接包含交易金额,同时包含服务器通知链接*(后面有解释),便于服务器将交易状态通知到该程序。
  4. 编写通知链接指向的那个文件,接收交易平台发过来的通知,如果确定交易成功,则返回一个“成功”的标志给服务器,以免服务器重复发送。同时将交易数据更新到第二步创建的数据表中,供今后使用;
  5. 至此,每个用户的当前余额就可以在交易记录中提取了,有了数据,后面如何扣款,那自然是很简单的事情了。

服务器通知链接*:一旦发起了交易,只要在支付宝或者是paypal创建成功,那么支付平台的服务器就会向你指定的这个链接发送通知。然后便可以根据发送过来的内容判断交易状态。当然,这个程序同时也要给交易平台一个应答,否则交易平台无法判断通知是否被接受到,如果无法判断通知被接受到,交易平台服务器会不断的发送通知,当然发送会有时间间隔的,这个时间间隔会不断的增大。

几点注意事项:

  1. 支付宝的通知链接是不能有任何get参数的,比如 http://homzz.com/ali_notify.php?userid=100 这样是永远不可能成功的,所以要判断交易与哪个用户相关,必须在第二步,将交易ID和交易所有者关联好,到时候根据支付宝的通知返回的交易ID来判断交易的所属;
  2. paypal没有get参数限制,然而paypal的交易ID是不可以预设的,因此,我们可以动态创建通知返回链接如http://homzz.com/ali_notify.php?userid=100,那么这笔交易产生之后,paypal就只会向这个指定的link发送通知;
  3. 接收到一个通知之后,请向paypal或者alipay返回成功标志,以免重复通知;
  4. 由于有时候程序故障,或者第三方支付平台也会故障,或者是网络故障,导致返回的“成功”标志没有被支付平台服务器识别,所以在第四步的时候,要考虑重复通知问题,也就是说,即使重复通知了,数据库也不要产生多次插入操作,防止凭空出现无用的交易。

就写到这里吧,这对做即使到帐交易程序的朋友应该有点帮助。

解决最近刚刚出现的图片红叉问题

类归于: PHP, 网站技术 — 江东 @ 2009-07-16 23:13:49 才(45)条评论

由于本人的相册都很和谐,所以还是得想办法让用户能看见。

原理很简单,首先在国外的主机上加上一段代码,让国外的主机根据GET传递过去的url参数相片读取下来,缓存在自己服务器上,由于某个东西异常厉害,所以传递参数的时候还得要将某些单词给替代,才能传递,否则国外的主机连带撞死;

然后打开模板中的footer文件,添加一段js代码,此js代码的作用就是遍历该页所有图片,然后将其替代成http://xxx.com/readimg.php?这里是图片的地址,这样图片就可以正常显示了。js代码如下

$(”img “).each(function(i){//遍历本页所有的图片
var src = $(this).attr(”src”);
if( src.indexOf(’ggpht’)!=-1 ){//如果图片来自某个地方,则替代之
$(this).attr(”src”,”http://0bad.com/readimg.php?src=”+src.replace(”ggpht”,”gouride”) );//则将图片地址改成转发的地址,记住ggpht替代掉,因为这个会触发墙
}
});

上面的全角字母请自行改成半角字母(请保证你主题引入了jquery )

至于那个php文件,请到这里下载:pika 然后放置到你国外的空间。ache和cache下的所有文件夹属性请设置成0777

另外,请大家低调发表评论,不要带上关键字,被和谐怕了

另,效果请参见右上角的homezz图片。

php插件方式将会在明天发布,届时feed中的图片也会正常显示!

此举仅仅是为了正常的blog能正常的显示图片,本人不敢造次!

不太熟悉如何使用的朋友,请等待我的插件发布!

定期发送数据库备份到email的程序

类归于: 网站技术, 虚拟主机 — 江东 @ 2009-07-08 23:00:40 才(19)条评论

cosbeta自己的每一个程序(如本站storyday.com,如homezz.com)都会有定期email备份,实现的原理很简单,那就是用php备份数据库,用crobjob定期(每天一次)执行这个程序将php的备份文件发送到我自己的email中。

程序下载地址:databasebackup

程序的安装方法:

  1. 直接下载,解压缩,将目录上传到服务器上;
  2. 打开index.php按照注释修改最前面的配置信息;
  3. 设置 data 文件夹的属性为0777, 为了数据库不会直接被下载,请不要删除 .htaccess
  4. http://您的域名/databasebackup?code=随机代码 打开网页,看看有没有错误提示,若没有并且收到了数据库备份邮件,则表示程序运行成功

下面在cpanel中让该程序可以自动运行

  1. 登录cpanel
  2. 进入cronjobs22-53-16
  3. 选择标准模式:22-53-22
  4. 设置每天执行一次php程序
    22-54-09

从此以后,您的数据库备份就会定期发送到您的邮箱。
提示:发件箱建议设置成gmail,我在国外虚拟主机上测试使用国内邮箱发送可能会失败。

程序下载地址:databasebackup

mysql大数据转移解决方案

类归于: 网站技术, 虚拟主机 — 江东 @ 2009-06-26 18:14:36 才(25)条评论

其实以前写过一次phpmyadmin无法导入大文件的解决方案,然而有些东西,若不点透,还是会有很大批的网友不明白怎么操作。所以下面我只告诉步骤,不再讲任何原理,事实证明,任何原理,懂的人没有必要看,不懂的人他们不会去看,即使原理很浅显。

首先在原来的phpmyadmin中分两步导出mysql数据库

请分两个步骤导出

第一步:导出数据库结构。数据库结构文件一般很小,几乎不可能超过2M,所以可以直接在另外一个phpmyadmin的上面直接恢复; (read on …)

一个判断网站是否和谐的思路

类归于: 网站技术, 虚拟主机 — 江东 @ 2009-05-19 17:31:56 才(10)条评论

万里长城永不到,互联网上的长城一直是网友心中的痛,它将我们保护得严严实实,密不透风,以至于墙外的好东西都无法让我们欣赏到,一旦有东西探头进来,必杀之。如今的墙已经变得不能再敏感了,就如同有过敏性鼻炎的人一样,一旦有少量的过敏原,喷嚏就会不断。

cosbeta对墙异常害怕,因为它的一个小动作就能让我忙上几十天。所以cosbeta自己写了一个小程序,来判断homezz 下面的站点是否有少量出格的语言。具体思路如下:

  1. 利用api获取homezz下面主机群所有绑定的域名,包括子域名;
  2. 每天定时用curl模拟浏览器,google和百度搜索 site:xxx.com;
  3. 截取前面搜索的几个url链接(因为每天都要执行这个动作,所以cosbeta只截取了前面10个链接);
  4. 利用php curl逐一访问这10个链接,访问之后再访问三次,比较三次的结果,若发现某个网址3次结果数据length差距明显,变分析是不是访问不拒绝;
  5. 若是访问拒绝,从api中获取该用户的cpanel帐户,suspend 之;

当然,上面的程序必须在国内的服务器上运行,或者在你本机上运行。

前天运行此程序,suspend了3个帐户,不过考虑到主要靠自律,所以cosbeta暂时取消了这个程序。

目前正在想办法进一步完善这个程序!

phpmyadmin无法导入大的SQL解决方案

类归于: PHP, 网站技术 — 江东 @ 2009-05-10 11:16:20 才(13)条评论

其实导入SQL的最快的方法还是直接登录到服务器上,直接命令行导入,没有开通SSH的服务器可以通过其他服务器中转导入,但是这些方法对于不熟悉linux命令的朋友都显得比较麻烦。所以,我昨天晚上就花了一点时间,写了一个简陋的php文件,用于导入大的sql到新的mysql数据库中。

内容如下
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'wordpress');
define('DB_HOST', 'localhost');
/*直接copy您wordpress数据库设置部分即可*/
$mysql = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("mysql connect fail, wrong password");
mysql_select_db(DB_NAME)or die("select DB fail");
mysql_query("set names utf8");
$fp = fopen("db.sql","r") or die('can not open file');
while( $s = fgets( $fp,100000 ) ){
$m .= $s;
}
$sql_content = explode(";\n",$m);
$i = 0;
$max = count($sql_content) ;
while( $i < $max ){
mysql_query( $sql_content [$i] );
if( mysql_error()) echo mysql_error()."<br />";
else{
$n ++;
}
$i ++;
}
echo "<br />mysql queries:".$n;
fclose($fp);

导入就很简单了,将需要导入的sql文件命名为db.sql,上传到网站根目录,将上面的代码保存为import.php也上传到根目录,然后运行import.php,即可完成数据库的导入。
当然,您也可以直接下载这个文件:import

注意:导入之后,请一定要删除或者重命名这个import.php文件

lamp CPANEL主机管理系统预告

类归于: 网站技术, 虚拟主机 — 江东 @ 2009-04-13 15:52:52 才(19)条评论

最近在外面跑得比较多,加上php任务不少,所以这个程序不知道何时能搞定,还是预先在这里打一个广告吧。

该程序基于php+mysql,有如下功能:

  1. 该程序只能管理lamp虚拟主机,并且该虚拟主机上装有cpanel和cpanel WHM(国外的linuxreseller虚拟主机大多如此);
  2. 集成支付宝,自动为用户开通虚拟主机帐号;
  3. 支持无尾巴推介(参见这里http://host.storyday.com/affiliate.php 南方电信问题,可能访问较慢)系统;
  4. 后台可设定多种虚拟主机PLAN,方便用户选择;
  5. 后台可以添加多个(1000个都没有问题,只要该程序所在的虚拟主机够用)reseller虚拟主机帐户,动态将用户分配到用户较少的虚拟主机上;
  6. 后台可手动停止指定帐户的虚拟主机;
  7. 可定时将未续费帐户挂起;
  8. 支持删除到期帐户;
  9. 可设定卡密续费,类似中国移动充值卡的方式;

特点:

  1. 支持多用户,方便多管理员操作;
  2. 操作日志记录清晰,方便查阅;
  3. 全站ajax,方便管理;
  4. 可定制功能(额外收费)

该系统预售价:¥3000元一套,含3年售后技术支持和3年之内的技术升级。

哈哈,若你也相同的系统,纯属巧合。

程序预览嘛,将会在一段时间之后推出!

欢迎朋友一起讨论相关技术。

Cannot modify header information

类归于: PHP, 网站技术 — 江东 @ 2009-03-28 19:19:19 才(7)条评论

请php熟练者略过此文。

既然你打算继续往下看,说明你不熟悉php或者正在入门,那么我就用最简单(不会假装高深的搬出http 协议中header的解释,其实我也不会)的说说出现这样问题的原因:

当php程序出现cannot modify header information错误的时候,从cannot modify header information的字面不难理解,表示程序无法发送header信息,一般的出错信息完整的应该是类似Warning: Cannot modify header information – headers already sent by的提示。那么下面几种情况会出现Cannot modify header information

  1. 单独的php文件session_start()之前有echo print等等输出;
  2. 在setcookie之前有echo print等等输出;
  3. 在set cookie和session_start之前有包含的文件,而这个包含的文件有输出;
  4. 在set cookie和session_start之前有包含的文件,而这个包含的文件为html或者含有html(包括<?php ?>外面的空格);
  5. 程序文件<?php之前不小心打了一个空格;
  6. 带有bom的utf8编码文件,因为有bom,所有在<?php之前其实有编辑器看不到的输出;

总之,出现这个问题的根源只有一个:那就是在session_start和setcookie之前有输出的都会出现Cannot modify header information的错误。无论是程序本身echo出来的、被include 进来的程序echo的还是php代码之外的html存在空格它们统统都是输出。

所以你若是使用wordpress,第一次安装进入后台,发现Cannot modify header information之类的错误,首先要要检查的就是wp-config.php文件中<?php之前和?>之后是不是不小心打了换行或者空格符号?是的话,则删除之。检查wp-config.php是不是utf8编码?管他是不是,用编辑器(下载一个editplus的试用版本)打开,另存为的时候,选择UTF-8再次覆盖保存即可。