You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不使用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自动替换为实际会话ID
  • webhook_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'];
}
?>

获取支付状态与交易信息

有两种可靠方式获取交易状态:

  1. Webhook回调:当支付完成、失败等事件触发时,Stripe会向你配置的webhook_endpoints发送POST请求,包含完整的会话和交易数据。你需要在Webhook接口中验证请求签名(防止伪造),然后解析event.data.object获取状态(比如payment_status为paid代表支付成功)。
  2. 主动查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:05:21