php实现支付功能
支付功能实现步骤
在PHP中实现支付功能通常涉及与第三方支付网关(如支付宝、微信支付、Stripe等)的集成。以下是常见的实现方法:
集成支付宝支付
支付宝提供官方SDK,可通过Composer安装:
composer require alipay/alipay-sdk-php
创建支付请求示例代码:

require_once 'vendor/autoload.php';
use Alipay\EasySDK\Kernel\Config;
use Alipay\EasySDK\Payment\Common\Models\AlipayTradePayResponse;
$config = new Config();
$config->protocol = 'https';
$config->gatewayHost = 'openapi.alipay.com';
$config->appId = '你的APPID';
$config->signType = 'RSA2';
$config->merchantPrivateKey = '商户私钥';
$config->alipayPublicKey = '支付宝公钥';
$response = Alipay::payment()->common()->pay(
'订单标题',
'唯一订单号',
'0.01', // 金额
'1234567890' // 买家ID
);
集成微信支付
微信支付需要配置商户号和API密钥:
require __DIR__ . '/vendor/autoload.php';
use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
$merchantId = '商户号';
$privateKey = Rsa::from('file:///path/to/merchant/apiclient_key.pem');
$platformCertificate = Rsa::from('file:///path/to/wechatpay/cert.pem');
$instance = Builder::factory([
'mchid' => $merchantId,
'serial' => '证书序列号',
'privateKey' => $privateKey,
'certs' => [$platformCertificate],
]);
$response = $instance->chain('v3/pay/transactions/jsapi')->post([
'json' => [
'mchid' => $merchantId,
'out_trade_no' => '订单号',
'amount' => ['total' => 1, 'currency' => 'CNY'],
'description' => '订单描述'
]
]);
集成Stripe支付
Stripe提供PHP库处理国际支付:

composer require stripe/stripe-php
创建支付意图示例:
require_once 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('sk_test_密钥');
$paymentIntent = \Stripe\PaymentIntent::create([
'amount' => 1000, // 金额(分)
'currency' => 'usd',
'payment_method_types' => ['card'],
'metadata' => ['order_id' => '123']
]);
支付回调处理
所有支付网关都需要处理异步通知:
// 支付宝回调验证
$alipay = new AlipayTradeService($config);
$verify_result = $alipay->check($_POST);
if($verify_result) {
$out_trade_no = $_POST['out_trade_no'];
// 更新订单状态
file_put_contents('log.txt', "支付成功: $out_trade_no\n", FILE_APPEND);
}
// 微信支付回调
$inBody = file_get_contents('php://input');
$inBodyArray = json_decode($inBody, true);
$resource = $inBodyArray['resource'];
$ciphertext = $resource['ciphertext'];
$associated_data = $resource['associated_data'];
$nonce = $resource['nonce'];
$result = $aesGcm->decrypt($ciphertext, $associated_data, $nonce);
安全注意事项
确保所有支付操作在HTTPS下进行,敏感数据如API密钥不应硬编码在代码中,应使用环境变量或专用配置文件存储。验证所有回调请求的真实性,防止伪造通知。记录完整的支付日志以便审计。
订单号必须保证唯一性,金额单位需根据支付平台要求转换(如微信支付以分为单位)。处理支付结果时实现幂等性,防止重复操作。






