You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman中USSD Post请求持续出现数组转字符串错误求助

Laravel USSD 数组转字符串错误修复方案

问题根源

  1. 变量重复赋值:控制器中$msgtype错误复用了USERDATA参数,若该参数为数组,后续操作会触发类型转换错误。
  2. 会话ID类型不匹配:Session::setId()要求传入字符串,若请求中MSISDN是数组形式,直接传入会报错。
  3. 缺少响应返回: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:35:25