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

Flutterwave PHP集成仅返回Hosted Link,无法跳转结账页问题排查

Flutterwave集成跳转问题排查与解决

核心问题原因

你用jQuery Ajax异步请求后端PHP接口时,后端通过header('Location: ...')尝试跳转是无效的——Ajax请求的响应不会直接触发浏览器页面跳转,后端的跳转指令只会作用于Ajax请求本身,不会影响当前前端页面。

解决方案步骤

1. 后端PHP代码修改

移除header('Location: ...'),改为返回JSON格式的响应数据,将结账链接传递给前端:

if(!empty($post)){
    $curl = curl_init();

    // 省略中间表单数据处理代码...

    $txref = "rave" . uniqid();
    $PBFPubKey = "FLWPUBK-324f26e3fb7484592d0fee10ea07b767-X"; 
    $redirect_url = "https://localhost/bnbtechonlinetrainingregistration/user/status.php?email=$email&amount=$tr_amount";

    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://api.ravepay.co/flwv3-pug/getpaidx/api/v2/hosted/pay",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => json_encode([
            'amount'=>$tr_amount,
            'customer_email'=>$email,
            'currency'=>$currency,
            'txref'=>$txref,
            'PBFPubKey'=>$PBFPubKey,
            'redirect_url'=>$redirect_url,
        ]),
        CURLOPT_HTTPHEADER => [
            "content-type: application/json",
            "cache-control: no-cache"
        ],
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl); // 关闭curl资源

    // 设置响应头为JSON格式
    header('Content-Type: application/json');

    if($err){
        echo json_encode(['status' => 'error', 'message' => 'Curl请求错误: ' . $err]);
        exit;
    }

    $transaction = json_decode($response);

    // 修正判断逻辑:先检查data和link是否存在
    if(!isset($transaction->data) || !isset($transaction->data->link)){
        $errorMsg = isset($transaction->message) ? $transaction->message : 'API返回数据异常';
        echo json_encode(['status' => 'error', 'message' => $errorMsg]);
        exit;
    }

    // 返回成功的JSON响应,包含结账链接
    echo json_encode([
        'status' => 'success',
        'link' => $transaction->data->link
    ]);
    exit;
}

2. 前端jQuery Ajax代码修改

在请求成功的回调中,获取后端返回的链接,主动触发页面跳转:

$.ajax({
    url: '你的PHP接口地址',
    method: 'POST',
    data: $('#你的表单ID').serialize(), // 或手动构造表单数据
    dataType: 'json',
    success: function(res){
        if(res.status === 'success'){
            // 跳转到Flutterwave结账页面
            window.location.href = res.link;
        } else {
            // 错误提示
            alert('请求失败: ' + res.message);
        }
    },
    error: function(xhr, status, error){
        alert('网络请求错误: ' + error);
    }
});

额外排查点

  • 检查PHP是否开启CURL扩展:通过phpinfo()查看,未开启则在php.ini中启用。
  • 查看浏览器Network面板:确认Ajax请求的响应内容是否为预期的JSON数据。
  • 验证API返回结构:后端临时添加var_dump($transaction); exit;,确认data->link是否存在。
  • 清除多余输出:确保PHP文件开头/结尾无空格、无额外echo语句,避免破坏JSON响应格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:01:15