网站支付接口对接,独立站收款功能开发:独立站收款
独立站支付接口对接前的准备
独立站收款功能开发的核心是让网站与支付平台通过接口安全通信。
本文以支付宝和微信支付为例,讲解从零对接的完整流程。
你需要准备:已备案的域名、服务器(宝塔面板或命令行环境)、支付宝开放平台或微信支付商户平台的账号,以及基本的后端开发能力。
第一步:获取支付接口密钥与商户号
登录支付宝开放平台,创建网页/移动应用,获取 APPID。
在“开发设置”中生成 RSA2 密钥对,下载支付宝公钥。
微信支付需在商户平台设置 APIv3 密钥和商户证书。注意:私钥必须保存在服务器端,绝不能暴露给前端。
推荐将密钥文件存放在 /www/server/panel/ssl/pay/ 目录,并设置权限为 600。
例如:
chmod 600 /www/server/panel/ssl/pay/alipay_private_key.pem
第二步:配置支付网关与异步通知地址
在支付宝开放平台,设置“授权回调地址”和“异步通知地址”。
异步通知地址必须是公网可访问的 URL,例如 https://yourdomain.com/pay/notify/alipay。
微信支付需在商户平台配置“支付回调链接”。
服务器端需确保该路径未被防火墙拦截。
若使用宝塔面板,在“网站”->“设置”->“配置文件”中确认 location /pay/notify/ 未被错误重写。
第三步:编写支付请求与签名代码
以支付宝电脑网站支付为例,调用 alipay.trade.page.pay 接口。
核心参数包括 out_trade_no(商户订单号)、total_amount、subject 和 product_code=FAST_INSTANT_TRADE_PAY。
签名使用 RSA2 算法。
// 示例:生成支付宝支付链接
$params = [
'app_id' => $appId,
'method' => 'alipay.trade.page.pay',
'return_url' => 'https://yourdomain.com/pay/return',
'notify_url' => 'https://yourdomain.com/pay/notify/alipay',
'charset' => 'utf-8',
'sign_type' => 'RSA2',
'timestamp' => date('Y-m-d H:i:s'),
'version' => '1.0',
'biz_content' => json_encode([
'out_trade_no' => 'ORDER_' . time(),
'total_amount' => '0.01',
'subject' => '测试订单',
'product_code' => 'FAST_INSTANT_TRADE_PAY'
])
];
// 使用私钥签名后跳转至支付宝网关
微信支付 Native 支付需调用 https:,
//api.mch.weixin.qq.com/v3/pay/transactions/native
请求头需携带 Authorization: 签名。
WECHATPAY2-SHA256-RSA2048
第四步:处理异步通知与验签
支付成功后,支付宝会向 notify_url 发送 POST 请求。
你必须验证 sign 和 trade_status,确认 TRADE_SUCCESS 后再更新订单状态。验签失败必须返回 failure,否则支付宝会重复通知。
// 支付宝异步通知验签核心逻辑
$alipayPublicKey = file_get_contents('/path/to/alipay_public_key.pem');
$sign = $_POST['sign'];
unset($_POST['sign'], $_POST['sign_type']);
$data = urldecode(http_build_query($_POST));
$verify = openssl_verify($data, base64_decode($sign), $alipayPublicKey, OPENSSL_ALGO_SHA256);
if ($verify === 1 && $_POST['trade_status'] === 'TRADE_SUCCESS') {
// 更新订单状态为已支付
echo 'success';
} else {
echo 'failure';
}
微信支付 V3 接口需使用平台证书验签,并解密 resource 字段中的密文。
第五步:避坑指南与常见报错
- 报错
invalid [default store dir]:通常因 PHP 未正确配置 openssl 扩展或密钥路径错误。执行php -m | grep openssl检查。 - 异步通知未收到:检查
notify_url是否公网可访问,宝塔防火墙是否放行,或使用curl -X POST https://yourdomain.com/pay/notify/alipay测试。 - 签名失败:确认私钥格式为 PKCS1 还是 PKCS8,支付宝要求 PKCS1。使用
openssl rsa -in private.pem -out private_pkcs1.pem转换。 - 金额不一致:异步通知中的
total_amount必须与订单金额完全一致,否则视为异常订单。
验证收款功能是否正常
在沙箱环境或使用 0.01 元真实支付测试。
支付完成后,检查数据库订单状态是否变为“已支付”,并查看服务器日志 /www/wwwlogs/yourdomain.com.log 中是否有回调记录。
若使用宝塔,可在“网站日志”中筛选 notify 请求。
独立站支付接口对接的关键在于:密钥安全存储、异步通知验签、订单状态幂等更新。 建议每次修改支付配置后,先用沙箱环境验证,再切换正式环境。
常见疑问
支付接口需要备案域名吗? 支付宝和微信支付均要求签约时域名已备案,否则无法通过审核。
个人主体可申请支付宝当面付,但功能受限。
异步通知重复发送怎么办? 在更新订单前先查询数据库,若订单已是“已支付”则直接返回 success,避免重复发货。
本地开发如何调试回调? 使用内网穿透工具(如 frp、ngrok)将本地端口映射到公网,并将回调地址临时改为穿透地址。