HostBill 支付宝模块

最近一阵子在搭建某 IDC 的客户与支持系统,由于 WHMCS 烂泥扶不上墙,所以我就选用了高大上的 HostBill。
(几乎免费的和一次性要付 999 刀的东西能比嘛

啊,当然呢,HostBill 也有很多不好的地方吖,比如这个自带的支付宝模块,就死活用不了,支付是没问题,但是回调啊总是 Failure。

找客服呢自然是没用的,为什么呢?我买了已经超过 30 天了,人家要额外收钱了而且还不一定能解决。

那只能自己来咯,首先付掉 2.50 EUR 在 http://easytoyou.eu 买个一天的 ionCube Decoder。

然后解密以下文件:

  • /includes/modules/Payment/class.alipay.php
  • /includes/modules/Payment/callback/alipay_return.php
  • /includes/modules/Payment/callback/alipay_callback.php

解密之后我发现调用模块居然是这样做的:

1
2
3
4
5
6
7
8
9
<?php
$_GET['cmd'] = 'callback';
$_GET['module'] = 'alipay';
$_GET['ali_type_r'] = 'callbak';
error_reporting( 0 );
session_name( 'SESSID' . substr( md5( $_SERVER['SERVER_NAME'] ), -4 ) );
session_start( );
include( '../../../../hbf/bootstrap.php' );
FrontController::init( 'module' );

你!能!想!象!调!用!模!块!居!然!用!$_GET!来!传!参!数!吗!
反!正!我!不!能!

好吧其实出错的原因呢和这儿关系不是很大,当然这么写肯定是不守妇道的!

这里用的是 $_GET['ali_type_r'],但是在 class.alipay.php 里面却检查的是 $_REQUEST['ali_type_r'],尼这是自己山寨的 $_GET 内容当然不会出现在 $_REQUEST 里啦!baka!

然后这里特么的你写的是 callbak 啊!睁大眼睛看看是不是少了一个 c

另外就是支付宝 return 的验证接口需要把 $_GET 里的所有内容做一个 chksum,然后,嗯,我想是个人都能想清楚了:
$_GET['cmd']$_GET['module']$_GET['ali_type_r'] 混进来之后 chksum 肯定会不一样的啦~

既然问题都知道了,那么就好解决了。

不过呢,作为蛋疼党,窝比较喜欢重写而不是修 Bug … 加起来连 500 行都不到嘛!(撸袖子

以及自带的模块用的还是老版本的支付宝接口,窝参考支付宝官方的 PHP 栗子更新了下。

嗯,以下是窝重写之后的代码,已经扔在 GitHub 上了喵~
https://github.com/ym/alipay-hostbill

下载之后扔在 includes/modules/Payment 目录覆盖原有文件即可。
我在 PHP 5.5 下测试过是木有问题的,其他版本有问题可能性也不大,因为这次比较收敛,没有怎么用新特性。
如果有问题的话,欢迎在 GitHub 上给我发 Bug 报告或者 Pull Request~

啊最后感谢师姑陪我写代码还送我蛋糕次以及顺便吐槽下支付宝你的 PHP 栗子是临时工写的吗,veryfyisSgin 这些是个什么玩意儿啊?!
再顺便吐槽下 1901 咖啡馆 你家为什么没有一个能让我吃 / 喝的下去的玩意儿以及为何 Wi-Fi 如此之烂以至于我在四月份的第一天就用掉了 900 M 的 3G 流量,太讨厌了!!!
发这篇文章到 Twitter 的时候我又发现了一个槽点啊哈哈,Logdown 的 slug 生成居然把 支付宝 给翻译成了 PayPal,给跪了!

哦,对了,刚才的蛋糕忘记上图了:

IMG_1006.JPG