Skip to content

OpenCart开发支付宝插件

11-一-12

OpenCart用了很久了,渐渐发现它越来越不适合自己的需要。想要达到国人的使用习惯,必须进行大的改动。包括核心框架的改动。例如各种插件模块的文件放置位置,太分散,想写个模块要在目录里来回倒腾好几次,有时候时间一长就根本不记得文件在哪个目录里。当然,这些都得等有时间了才能去弄。

这回要给OpenCart加个支付宝的插件,本来官网上有免费的支付宝插件可以下的,不知什么时候开始,OpenCart的铜臭味越来越重了,只要是附加的东西都想赚点零花用用。只好自己来写。

文件放置的位置前面已经说过了,比较分散,支付模块的文件都在catalog/controller/payment/下,新建个alipay的子目录,和alipay.php的文件。

模块怎么写就不重复讲解了,写这个下来也就是为了给自己一个提醒。主要说下疑难问题。

支付宝模块需要三个文件,

alipay.php

给OpenCart用的,当用户确认订单后,用来生成支付宝支付链接用的。这个文件只要能获得生成的订单号,并将订单数据,按照支付宝的要求,拼接成URL链接,让用户能跳转到支付页面就行了。本来是件挺简单的事,而且支付宝的接口说明也有例子,照抄都行。

这里有几点要注意,因为我没有照抄接口的例子,而是自己重头写的,在对URL进行签名时出了问题,签名本身并不复杂,只要对拼接的URL进行MD5运算就行。我在写的时候忽略了例子中的一个操作,即对要提交的数据进行排序。问题就出在这里,我估计是支付宝收到数据后,也是先将变量们进行排序后,再验证签名的,所以这里必须做一步排序的工作 。这个问题影响了进度。这里特别注明一下,以免以后忘了。

alipay_notify.php,

这个文件是用在支付宝完成付款后的异步通知,支付宝在完成支付后会做两个通知,一个是异步的,用户看不到,在后台通知网站,支付成功了,另外,还会将完成后的页面重定向回网站指定的页面。这两次通知都会带有返回数据,供网站使用。

那么为什么会做两次通知呢?主要是因为跳转通知(即alipay_return.php要做的工作),在执行时,跳转页面会被用户给关掉,这样网站就不能通过这个方式来获知付款是否成功,异步通知不会因为用户的操作而终止,所以两种方式起码能保证有一种途径能正常通知网站。

alipay_return.php

这个文件是在支付完成 后从支付宝跳转 回来的页面。

上面两个问题明白了,那么程序就不难写了。

另外一点接口里的return_url和notify_url这两个URL里不能有?flag=abc&open=true这样的东西。虽然不知道支付宝是怎么想的,既然这是规定就必须遵守,不然网站付不了钱就不好玩了。

所以,OpenCart里如果去掉url里的“route=”就必须写成“http://www.xxoo.com/catalog/controller/payment/alipay_callback.php”

最后吐个槽,支付宝这么大的公司,这么大的支付量,现金流量,有这么大的用户群,竟然不支持沙箱测试。非得搞个1分钱的东西去测试,妈的,1分钱也是钱啊,测试10次就是1块钱了。全进支付宝口袋了。

 

IE呀IE万恶的IE!

21-十二-11

Skyline的程序写到加载fly文件的时候,先要去本地目录选择一个fly文件,其它加载到程序里,那么就需要得到这个文件的本地地址。好。页面上放个fileField,再写段js。运行,提示加载文件失败,文件找不到。怎么会找不到,把fileField里的数据alert出来一看,所有的开头都变成了“C:\fakepath\”,搞什么东西,一看就知道IE又二了。去网上一搜,果然,IE8里要想上传文件,得把安全级别调一下。如下:

工具 -> Internet选项 -> 安全 -> 自定义级别 -> 找到“其他”中的“将本地文件上载至服务器时包含本地目录路径”,选中“启用”。

再试,可以了。

万恶的IE!

华为C8650如何实现USB调试

05-十二-11

话说折腾这个USB调试有段时间了。怎么整都不行。这里是指Mac OS平台。windows平台可以略过不看。

那么这个Mac OS平台为什么不行呢?主要是因为华为的USB模式搞了个光盘加USB双模式,也就是你在windows下插上手机到USB口,系统会自动加载一个光盘镜像,里面是天翼的什么宽带连接程序,这个就是光盘模式,再加上USB功能,就变成双模式了。

这模式不敢说不好,反正对我来说没什么用,尤其到了Mac OS上,这种方式简直就是SB模式,我的Mac根本认不到光盘模式,认到也没用,都是windows的可执行程序。自然的,adb也就认不出android设备,当时还以为是手机太垃圾了。还去论坛问来着。

