能否不使用API库及Stripe PHP库,通过Curl生成Stripe支付链接?
不借助Stripe API库生成Checkout支付链接及Curl调用方案
1. 能否不借助API库生成Stripe Checkout支付链接?
完全可以。Stripe Checkout支付链接的生成本质是调用Stripe的REST API创建Checkout Session,官方API库只是封装了HTTP请求、签名验证等重复逻辑,你完全可以直接通过原生HTTP请求(比如Curl)完成所有操作,只要严格遵循Stripe的API规范即可。
2. 用Curl(不依赖Stripe PHP库)生成支付链接并获取交易信息
核心逻辑
Stripe的Checkout Session创建接口为POST /v1/checkout/sessions,需使用你的Stripe秘钥(测试环境用sk_test_xxx,生产环境用sk_live_xxx)做身份验证,请求体包含金额、货币、商品信息、回调及跳转地址等必填参数。
示例1:直接用Curl命令发起请求
curl https://api.stripe.com/v1/checkout/sessions \ -u sk_test_your_secret_key: \ -d "payment_method_types[]=card" \ -d "line_items[0][price_data][currency]=usd" \ -d "line_items[0][price_data][product_data][name]=Premium Subscription" \ -d "line_items[0][price_data][unit_amount]=2000" \ -d "line_items[0][quantity]=1" \ -d "mode=payment" \ -d "success_url=https://your-domain.com/success?session_id={CHECKOUT_SESSION_ID}" \ -d "cancel_url=https://your-domain.com/cancel" \ -d "webhook_endpoints[0][url]=https://your-domain.com/webhook" \ -d "webhook_endpoints[0][enabled_events][0]=checkout.session.completed"
参数说明:
payment_method_types[]=card:指定支付方式为信用卡line_items:商品详情,unit_amount为最小货币单位(比如2000代表20美元)mode=payment:单次支付模式(订阅场景用subscription)success_url/cancel_url:支付成功/取消后的跳转地址,{CHECKOUT_SESSION_ID}会被Stripe自动替换为实际会话IDwebhook_endpoints:配置Webhook,用于接收支付状态变更通知
执行后返回的JSON响应中,url字段即为可直接跳转的Checkout支付链接。
示例2:PHP中用原生Curl实现
<?php $secret_key = 'sk_test_your_secret_key'; $url = 'https://api.stripe.com/v1/checkout/sessions'; $post_fields = [ 'payment_method_types' => ['card'], 'line_items' => [ [ 'price_data' => [ 'currency' => 'usd', 'product_data' => ['name' => 'Premium Subscription'], 'unit_amount' => 2000 ], 'quantity' => 1 ] ], 'mode' => 'payment', 'success_url' => 'https://your-domain.com/success?session_id={CHECKOUT_SESSION_ID}', 'cancel_url' => 'https://your-domain.com/cancel', 'webhook_endpoints' => [ [ 'url' => 'https://your-domain.com/webhook', 'enabled_events' => ['checkout.session.completed'] ] ] ]; // 转换为Stripe API接受的表单格式 $post_data = http_build_query($post_fields); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_USERPWD, $secret_key . ':'); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); $response = curl_exec($ch); curl_close($ch); $session = json_decode($response, true); // 输出支付链接或错误信息 if (isset($session['url'])) { echo "支付链接:" . $session['url']; } else { echo "创建失败:" . $session['error']['message']; } ?>
获取支付状态与交易信息
有两种可靠方式获取交易状态:
- Webhook回调:当支付完成、失败等事件触发时,Stripe会向你配置的
webhook_endpoints发送POST请求,包含完整的会话和交易数据。你需要在Webhook接口中验证请求签名(防止伪造),然后解析event.data.object获取状态(比如payment_status为paid代表支付成功)。 - 主动查询Session:通过
GET /v1/checkout/sessions/{SESSION_ID}接口,传入会话ID查询最新状态。示例Curl命令:
curl https://api.stripe.com/v1/checkout/sessions/your_session_id \ -u sk_test_your_secret_key:
返回的响应中,payment_status字段显示当前支付状态(paid/unpaid/no_payment_required),payment_intent字段关联支付意向ID,可进一步查询更详细的交易明细。
内容的提问来源于stack exchange,提问作者Sky
相关产品推荐
相关产品推荐

