咱们直接说正事,这篇文章教你给帝国CMS网站接入在线支付,不管是做商城、会员充值、付费内容,还是搞个“赞助我”按钮,都管用,默认你用的是帝国CMS 7.5以上版本,PHP环境7.x或8.x,服务器已配好HTTPS,要是还在用老古董PHP5.2,先别折腾,升完级再回来看。
适用人群

帝国CMS在线支付从0到1,支付宝/微信对接实操,这些坑你一定别踩
- 已经建好帝国CMS站点,想加收款功能但没写过支付接口的新手;
- 懂后台操作,但对支付宝/微信支付文档发怵的“半新手”;
- 准备做付费站,还没想清楚怎么收钱,想先跑通流程的站长。
注意:如果你用的是那种没法改php.ini的虚拟主机,或者服务器没装curl扩展,直接跳过本文,先去升级环境,支付集成要跟支付平台实时通信,没有curl和HTTPS支持会卡死。
【完整搭建步骤】
第一步:备份,备份,备份!
重要的事说三遍,后台“系统设置 -> 备份/恢复”把数据库备份一次,再用FTP把网站文件整个拉一份到本地,支付集成改错一个字母,轻则登录页变白,重则数据全没,别问我怎么知道的。
第二步:准备支付参数。
以支付宝为例,去开放平台申请“电脑网站支付”或“手机网站支付”产品,签约后拿到四个关键值:APPID、应用私钥、支付宝公钥、加密方式(选RSA2),微信支付的话,你需要商户号、API密钥、Native支付或JSAPI支付开通权限,这些申请一般当天能过,慢的等一两天。
第三步:上传支付插件。
网上搜“帝国CMS 支付宝 微信 支付插件”,找一个近期更新、支持PHP7以上的,下载解压后,把里面的e/payment、e/member、e/extend等目录按原路径上传到网站根目录覆盖,注意先看插件说明,别一股脑全传上去,有些插件会覆盖你的自定义文件,如果不放心,先只上传e/payment这个核心目录,其他看需要再传。
第四步:后台配置参数。
进帝国CMS后台,找到“会员中心 -> 在线支付设置”或“系统设置 -> 支付方式”(具体看插件),把APPID、应用私钥、公钥填进去,回调地址一般长这样:
https://你的域名/e/payment/alipay/notify.php
微信支付的回调地址类似,但可能带?method=wxpay,注意:http://不行,必须是https://,而且整体URL不能带中文或空格,如果后台填的时候提示“请使用合法域名”,检查一下“系统设置 -> 网站地址”是不是也改成了https开头。
第五步:写一个支付入口页面。
新建一个PHP模板,或者直接在文章模板里加个“立即支付”按钮,跳转到pay.php,核心代码大概长这样(以插件为准):
require_once('e/class/connect.php');
$pay = new ECMS_Pay();
$orderid = time() . rand(1000,9999); // 唯一订单号
$amount = 0.01; // 金额,单位元
$subject = '网站会员充值'; // 商品名
$pay->doPay($orderid, $amount, $subject);
这段代码的作用是:生成订单号->请求支付平台->跳转到收银台或生成二维码,实际函数名看插件,但原理一样,如果插件没有自带订单表,你至少要用Session或数据库记录这个订单号,以便后面核验。
第六步:处理异步通知。
这是最关键的,也是新手中招最多的地方,支付平台在用户付款后,会POST一堆数据到你后台填的回调地址,你在这个地址对应的文件里(比如notify.php)要做三件事:
- 验证签名(防止伪造回调);
- 检查金额和订单号与你库里的是否一致;
- 更新订单状态为“已支付”,然后给平台输出“success”或“fail”。
支付宝的异步回调简化示例:
$verify = new AlipayNotify($config);
if ($verify->verifyNotify()) {
$orderid = $_POST['out_trade_no'];
$total = $_POST['total_amount'];
// 查库比对,更新订单状态
echo "success";
} else {
echo "fail";
}
微信支付回调需要解密,但流程一致:先验签、再验金额、更新订单、返回通知成功,千万别在回调里写echo "成功"这种话,平台只认success字符串(微信是跳过响应或返回固定格式)。
第七步:测试。
用真实环境支付的“最低支付额”(支付宝微信都支持0.01元)跑一遍,完整流程:用户下单->调起支付->付款->回调->后台订单状态变更,测试时关掉后台的模板缓存,否则回调更新后页面不刷新。
【配置要点】
- 回调地址必须公网可访问,不能用
localhost或0.0.1。 - 支付密钥用RSA2,别用已经废掉的RSA。
- 金额一律用“元”为单位传给平台,但数据库里最好存“分”的整数值,避免浮点误差。
- 每个订单号必须唯一,用
time().mt_rand(1000,9999)就够,别用自增ID(万一被枚举攻击)。 - 异步通知的
notify.php文件内不要打印任何调试信息,包括var_dump、echo,不然平台会认为回调失败。
【常见踩坑提醒】
- 回调收不到? 先看服务器防火墙有没有挡住
/e/payment/路径,再看Nginx/Apache伪静态规则是否把该目录重写了,如果后台写了回调地址但在浏览器直接打开notify.php,说明域名解析没问题,问题出在支付平台那边——检查你提交的URL是不是真的公网可访问。 - 支付成功但订单没更新? 99%是异步通知没写,或者把同步通知(付款后跳回网站的URL)当成了异步,同步跳转页面只做展示,不能改订单状态,必须以异步通知为准。
- 支付宝报“验签错误”? 看看是不是把“应用私钥”和“支付宝公钥”搞反了,私钥是你的,公钥是支付宝的,复制时注意别带空格和换行。
- 微信支付提示“商户号未开通”? 去微信商户平台确认你开通的产品域名是否绑定了当前使用域名,而且回调地址的域名必须跟商户平台设置的授权域名一致。
- 帝国CMS后台全部变成http? 在后台“系统设置”把“网站地址”改成
https://你的域名,然后开启“强制HTTPS”开关,否则回调URL和页面跳转会丢失参数。
如果实在不想折腾官方接口,也可以接“易支付”这类聚合支付,但注意选有营业执照的老平台,我见过不少站长的钱被小聚合平台卷跑,能自己对接支付宝微信,还是尽量用官方渠道。
好了,去动手吧,先跑通一个1分钱的订单,你就能摸清帝国CMS在线支付的整个脉络,后续要加退款、订单查询、对账,都可以在这个框架上扩展,搞不定时,把报错截图和回调日志发到评论区,我给你指条明路。
发表评论