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
相关产品推荐
相关产品推荐