也就是在论坛逛的时候偶然间解决了我这问题。当时是想看看别人是怎么解决C8650GPS定位不行的问题,找到一篇文章,说要关掉手机的基于CDMA网络的快速定位功能,于是按照文章所说,进入工程模式。

在手机上拨号: *#*#2846579#*#*

进入工程模式后,选择ProjectMenu,然后是“3.后台设置”,接着“4.USB端口配置”,会看到一长串的列表,只要选中“google模式”就行。然后退出工程模式,重启下机器。再连到Mac上试试,手机上会出现已经连接usb调试的提示。在系统里用”adb devices”也能查看到C8650设备了。

写个程序试试,一切正常。

 

如何去除DEDECMS系统中友情链接里的“织梦链”

17-十一-11

最近不得已用dedecms来做项目,已经很久没用dede了,现在的版本都好高,功能也强不少。记得以前dede会背地里向服务器发送网站的地址之类的信息,这次测试发现,在浏览器这层,除了向dede的网站请求了几张图片之外,没有其它多余的动作。正当我以为dede走上正道的时候,发现页面底部默认的友情链接列表里有一堆不知道哪里来的链接,后台数据库里并没有这些内容。网上搜了一把,主要是自己懒不想动脑子,说是dede在解析模版标签的时候偷偷的加上去的。于是,还得动脑子了。

在dede的include/taglib/flinktype.lib.php文件中对type做了判断,凡是id为999的,就是“织梦链”。只要删了下面这段,就可以不显示了。

$dedecms = false;
$dedecms->id = 999;
$dedecms->typename = ‘织梦链’;
if($type == ‘dedecms’) $row[] = $dedecms;

到这里应该说问题解决了,“织梦链”被干掉了,欢呼吧。

打住,这只是把type给干掉了,那“织梦链”依然存在,只是因为没有了type系统不会显示而已。这些“织梦链”到底从哪里来的呢?

跟flinktype.lib.php同一个目录有一个flink.lib.php,打开。你会发现有这么一段:

 if($typeid == 0)
{
$wsql .= ”;
}
else if($typeid == 999)
{
//require (DEDEDATA.’/admin/config_update.php’);
//if (!class_exists(‘DedeHttpDown’, false)) {
//require_once(DEDEINC.’/dedehttpdown.class.php’);
//}
//$del = new DedeHttpDown();
//$del->OpenUrl($linkHost);
//$linkUrl = $del->GetHtml().”flink.php?lang={$cfg_soft_lang}&site={$_SERVER['SERVER_NAME']}”;
//$del->OpenUrl($linkUrl);
//$linkInfo = $del->GetHtml();
//if(!empty($linkInfo)){
//$dedelink = explode(“\t”, $linkInfo);
//for($i=0; $i<count($dedelink); $i++) {
//if($i%5==0 && $i!=count($dedelink)) {
//$revalue .= “<li><a href=’http://”.@$dedelink[$i+1].”‘ target=’_blank’ title=’”.@$dedelink[$i+4].”‘>”.@$dedelink[$i].”</a></li>”;
//}
//}
//}
//return $revalue;
}
else
{
$wsql .= “And typeid = ‘$typeid’”;
}

注意被我注释掉的部分,系统先创建一个http连接,去dede的风站上把“织梦链”的数据下载下来,与此同时,你的网站的地址也被发送给了dede。我说怎么在浏览器跟踪不到dede去访问他们自己的网站,原来它是通过PHP在服务器端来偷发数据,这下被打回原形了。注释掉或是删掉上面相关代码,“织梦链”才算真正被消灭。

dede在这方面的技术看来是越来越精了,一个友情链接都会出这样的事,更何况系统的核心代友码。新版本的dede必要要从 头把代码过滤一遍才行了。

就这么多。睡觉,太困了。

 

 

 

 

 

 

 

CodeIgniter 去掉URL里的index.php

11-十一-11

折腾了半天的zend framework,发现zend入门太难.虽然已经算是入了门,可开发起来还是很累.想到以前用过的CodeIgniter,开发速度很快.小巧易用.听说新版支持了php5.于是转去用CI来开发.
以前用过,所以不用到处找文档,CI文档本来就挺全的.配置url的时候遇到点麻烦,直接抄论坛里的.htaccess文件,居然报500错误,以为是mac os的配置不同,后来换到windows居然也一样,百思不得其解.到处找文章,都是同一个文件.同样的配置.别人就行.
无奈之下在论坛里那个帖子里翻来翻去,翻到最后一页的时候,有人说了一句坑爹,终于明白是怎么回事了.RewriteCond里只有一个斜杠,但被LZ写成了两个,难怪会500错误.
正确的.htaccess文件如下:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

花了一个小时,订餐的小程序开了个头.