Postman中USSD Post请求持续出现数组转字符串错误求助
Laravel USSD 数组转字符串错误修复方案
问题根源
- 变量重复赋值:控制器中
$msgtype错误复用了USERDATA参数,若该参数为数组,后续操作会触发类型转换错误。 - 会话ID类型不匹配:
Session::setId()要求传入字符串,若请求中MSISDN是数组形式,直接传入会报错。 - 缺少响应返回:USSD请求必须返回文本响应,当前方法无返回值,导致框架内部处理异常。
修复后的控制器代码
public function index(Request $request) { // 读取并格式化请求参数,确保为字符串类型 $ussd_id = $request->input('USERID', ''); $msisdn = (string)$request->input('MSISDN', ''); $user_data = $request->input('USERDATA', ''); $msgtype = $request->input('MSGTYPE', ''); // 修正:使用正确的参数字段 // 仅当MSISDN有效时设置会话 if ($msisdn) { Session::setId($msisdn); Session::start(); // 绑定MSISDN到会话 Session::put('msisdn', $msisdn); } // 返回USSD必需的文本响应(示例初始菜单) return "欢迎使用USSD服务\n1. 查询余额\n2. 购买流量"; }
关键优化点
- 参数验证:添加验证规则强制参数类型,避免数组传入:
$request->validate([ 'MSISDN' => 'required|string', 'USERID' => 'required|string', ]); - Postman测试规范:发送POST请求时,确保
MSISDN等参数为单一字符串,不要使用数组格式(如MSISDN[])。 - 会话驱动适配:USSD场景建议使用Redis等分布式会话驱动,避免文件驱动在多服务器部署时的会话丢失问题。
内容的提问来源于stack exchange,提问作者James Donohue
相关产品推荐
相关产品推荐

