首先完成开发者账号注册并获取密钥,接着通过官方SDK或手动方式调用支付宝、微信支付API实现订单创建与支付请求,最后正确处理异步回调验证签名并更新订单状态。

在PHP项目中集成第三方支付(如支付宝、微信支付)是电商网站或在线服务的常见需求。实现支付功能的关键在于调用支付平台提供的API接口,完成订单创建、支付请求、回调验证等流程。下面以支付宝和微信支付为例,介绍PHP集成第三方支付的基本方法与代码实例。
准备工作:注册开发者账号并获取密钥
使用任何第三方支付前,必须先在对应平台注册开发者账号:
- 支付宝:进入支付宝开放平台(open.alipay.com),创建应用,获取AppID、私钥和公钥。
- 微信支付:登录微信支付商户平台(pay.weixin.qq.com),配置API密钥,下载证书。
将这些凭证安全保存,后续请求签名会用到。
支付宝支付接入示例(电脑网站支付)
支付宝提供官方SDK,也可手动构建请求。以下是使用官方SDK发起支付的简单示例:
立即学习“PHP免费学习笔记(深入)”;
安装支付宝SDK(推荐使用Composer):composer require alipaysdk/easysdk
发起支付请求代码:
require_once 'vendor/autoload.php';
use Alipay\EasySDK\Kernel\Factory;
Factory::setOptions([
'app_id' => 'your_app_id',
'private_key' => 'your_private_key',
'alipay_public_key' => 'alipay_public_key',
]);
$response = Factory::payment()->page()->pay(
'订单标题', // 订单标题
'OUT_TRADE_NO_001', // 商户订单号
'100.00', // 订单金额
'https://yourdomain.com/return.php' // 支付完成后跳转地址
);
// 输出表单并自动提交
echo $response->body;
用户支付后,支付宝会跳转到return.php进行结果展示,同时通过notify_url异步通知服务器支付结果。
Codapp 外卖点餐系统是一款专为快餐店、奶茶店、咖啡店、糕点店等商户打造的移动点餐解决方案,支持自提与外卖两种模式,可快速部署上线使用。 该系统支持微信、支付宝支付,并接入腾讯地图与百度地图,支持第三方配送(如达达)与商家自主配送,助力门店实现智能点单与订单管理。 功能特点: 微信小程序&H5移动端双端点餐:无需下载 App,直接扫码下单 支持多门店管理:一套系统可管理多家门
微信支付接入示例(JSAPI支付)
微信支付需构造统一下单请求,以下为简化版实现逻辑:
function wechatPay($openid, $outTradeNo, $totalFee, $body) {
$appid = 'your_appid';
$mch_id = 'your_mch_id';
$key = 'your_api_key';
$notify_url = 'https://yourdomain.com/wechat_notify.php';
$params = [
'appid' => $appid,
'mch_id' => $mch_id,
'nonce_str' => md5(uniqid(microtime(true), true)),
'body' => $body,
'out_trade_no' => $outTradeNo,
'total_fee' => $totalFee, // 单位:分
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => $notify_url,
'trade_type' => 'JSAPI',
'openid' => $openid
];
// 生成签名
ksort($params);
$string = '';
foreach ($params as $k => $v) {
if ($v !== '' && $k != 'sign') {
$string .= "{$k}={$v}&";
}
}
$string .= "key={$key}";
$params['sign'] = strtoupper(md5($string));
// 转为XML
$xml = '';
foreach ($params as $k => $v) {
$xml .= "<{$k}>{$v}{$k}>";
}
$xml .= ' ';
// 请求微信统一下单接口
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
return simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);
}
前端根据返回的prepay_id生成支付参数,调起微信支付。
处理支付回调(重要)
支付平台会在用户支付成功后发送异步通知,必须正确响应并验证签名,防止伪造请求。
以支付宝回调为例(notify.php):
$notify_data = $_POST;
// 验证签名
$flag = verifyAlipaySign($notify_data); // 使用支付宝公钥验签
if ($flag && $notify_data['trade_status'] == 'TRADE_SUCCESS') {
// 更新本地订单状态
updateOrderStatus($notify_data['out_trade_no'], 'paid');
echo 'success'; // 必须原样返回success,否则会重复通知
} else {
echo 'fail';
}
微信支付回调接收XML数据,需解析并验签:
$input = file_get_contents('php://input');
$data = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
if ($data && $data->return_code == 'SUCCESS') {
// 验证签名
if (wechatVerifySign($data)) {
// 处理订单逻辑
updateOrderStatus((string)$data->out_trade_no, 'paid');
echo ' ';
}
}
基本上就这些。核心是理解支付流程:生成订单 → 调起支付 → 回调验证 → 更新状态。确保密钥安全、验签完整、异步通知处理幂等,就能稳定运行。










