这教程写给那些手上有网站、急着想收钱但不知道从哪下手的人。我当年第一次搞这个,对着文档看了两天没敢动,怕配置错被人刷个底掉。现在回头看,就那么回事。

前置条件:你得有什么

三样东西凑齐才能开工:一个已经备案的域名、一台能跑PHP的服务空间、一个易支付的商户号。

域名必须备案,没备案微信支付直接拦,支付宝也差不多。这块别抱侥幸,隔壁老曹上个月域名没过审,白等了一个半月。服务器最低配都行,学生机那点配置够用。商户号去易支付官网注册,审核一般半天。

第一步:拿到接口密钥,别搞混了

登录易支付后台,进"接口设置",记下商户ID和密钥。

商户ID是一串数字,密钥是一长串字母数字混合,两个配合才能签名。很多人上来就把这两个填反——商户号填到密钥框里,密钥填到商户号框里。然后跑过来问我怎么接口报错401。我闭着眼都知道是这个原因。

密钥拿到了别邮件传、别微信发。下载下来存本地,服务器上也别放web可访问目录。有个同行把密钥写config.php里放根目录,被爬虫扫到,一晚上被人建了三十几个订单。

还有一个冷门细节:易支付后台有两个密钥区域,一个叫"API密钥",一个叫"监控密钥"。你要用的是API密钥那个。监控密钥是对账用的,拿了也没法发起支付。

第二步:SDK扔进去,三行代码拉起支付

易支付官网有SDK下载,把整个目录解压到你网站里。

找到epay.config.php这个文件,把商户ID和密钥填进去。别用记事本改,编码会出问题。用Notepad++或者VS Code,保存成UTF-8无BOM。然后找到submit.php,里面示例代码大概是这么个结构:

require_once("epay.config.php");
require_once("lib/EpayCore.class.php");
$epay = new EpayCore($config);

这三行加载完,下面调createOrder传参数就能拉起支付页面。参数里out_trade_no是你自己生成的订单号,别用时间戳,加个随机后缀。我之前用纯时间戳,两个用户同一秒下单,后面那个把前面那个的订单覆盖了。

通知地址notify_url要写绝对路径,别写相对路径。写成https完整地址。有些支付站配了CDN,回调请求被CDN缓存了,返回304,支付状态就没更新。排查这个花过我一整晚。

关于支付通道怎么选,我之前在个人支付平台三个月运营实操记录 - 彩虹易支付里算过账,支付宝通道在晚上六点到十点的延时明显比微信高,做虚拟商品的尽量让用户走微信。

第三步:回调验证——最容易翻车的地方

支付成功不代表钱到账,回调验签过了才算。

易支付会往你的notify_url发一个POST请求,你在回调脚本里要干两件事:重新算一遍签名比对,然后返回"success"这个字符串。注意是纯文本"success",不是JSON,不是XML。多一个空格或者换行,易支付那边会判定回调失败,隔几分钟重试一次。超时六次就标记异常订单。

我一般这么写回调接收:

$sign = md5($post['money'] . $post['out_trade_no'] . $post['trade_no'] . $key);
if($sign === $post['sign']){ echo 'success'; exit; }

还有个细节容易被漏掉:验签之前先判断trade_status是不是TRADE_SUCCESS。用户支付了但银行端还在处理中的时候,这个字段是NOTPAY,你如果直接发货就亏了。等回调告诉你成功了再处理。

验证方法:怎么确认你配对了

在易支付后台搞一个0.01元的测试商品,自己走一遍全流程。

发起支付→扫码付一分钱→看订单状态变没变→看你的回调日志有没有收到请求。日志很重要,在回调脚本开头加一行file_put_contents记录每次收到的参数,出问题时这是救命的东西。

如果回调没收到,八成是notify_url外网访问不了。服务器上curl一下你自己的回调地址,看看返回是不是"success"。

如果出问题,先查这两个

第一种:支付页面白屏或者报SSL错误。服务器CA证书太旧,curl没法验证易支付的HTTPS证书。更新ca-certificates包就行,一行命令:yum update ca-certificates 或者 apt-get install ca-certificates。搞完重启PHP。

第二种:支付成功但订单状态不更新。除了前面说的CDN问题,还有个是回调地址被你自己网站登录拦截了。想想你网站有没有全局的登录验证中间件,回调接口是给易支付服务器调用的,它没你的session。把回调地址加到白名单里。

有些站长搞复杂了,回调里又要连数据库又要发邮件,结果脚本超时。回调处理逻辑尽量简单:验签→改订单状态→返回success。发邮件、发短信这些异步处理,扔到队列里慢慢搞。

关于支付站的搭建,易支付从零搭建实录:域名+服务器+配置全流程 - 彩虹易支付那篇我从头到尾记录过一次,域名从注册到解析生效那段时间是最磨人的。

这些对接的事儿写出来也就两千字,但你自己配肯定还会碰到意想不到的问题。干这行三年,最大的感触就是文档永远只写正常情况,异常情况全靠自己试。下次有空说说通道切换的策略,那才是真正省钱的活儿。