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

如何通过PayPal API会话实现带下拉选项的订阅/支付功能?

PayPal 带下拉选择的订阅/支付按钮实现方案

PayPal支持创建带下拉选择的支付按钮,但通过API会话URL实现该功能时,无法直接通过接口生成下拉选项,还需结合custom_id和后端逻辑处理。你目前用v1/billing/subscriptions创建常规月度订阅,想知道类似方式实现下拉选择,还是必须自行制作下拉菜单后再创建订单?之前尝试v2/checkout/orders时,所有选项会堆叠在一起,下面是具体解决方案:

一、订阅场景(对应你用的v1/billing/subscriptions)

PayPal的下拉选择订阅按钮,本质是关联多个不同的订阅计划(比如不同价格、周期的计划)。你需要先在PayPal后台创建好所有需要的订阅计划,然后前端自己实现下拉选择菜单,用户选完后,再调用订阅API传入对应的plan_id,同时带上custom_id。

示例代码:

// 从前端下拉框获取用户选中的计划ID
const selectedPlanId = document.getElementById('subscription-plan').value;
const customId = "你的自定义标识";

const response = await fetch('https://api-m.paypal.com/v1/billing/subscriptions', {
    method: 'POST',
    headers: {
        Authorization: `Bearer ${accessToken}`,
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        plan_id: selectedPlanId, 
        custom_id: customId, 
        application_context: {
            brand_name: 'Sub',
            locale: 'en-US',
            shipping_preference: 'NO_SHIPPING',
            user_action: 'SUBSCRIBE_NOW',
        },
    }),
});

const data = await response.json();
// 跳转到返回结果中的approval_url引导用户完成订阅

二、单次支付场景(对应你用的v2/checkout/orders)

你之前遇到的选项堆叠问题,是因为直接把所有商品/金额都塞进了purchase_units里。要实现下拉选择,同样需要前端先做选择界面,用户确定选项后,再调用订单API只传入选中的商品信息和金额,同时添加custom_id。

示例代码:

// 从前端下拉框获取用户选中的支付选项
const selectedOption = document.getElementById('payment-option').value;
let amountValue = '';
let itemName = '';

// 根据选中项设置对应金额和商品名称
switch(selectedOption) {
    case 'basic':
        amountValue = '6.75';
        itemName = '基础套餐';
        break;
    case 'premium':
        amountValue = '9.99';
        itemName = '高级套餐';
        break;
}

const response = await fetch('https://api-m.paypal.com/v2/checkout/orders', {
    method: 'POST',
    headers: {
        Authorization: `Bearer ${accessToken}`,
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        intent: 'CAPTURE',
        purchase_units: [
            {
                custom_id: "你的自定义标识",
                description: itemName,
                amount: {
                    currency_code: 'EUR',
                    value: amountValue,
                    breakdown: {
                        item_total: { 
                            currency_code: 'EUR', 
                            value: amountValue
                        }
                    }
                },
                items: [
                    {
                        name: itemName,
                        quantity: '1',
                        unit_amount: {
                            currency_code: 'EUR',
                            value: amountValue
                        }
                    }
                ]
            }
        ],
        application_context: {
            brand_name: '你的品牌名称',
            locale: 'en-US',
            shipping_preference: 'NO_SHIPPING',
            user_action: 'PAY_NOW'
        }
    }),
});

const data = await response.json();
// 跳转到返回结果中的approve链接引导用户完成支付

关键总结

PayPal的API本身不支持直接生成带下拉选择的会话链接,必须通过前端先做选择界面,根据用户的选择结果,再调用对应API(订阅传对应plan_id,订单传对应金额/商品),这样既可以顺利集成custom_id,也能避免选项堆叠的问题。

内容的提问来源于stack exchange,提问作者Mulon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:49:52