在互联网时代,支付是商业交易的核心环节。对于中小型网站和应用来说,自建支付系统成本高昂,而接入第三方支付又面临技术门槛高、对接复杂等问题。易支付作为一款聚合支付平台,提供了简洁易用的API接口,让开发者能够快速完成支付功能的集成。
一、什么是易支付API接口?
易支付API接口是一套用于连接商户系统与支付平台的通信协议。通过这套接口,商户可以轻松实现扫码支付、API支付、订单查询、异步回调等功能。接口采用HTTP/HTTPS协议,支持POST和GET两种请求方式,数据格式为JSON或表单提交,返回结果统一为JSON格式。
与单一的支付宝或微信支付接口相比,易支付最大的优势在于一站式接入。只需要对接一次,就能同时支持支付宝、微信支付、QQ钱包等多种支付方式,大大降低了开发成本和维护复杂度。
二、易支付API对接前的准备工作
在开始对接之前,商户需要完成以下准备工作:
1. 注册商户账号
首先需要在易支付平台注册商户账号,完成企业或个人信息认证。认证通过后,系统会分配唯一的商户ID(pid)和商户密钥(key),这两个参数在后续对接中必不可少。
2. 了解接口地址
易支付提供了两个主要的接口地址:
- 页面跳转支付接口:用于直接跳转到支付页面
- API接口(mapi):用于后端获取支付二维码或跳转链接
3. 准备回调地址
商户需要提供一个异步通知地址(notify_url)和跳转通知地址(return_url)。前者用于支付平台服务器端通知,后者用于用户支付完成后跳转回商户页面。
三、易支付API签名算法详解
为了保证数据传输的安全性,易支付采用了MD5签名算法。签名的生成过程如下:
第一步:参数排序
将所有待签名参数(sign和sign_type除外)按照参数名的ASCII码从小到大排序,拼接成URL键值对格式,例如:
a=b&c=d&e=f
第二步:追加密钥
将排序后的字符串与商户密钥KEY进行拼接:
md5(a=b&c=d&e=f + KEY)
第三步:生成签名
对拼接后的字符串进行MD5加密,结果转为小写,即为sign参数值。
需要注意的是:
- 所有参数值不要进行URL编码
- 签名字符串必须与接口文档一致
- 密钥要妥善保管,切勿泄露
四、发起支付请求的完整示例
下面是一个完整的发起支付请求的示例代码(PHP):
<?php
// 易支付支付请求示例
$pid = 1001; // 商户ID
$key = 'your_secret_key'; // 商户密钥
// 构建请求参数
$params = [
'pid' => $pid,
'type' => 'alipay', // 支付方式:alipay/wechat/qqpay
'out_trade_no' => time(), // 商户订单号
'notify_url' => 'http://yourdomain.com/notify.php', // 异步通知地址
'return_url' => 'http://yourdomain.com/return.php', // 跳转通知地址
'name' => 'VIP会员', // 商品名称
'money' => '99.00' // 商品金额
];
// 生成签名
ksort($params);
$sign_str = '';
foreach ($params as $k => $v) {
$sign_str .= $k.'='.$v.'&';
}
$sign_str = rtrim($sign_str, '&');
$sign = md5($sign_str . $key);
// 追加签名和类型
$params['sign'] = $sign;
$params['sign_type'] = 'MD5';
// 跳转支付
header('Location: http://pay.example.com/submit.php?' . http_build_query($params));
?>
五、处理异步回调通知
当用户支付成功后,易支付服务器会向商户的notify_url发送异步通知。商户需要在收到通知后:
1. 验证签名
首先验证回调参数的签名是否正确,确保数据未被篡改。
2. 验证订单状态
检查trade_status参数是否为"TRADE_SUCCESS"。
3. 处理业务逻辑
根据订单号查询本地数据库,执行相应的业务处理,如增加用户余额、开通会员权限等。
4. 返回success
处理完成后,必须输出字符串"success"表示已收到通知。如果输出其他内容或无输出,易支付会继续发送通知。
<?php
// 异步回调处理示例
$key = 'your_secret_key';
// 获取所有参数
$params = $_POST;
// 验证签名
$sign = $params['sign'];
unset($params['sign'], $params['sign_type']);
ksort($params);
$sign_str = '';
foreach ($params as $k => $v) {
$sign_str .= $k.'='.$v.'&';
}
$sign_str = rtrim($sign_str, '&');
if (md5($sign_str . $key) !== $sign) {
exit('签名验证失败');
}
// 验证订单状态
if ($params['trade_status'] === 'TRADE_SUCCESS') {
$out_trade_no = $params['out_trade_no'];
// TODO: 执行自己的业务逻辑
// 如:更新订单状态、发放商品等
echo 'success'; // 返回成功状态
} else {
echo 'fail';
}
?>
六、常见问题解答
Q1:支付成功后没有收到回调怎么办?
A1:首先检查服务器是否能正常访问,检查防火墙设置;其次查看订单状态是否确实已支付;最后可以到易支付后台手动补发通知。
Q2:签名一直验证失败怎么办?
A2:确认密钥是否正确;检查参数拼接顺序是否按ASCII码排序;确保没有对参数值进行URL编码。
Q3:如何测试支付功能?
A3:大多数易支付平台提供沙箱环境或测试模式,可以先用测试账号和订单进行调试,避免产生真实交易。
七、总结
易支付API接口的对接并不复杂,只要掌握了签名算法和回调处理的核心逻辑,就能快速完成支付功能的集成。对于技术能力有限的开发者,易支付还提供了SDK开发包,包含了各主流语言的完整示例代码,可以进一步简化对接过程。
通过本文的介绍,相信大家对易支付API对接已经有了全面的了解。下一篇文章我们将详细介绍聚合支付的优势与应用场景,敬请期待。