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

WordPress集成Stripe Connect问题:仅Token API可用,支付提交报404

看起来你遇到的是WordPress路由机制和页面逻辑适配的问题——纯PHP环境里直接指向success.php就能正常跑,但WordPress有自己的URL重写和页面管理规则,硬写路径肯定会踩坑。我来一步步帮你解决:

1. 先解决404的核心问题:创建WordPress自定义页面模板

WordPress不能像纯PHP那样直接访问单个PHP文件,得通过后台创建页面并绑定专属模板:

  • 进入你的主题目录(比如wp-content/themes/你的主题名/),新建一个文件page-stripe-success.php,开头加上模板标识:
<?php
/*
Template Name: Stripe Success Handler
*/
get_header();

// 这里后续放Stripe支付处理逻辑
?>

<?php get_footer(); ?>
  • 登录WordPress后台,新建一个页面,标题设为「Stripe Success」,在右侧「页面属性」里选择刚才创建的「Stripe Success Handler」模板,发布页面。
  • 这个页面的正确URL可以通过后台页面编辑页的「预览」按钮获取,或者用WordPress函数get_permalink()动态获取,后面表单要用到这个。

2. 修正表单的Action属性

把你表单里的action改成新页面的正确URL,注意你之前还拼错了success的拼写(写成了sucess),这也是可能的问题点:

<form action="<?php echo get_permalink( get_page_by_title('Stripe Success') ); ?>" method="POST" id="paymentFrm">

这样不管你的permalink设置成什么格式,表单都会指向正确的处理页面。

3. 在自定义模板里处理Stripe Charge逻辑

把纯PHP里的Charge逻辑迁移到page-stripe-success.php中,重点注意路径问题——WordPress的根目录可以用常量ABSPATH定位,确保正确引入Stripe的autoload文件:

<?php
/*
Template Name: Stripe Success Handler
*/
get_header();

// 只处理POST请求,避免直接访问页面时执行逻辑
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['stripeToken'])) {
    // 引入Stripe的autoload,根据你的vendor目录位置调整路径
    // 如果vendor在WordPress根目录就用下面的写法,在主题目录就换成get_template_directory()
    require_once ABSPATH . 'vendor/autoload.php';

    // 设置Stripe秘钥
    \Stripe\Stripe::setApiKey('sk_test_你的秘钥');

    try {
        // 创建Charge,金额单位是分,这里示例为10美元
        $charge = \Stripe\Charge::create([
            'amount' => 1000,
            'currency' => 'usd',
            'description' => '测试支付',
            'source' => $_POST['stripeToken'],
            'receipt_email' => $_POST['email'],
        ]);

        // 支付成功后的逻辑,比如存入数据库
        echo '<p>支付成功!Charge ID: ' . $charge->id . '</p>';
    } catch (\Stripe\Exception\CardException $e) {
        // 卡片相关错误
        echo '<p>支付失败:' . $e->getError()->message . '</p>';
    } catch (\Exception $e) {
        // 其他通用错误
        echo '<p>错误:' . $e->getMessage() . '</p>';
    }
} else {
    // 非POST请求或无token时的提示
    echo '<p>无效请求,请通过支付表单提交。</p>';
}

get_footer();

4. 修正JS代码里的小问题

看你的JS代码里有一段paymentRequest的逻辑,但前面没有定义paymentRequest变量,这会导致控制台报错,可能影响表单提交。如果没用到这个功能,可以暂时注释或删掉这部分代码。另外确保Stripe的publishable key是正确的。

5. 调试技巧

如果还是有问题:

  • 开启WordPress调试模式,在wp-config.php里设置define('WP_DEBUG', true);,查看错误日志定位问题
  • 在模板里用var_dump($_POST)检查是否正确接收到表单提交的stripeToken和其他字段
  • 确认Stripe的秘钥、publishable key是否和纯PHP环境一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:04:12