PHP调用大通银行API无法触发重定向问题求助
问题分析与解决方案
核心误区:服务器端CURL请求≠客户端浏览器跳转
你当前用PHP CURL在服务器端发起请求,CURL会自动跟随重定向(因为开启了CURLOPT_FOLLOWLOCATION),最终拿到的是重定向后的页面内容,而非触发用户浏览器跳转。API文档中说的“发送GET请求后跳转到官网”,指的是让用户浏览器直接发起该GET请求,不是服务器端用CURL代理请求。
代码问题修复与调试方案
1. 修正redirect_uri参数格式
API要求redirect_uri必须是完整的HTTPS URL,你当前写的developer.chase.com缺少协议头,可能导致API不返回重定向响应:
$url = 'https://apidemo.chase.com/api/v1/solution/accounts-and-data-sharing/aggregator-oauth/v1/mobile/authorize?response_type=code&client-id=XYZAB12321VBF&redirect_uri=https://developer.chase.com&scope=aggregator&state=Union';
2. 移除可能干扰重定向的请求头
你设置了accept: application/json,若API接收到该头时会返回JSON而非重定向响应,建议注释或删除这一行:
$header_auth = array( // 'accept: application/json', // 移除该行 'playground-id-token: ' . $chToken );
3. 正确触发客户端跳转的方式
如果需求是引导用户跳转到大通银行授权页面,无需用CURL,直接输出HTTP重定向头即可:
<?php include('global_variables.php'); $authUrl = 'https://apidemo.chase.com/api/v1/solution/accounts-and-data-sharing/aggregator-oauth/v1/mobile/authorize?response_type=code&client-id=XYZAB12321VBF&redirect_uri=https://developer.chase.com&scope=aggregator&state=Union'; header("Location: $authUrl"); exit; ?>
4. 调试CURL重定向响应
若需用CURL排查问题,关闭自动跟随重定向,查看原始响应的状态码和Location头:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); // 关闭自动跟随 $resp = curl_exec($ch); // 获取响应状态码 $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo "状态码: $statusCode\n"; // 打印响应头查看Location字段 echo "响应头:\n$header";
总结
- 引导用户授权时,直接让浏览器跳转目标URL,无需服务器端CURL代理;
- 确保
redirect_uri是完整的HTTPS URL,符合API要求; - 调试时关闭自动跟随重定向,确认API是否返回了重定向指令。
内容的提问来源于stack exchange,提问作者Mauro Ds
相关产品推荐
相关产品推荐

