WordPress非营利站点Stripe多课程每月捐赠订阅技术咨询
解决方案:WordPress + Stripe 实现自定义金额的每月课程捐赠订阅
一、最简方案:直接用Stripe后台配置
你之前可能没留意到,Stripe本身支持创建允许用户自定义金额的订阅价格,无需额外编码就能满足需求:
- 登录Stripe后台,为每门课程创建独立的捐赠产品(比如“课程A月度捐赠”“课程B月度捐赠”)
- 给每个产品添加订阅价格时,定价类型选「自定义金额」,可设置最低捐赠额(可选),计费周期选「每月」
- 生成对应价格的支付链接或嵌入按钮,直接添加到WordPress的课程页面即可
- 用户点击后可输入自定义的每月捐赠金额,完成订阅后每月自动扣款
二、自定义PHP开发方案(适合深度定制场景)
如果需要把捐赠订阅和WordPress用户系统、课程数据联动,可按以下步骤开发:
1. 准备工作
- 安装Stripe PHP SDK:可通过Composer安装到WordPress主题目录,或直接引入SDK文件
- 在Stripe后台获取Secret Key和Publishable Key,存到WordPress配置文件或自定义设置项中
2. 前端表单(添加到课程页面)
在课程页面模板或自定义短代码中插入表单:
<form id="donation-sub-form" method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>"> <input type="hidden" name="action" value="create_course_donation_sub"> <input type="hidden" name="course_id" value="<?php echo get_the_ID(); ?>"> <!-- 当前课程ID --> <label>每月捐赠金额:</label> <input type="number" name="amount" min="1" step="0.01" required> <button type="submit">确认订阅</button> </form>
3. 后端处理逻辑(添加到主题functions.php)
// 处理订阅创建请求 add_action('admin_post_create_course_donation_sub', 'handle_course_donation_sub'); add_action('admin_post_nopriv_create_course_donation_sub', 'handle_course_donation_sub'); function handle_course_donation_sub() { // 参数校验 if (!isset($_POST['amount'], $_POST['course_id'])) { wp_redirect(get_permalink($_POST['course_id'])); exit; } $amount = (float)$_POST['amount'] * 100; // 转换为分(Stripe单位) $course_id = (int)$_POST['course_id']; $course_title = get_the_title($course_id); // 初始化Stripe require_once(get_template_directory() . '/vendor/stripe/stripe-php/init.php'); \Stripe\Stripe::setApiKey('你的Stripe Secret Key'); try { // 创建客户(关联当前WordPress用户) $customer = \Stripe\Customer::create([ 'email' => is_user_logged_in() ? wp_get_current_user()->user_email : '', 'metadata' => ['course_id' => $course_id, 'course_title' => $course_title] ]); // 创建对应金额的订阅价格 $price = \Stripe\Price::create([ 'product_data' => ['name' => "{$course_title} 月度捐赠"], 'unit_amount' => $amount, 'currency' => 'usd', // 替换为你的目标货币 'recurring' => ['interval' => 'month'] ]); // 创建订阅并跳转支付 $subscription = \Stripe\Subscription::create([ 'customer' => $customer->id, 'items' => [['price' => $price->id]], 'payment_behavior' => 'default_incomplete', 'expand' => ['latest_invoice.payment_intent'], ]); wp_redirect($subscription->latest_invoice->payment_intent->next_action->redirect_to_url->url); exit; } catch (\Stripe\Exception\ApiErrorException $e) { // 错误处理,跳回课程页面并提示 wp_redirect(add_query_arg('error', urlencode($e->getMessage()), get_permalink($course_id))); exit; } }
4. 后续优化
- 配置Stripe Webhook,接收订阅成功/失败的通知,同步更新WordPress用户的捐赠记录或课程权限
- 在Stripe后台可统一管理所有订阅的扣款、暂停、取消操作
三、插件辅助方案
如果不想自行编码,可尝试以下WordPress插件:
- Stripe Payments:支持自定义订阅金额,通过短代码快速添加到课程页面,可单独配置每门课程的订阅规则
- GiveWP + GiveWP Subscriptions Add-on:专注捐赠场景的插件,配合订阅扩展可实现自定义金额的月度捐赠,还能关联课程生成捐赠记录
内容的提问来源于stack exchange,提问作者Allen
相关产品推荐
相关产品推荐

