php实现支付
PHP 支付功能实现方法
集成第三方支付平台 API
选择支付宝、微信支付或 PayPal 等主流支付平台,注册开发者账号获取 API 密钥。以支付宝为例,调用其官方 SDK 进行集成:
require_once 'alipay-sdk-PHP/AopSdk.php';
$c = new AopClient;
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId = "your_app_id";
$c->rsaPrivateKey = '商户私钥';
$c->format = "json";
$c->charset = "UTF-8";
$c->signType = "RSA2";
$c->alipayrsaPublicKey = '支付宝公钥';
创建支付请求处理逻辑
构建支付参数并生成支付页面链接或二维码。微信支付需要构造统一下单接口:
$params = [
'appid' => $appid,
'mch_id' => $mch_id,
'nonce_str' => md5(uniqid()),
'body' => '商品描述',
'out_trade_no' => '商户订单号',
'total_fee' => 100,
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => '回调通知地址',
'trade_type' => 'NATIVE'
];
实现支付结果回调验证
设置异步通知接收 URL,验证签名并处理业务逻辑。支付宝回调验证示例:
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {
$trade_status = $_POST['trade_status'];
if($trade_status == 'TRADE_SUCCESS') {
// 更新订单状态
}
}
数据库订单管理
创建订单表结构并实现状态更新机制:
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL,
`amount` decimal(10,2) NOT NULL,
`status` enum('pending','paid','failed') DEFAULT 'pending',
`payment_method` varchar(20) DEFAULT NULL,
`created_at` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
安全防护措施
实现参数过滤、防重放攻击和非对称加密:
// 过滤输入参数
$clean = array();
foreach($_POST as $key => $value) {
$clean[$key] = htmlentities(strip_tags($value));
}
// 验证订单金额
if($clean['total_fee'] != $order->amount) {
die('金额不一致');
}
支付状态查询功能
提供主动查询接口核对支付结果:
$request = new AlipayTradeQueryRequest();
$request->setBizContent(json_encode([
'out_trade_no' => '商户订单号'
]));
$response = $aop->execute($request);
$result = $response->alipay_trade_query_response;
if($result->code == '10000' && $result->trade_status == 'TRADE_SUCCESS') {
// 支付成功处理
}
注意事项
- 严格遵循 PCI DSS 标准处理支付数据
- 使用 HTTPS 加密所有支付相关请求
- 记录完整的支付日志用于对账
- 实现定时任务检查未完成订单
- 不同支付渠道需配置独立的证书和密钥
以上实现方案可根据具体业务需求调整扩展,建议参考各支付平台最新官方文档进行开发。测试阶段应使用沙箱环境,上线前完成多场景支付流程验证。







