在PHP网站中接入支付功能,通常涉及选择支付网关、集成SDK或API、处理支付回调等步骤。以下是详细的接入流程与注意事项:
一、选择支付网关
根据目标用户群体和业务需求选择适合的支付网关:
- 国内常用支付网关:
- 微信支付(WeChat Pay)
- 支付宝(Alipay)
- 银联支付(UnionPay)
- 第三方支付平台(如Ping++、易宝支付等)
- 国际支付网关:
- PayPal
- Stripe
- Square
二、接入支付网关的步骤
1. 注册支付网关账号
- 在支付网关官网注册开发者账号,完成企业认证(需营业执照、法人身份证等)。
- 获取API密钥、商户ID等关键信息(如微信支付的
AppID
、MchID
,支付宝的AppID
)。
2. 集成支付SDK或API
示例:使用yansongda/pay
集成支付宝支付
composer require yansongda/pay
use Yansongda\Pay\Pay;
$order = [
'out_trade_no' => time(), // 订单号
'total_amount' => '100', // 金额(分)
'subject' => '商品名称',
];
$result = Pay::alipay()->web($order);
echo $result->getBody(); // 返回支付表单HTML
3. 创建支付订单
- 调用支付网关的API生成预支付订单(如微信支付的
unifiedorder
接口)。 - 订单信息需包含:
- 商户订单号()
- 支付金额
- 商品描述
- 回调通知URL
4. 发起支付请求
- PC/移动端:
- 微信支付:返回
code_url
生成二维码,用户扫码支付。 - 支付宝:返回支付表单HTML,用户跳转支付页面。
- 微信支付:返回
- H5/小程序:
- 调用支付网关的JSAPI接口(如微信支付的
JsApi
)。
- 调用支付网关的JSAPI接口(如微信支付的
三、处理支付回调
支付网关通过回调URL通知支付结果,需验证签名并更新订单状态。
示例:处理支付宝异步通知
use Yansongda\Pay\Pay;
$alipay = Pay::alipay()->verify(); // 验证签名
if ($alipay->isSuccess()) {
$order_id = $alipay->out_trade_no; // 商户订单号
$trade_status = $alipay->trade_status; // 支付状态
if ($trade_status == 'TRADE_SUCCESS') {
// 更新订单状态为已支付
}
}
echo 'success'; // 告知支付宝通知已处理
四、安全与实践
- 签名验证:
- 严格验证支付网关的回调签名,防止伪造通知。
- 订单状态同步:
- 回调处理成功后,主动查询支付网关确认订单状态。
- 敏感信息保护:
- API密钥、商户私钥等存储在服务器环境变量中,避免硬编码。
- 日志记录:
- 记录支付请求与回调日志,便于排查问题。
- HTTPS加密:
- 确保支付页面与回调URL使用HTTPS协议。
五、常见问题
- 支付失败或回调未收到:
- 检查服务器是否可访问外网,回调URL是否正确配置。
- 签名验证失败:
- 确认密钥与支付网关配置一致,检查参数是否按文档要求排序。
- 金额不一致:
- 确保订单金额与支付请求中的金额单位一致(如分为单位)。
六、推荐工具与资源
通过以上步骤,您可以在PHP网站中成功接入支付功能。建议优先选择官方SDK或社区维护良好的第三方库,并严格遵循支付网关的安全规范。