CodeIgniter集成PhonePe支付网关:PAY_PAGE请求返回UPI_INTENT异常
问题排查与解决方案
一、先排查本地代码与请求配置
- 确认请求参数完整性:检查
paymentInstrument节点下,除了type: PAY_PAGE,是否漏填了官方要求的必填参数(比如redirectUrl、callbackUrl)。参数缺失可能导致网关自动切换到其他支付渠道。 - 核对CURL请求Header:确保
Content-Type设为application/json,签名(X-VERIFY)的生成逻辑完全匹配官方文档,别搞混测试环境和生产环境的密钥。 - 检查框架是否篡改请求:CodeIgniter的全局过滤器或
input类可能会修改请求体,发送前把完整请求日志打出来,对比官方示例,确认paymentInstrument.type确实是PAY_PAGE没被改动。 - 清理缓存:清空CodeIgniter的缓存、服务器的OPcache,避免旧配置代码残留生效。
二、排查PhonePe测试API环境问题
- 用调试工具模拟请求:把你的请求参数原封不动放到Postman/Insomnia里发送,看返回的
instrumentResponse.type是否还是UPI_INTENT。如果工具里也这样,基本可以确定是PhonePe测试环境的配置或临时故障。 - 查看官方状态公告:登录PhonePe商家后台或开发者平台,确认有没有测试环境维护、接口规则变更的通知。你遇到的500/502错误也说明测试环境可能不稳定。
- 切换测试端点:PhonePe有多个测试域名(比如
api-preprod.phonepe.com、test.phonepe.com),换一个端点试试,看是否恢复正常响应。 - 联系官方支持:如果确认是平台侧问题,直接提交工单给PhonePe技术支持,附上你的请求日志、响应日志、商户ID,让他们排查。
三、临时适配与调试技巧
- 兼容响应结构:如果暂时没法解决类型变更问题,先修改本地的响应解析逻辑,兼容
UPI_INTENT类型的结构,先保证支付流程能走通,同时继续排查根源。 - 开启详细调试日志:在CURL里开启
CURLOPT_VERBOSE,把完整的请求报文、Header、响应头都记录下来,方便定位问题。示例代码:
$curl = curl_init(); curl_setopt($curl, CURLOPT_VERBOSE, true); $logFile = fopen(APPPATH . 'logs/phonepe_debug.log', 'w+'); curl_setopt($curl, CURLOPT_STDERR, $logFile); // 其他CURL配置(URL、POST数据、Header等) curl_exec($curl); fclose($logFile); curl_close($curl);
- 验证响应签名:不管响应结构怎么变,先验证返回的签名是否合法,排除中间代理篡改或伪造响应的可能。
内容的提问来源于stack exchange,提问作者Chandan Kumar Nayak
相关产品推荐
相关产品推荐

