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

在PHP项目中集成第三方支付(如支付宝、微信支付)是电商网站或在线服务的常见需求。实现支付功能的关键在于调用支付平台提供的API接口,完成订单创建、支付请求、回调验证等流程。下面以支付宝和微信支付为例,介绍PHP集成第三方支付的基本方法与代码实例。
使用任何第三方支付前,必须先在对应平台注册开发者账号:
将这些凭证安全保存,后续请求签名会用到。
支付宝提供官方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异步通知服务器支付结果。
微信支付需构造统一下单请求,以下为简化版实现逻辑:
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 = '<xml>';
foreach ($params as $k => $v) {
$xml .= "<{$k}>{$v}</{$k}>";
}
$xml .= '</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 '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}
}
基本上就这些。核心是理解支付流程:生成订单 → 调起支付 → 回调验证 → 更新状态。确保密钥安全、验签完整、异步通知处理幂等,就能稳定运行。
以上就是PHP如何使用第三方支付_PHP集成第三方支付的方法与代码实例的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号