Skip to content

Tag Archives: php

Taobao API应用开发

17-二-12

首先说一句,TaoBao API的文档,真是够烂的。一个问题要翻上好几遍文档,再搜索来搜索去,才能找到稍微符合的解释内容。实在不知道这么大一公司为什么文档整这么烂,是不是成心要用户去买他们的有偿服务的。恶心。 做了一个星期的应用,除了查文档之外,都还顺利。先说说授权,根据应用的类型不同,授权方式也不同。 web类型的应用,需要有一个回调地址,怎么个意思呢。就是说web程序向taobao发起授权申请,那么taobao不是直接返回授权结果,而是访问你留给他的加调地址,并加上结果参数。你的回调地址可以通过附加的结果参数来得到session key。 这东西厉害了,所有有关隐私的API调用都得加上这个session key。 C\S类的应用,怎么办呢,没有回调址,他就直接用localhost代替了。原理都是一样的。通过附加参数来取得session key。 关于session key的有效期,也就是授权的有效期,根据应用类型来确定,基本上不需要发布的应用,也就是你不指望卖你的应用来发财的,有效期都很长,像卖家后台服务就有一年的有效期。当初建应用的时候就选错了类型,搞得有效期才一天,心想总不能让我一天授一次权吧,这不麻烦死。后来改成卖家后台服务就行了。 再说说API调用。把官方的SDK下下来一看,亲娘来,怎么还带了一个PHP框架,你让我自己的框架怎么处理。妈的。TaoBao真不是一般人能理解的。研究了一下这个SDK,也就是用到了这个附带框架的自动加载功能,其它的没什么特别。 API调用总的说来,就是向TaoBao服务器发起http请求。只要URL参数拼对了,一般是没什么问题的。API的参数有很多,大致分两类,一类是系统级的,一类是应用级的。系统级的参数是必须传的;应用级的,根据需要自己决定。 调用的时候有一个签名的过程,说明一下:把所有参数都准备好,按照文档要求拼接好字符串,记着要把sign这个参数去掉,拼接的顺序有讲究,一定要对参数进行排序,就是从a到z这种正序排好,这个在程序里用数组做就行。具体怎么做就不用多说了。PHP有现成的函数ksort(); 如果不排序,签出来的肯定是错的。然后把签名结果赋给sign。接着,再用这个完整的参数(添加了sign的)来拼装url。 http请求用curl也行。用file_get_contents也行。Taobao都会返回数据的。数据格式有XML和json之分。我选了json。 先这么多,以后再慢慢说。

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块钱了。全进支付宝口袋了。  

如何去除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 [...]

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] 花了一个小时,订餐的小程序开了个头.

Zend Framework 一

23-十-11

今天 再一次拿起Zend Framework,一直认为Zend framework的官方教程难懂,照着抄都无法运行。这次找到一个非官方的,反正挺有名的,再次证明老外的东西就是好。 教程看这里:http://akrabat.com/zend-framework-tutorial 总结一下Zend Framework要怎么用。 首先要配置好开发环境,php的运行环境就不讲了,喜欢用套件的用套件,不喜欢用套件的就自己配,反正能运行php就行了。然后,配置zend Framework,截一段教程里的原文: Extractthedownloadedarchivefile,ZendFramework-1.11.10-minimal.zipinyourDownloads directory by double clicking on it. Copyto/usr/local/ZendFrameworkClibyopeningTerminalandtyping: sudo cp -r ~/Downloads/ZendFramework-1.11.10-minimal /usr/local/ ZendFrameworkCli Edit your bash profile to provide an alias: • From Terminal, type: open ~/.bash_profile • Addaliaszf=/usr/local/ZendFrameworkCli/bin/zf.shtotheendofthefile • Save and exit TextEdit. • Exit Terminal. 执行zf show version,能看到 Zend Framework Version: 1.11.10   [...]