php实现商城支付
PHP实现商城支付功能
使用PHP实现商城支付功能需要整合支付接口、订单处理和回调验证。以下是具体实现方法:
集成支付接口
选择支付平台(如支付宝、微信支付、PayPal)并注册开发者账号。获取商户ID、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->alipayrsaPublicKey = '支付宝公钥';
$c->format = "json";
创建支付订单
生成商户订单号并构造支付请求参数。确保订单号唯一且包含必要商品信息:

$orderNo = date('YmdHis').mt_rand(1000,9999);
$request = new AlipayTradePagePayRequest();
$request->setReturnUrl("https://yourdomain.com/return.php");
$request->setNotifyUrl("https://yourdomain.com/notify.php");
$bizcontent = json_encode([
'subject' => '商品名称',
'out_trade_no' => $orderNo,
'total_amount' => '100.00',
'product_code' => 'FAST_INSTANT_TRADE_PAY'
]);
$request->setBizContent($bizcontent);
$response = $c->pageExecute($request);
echo $response;
处理支付回调
支付完成后需验证异步通知的真实性。支付宝会POST交易数据到设置的notify_url:
$verifyResult = $c->rsaCheckV1($_POST, $_POST['sign_type']);
if($verifyResult && $_POST['trade_status'] == 'TRADE_SUCCESS'){
$out_trade_no = $_POST['out_trade_no'];
$trade_no = $_POST['trade_no'];
// 更新订单状态为已支付
$db->query("UPDATE orders SET status=1 WHERE order_no='$out_trade_no'");
echo "success"; // 必须返回success告知支付宝已处理
}
订单状态管理
建立订单表存储支付信息,包含字段:order_no(订单号)、total_amount(金额)、status(状态)、create_time等。支付成功后更新状态:

CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL,
`user_id` int(11) NOT NULL,
`total_amount` decimal(10,2) NOT NULL,
`status` tinyint(1) DEFAULT '0' COMMENT '0未支付1已支付',
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `order_no` (`order_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
安全注意事项
支付涉及资金交易,必须确保通信安全:
- 使用HTTPS协议传输数据
- 验证签名防止伪造请求
- 记录完整支付日志便于对账
- 金额使用最小货币单位(分)避免浮点误差
- 敏感操作需二次确认(如短信验证)
支付结果展示
支付完成后引导用户到结果页面,可通过同步return_url获取基本支付信息,但最终状态应以异步通知为准:
if(isset($_GET['out_trade_no'])){
$order = $db->query("SELECT * FROM orders WHERE order_no='".$_GET['out_trade_no']."'");
if($order['status'] == 1){
echo "支付成功";
}else{
echo "支付处理中,请稍后查看订单状态";
}
}
以上流程适用于大多数支付接口,不同平台需调整参数和验证方式。建议参考各支付平台最新API文档实现具体细节。






