【问题标题】:How to parse through Mobile USSD Parameters passed as http GET requests如何通过作为 http GET 请求传递的移动 USSD 参数进行解析
【发布时间】:2017-03-07 18:15:18
【问题描述】:

我正在尝试构建一个 Web api,用于处理由移动网络运营商 (MNO) 的 USSD 服务器提供的数据。下面是关于这种交互如何与作为我的应用程序的外部系统进行操作的 sn-p。

对于每个请求,我必须确定用户处于什么级别并使用适当的菜单进行响应。 MNO 会向我发送类似http://my_app_url?*123*# 的信息。由于最后一个 * 和 # 之间没有任何内容,我确定这是一个根菜单请求,我可以用一个菜单响应用户,例如1. 注册,2. 检查余额,3. 申请 PIN。假设用户想要查询余额,他们将在手机上选择菜单 2,MNO 将发送给我http://my_app_url?*123*2#。我回复 1. 输入帐号,2. 请求回电。用户选择输入帐号,MNO 会发送http://my_app_url?*123*2*1#,告诉我用户在哪里。

虽然整个菜单并不长,但维护起来可能会让人感到困惑,因为我可以有以下组合。 http://my_app_url?*123*1*2*3*1#http://my_app_url?*123*1*1*3#http://my_app_url?*123*2*1*3*1#

更多信息:

  1. 从 MNO 发送的每个请求都带有用户的手机号码、由 MNO 创建的 USSD 会话 ID 将一直保留到 USSD 会话结束以及 USSD 参数,即从第一个 * 到# 在上面的例子中。

  2. 我已将 USSD 应用程序的菜单存储在数据库 (sql fiddle) 中,因此根据用户所处的级别,我可以知道为他们服务的菜单,例如如果是根请求,我可以为用户提供 parent_menu 为 1 的所有菜单。如果是检查余额请求,我将响应所有父菜单为 2 的菜单等

我目前确定用户提出什么请求的方法是编写多个 if else 语句,但在中间我失去了轨道并且变得复杂。在内心深处,我觉得必须有一种更优雅的方式来解析用户发送的请求,并确定请求处于什么级别并知道为它们提供什么服务。你能提供更好的方法吗?更好的是,您有构建此类应用程序的经验吗?您能分享一下遍历菜单的逻辑吗?

【问题讨论】:

    标签: python ussd


    【解决方案1】:

    几个月前我遇到了类似的问题。对我来说,我使用正则表达式来处理 USSD 字符串,即*123*3*3#。但是您仍然需要 if else 语句。根据您的系统,您需要将代码划分为类。

    使用 Regex 处理的示例方法是:

    ussd_string=123*2
    if bool(re.match(r"^(\d+)[*]2",self.ussd_string)):
         #this will match 123*2 so process here
    

    【讨论】:

      【解决方案2】:

      您可以为 ussd 用户表创建额外的列来跟踪用户的当前级别并使用进度之类的东西。如果您仍然需要这个,我很乐意通知您更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-24
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-07
        • 2014-12-21
        • 2020-09-11
        相关资源
        最近更新 更多