PhonePe支付网关PHP生产环境集成报KEY_NOT_CONFIGURED错误求助
解决PhonePe生产环境
KEY_NOT_CONFIGURED错误(UAT正常,支付后资金扣除但响应异常) 收到的错误KEY_NOT_CONFIGURED核心指向生产环境的商户密钥配置或签名逻辑问题,以下是针对性的排查和解决步骤:
1. 验证生产环境密钥配置准确性
- 确认
PHONEPE_PRD_SALT和PHONEPE_PRD_SALT_INDEX是PhonePe提供的生产环境专用密钥,而非UAT环境的密钥。很多场景下会误将UAT密钥复用至生产,导致商户与密钥不匹配。 - 检查环境变量是否正确加载:可临时在代码中打印
getenv('PHONEPE_PRD_SALT')和getenv('PHONEPE_PRD_SALT_INDEX')的值,确认无空值、多余空格或拼写错误。
2. 核对生产环境Merchant ID一致性
即便你标注merchantId正确,仍需二次确认:生产环境商户ID需与PhonePe后台配置完全一致,且与当前使用的Salt Key属于同一商户(UAT与生产的商户ID通常不同,禁止混用)。
3. 修正签名生成逻辑
签名是PhonePe验证请求合法性的核心,需严格遵循文档规范:
- 确保
json_encode时避免不必要的转义,调整代码如下:$encode = base64_encode(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); - 检查签名拼接顺序:
base64编码的请求体 + API路径 + Salt Key,你的代码中$string = $encode.'/pg/v1/pay'.$saltKey需确认生产环境API路径确实为/pg/v1/pay,路径错误会直接导致签名无效。
4. 配置后台回调/重定向URL
登录PhonePe生产后台,确认配置的redirectUrl和callbackUrl与代码中route('response')生成的公网可访问URL完全一致,URL不匹配也会触发密钥验证失败。
5. 处理资金已扣但响应异常的情况
这种场景属于异步通知未正常接收,需补充订单主动查询逻辑:
- 在用户支付返回后或通过定时任务,调用PhonePe订单查询API,确认订单实际状态,避免系统订单状态与实际支付结果不一致。
- 查询API的签名逻辑需与支付请求保持一致,使用生产环境密钥。
临时调试代码(上线前删除)
// 打印关键参数用于排查 error_log('生产Salt Key: ' . getenv('PHONEPE_PRD_SALT')); error_log('生产Salt Index: ' . getenv('PHONEPE_PRD_SALT_INDEX')); error_log('编码后的请求体: ' . $encode); error_log('签名原始字符串: ' . $string); error_log('最终X-VERIFY值: ' . $finalXHeader);
内容的提问来源于stack exchange,提问作者Rishabh
相关产品推荐
相关产品推荐

