Skip to content

OpenCart开发支付宝插件

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

 

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*