通常H5手机取号有两种方式,一种是通过与内嵌APP的单点登录获取,另外一种是通过移动/联通/电信网关获取。

去年很多项目用到了第二种手机取号服务,现在此功能已经沉淀到共享微服务中,现总结一下通过通信网关进行手机取号服务端的核心设计流程,并跟大家介绍一下如何实现。

一、手机取号服务端的设计核心流程
在这里插入图片描述
如上图所示,基于通信网关获取手机号码,需要前端与后端的配合,手机终端通过通信网关访问网络,手机终端的信息会随User-Agent发给通信网关,只要终端用的是通信服务,通信网关肯定知道受访者的手机号。如果服务于用户的指定网站和各省通信网关形成映射关系,那么用户在访问指定网站的时候,这个网站就会从通信网关获取手机号,核心流程就是这么简单。

二、关键实现代码片段如下

SurveySession session;
if (token.startsWith(RwkConstant.SURVEY_ACCESSTOKEN_PREFIX)){
   log.info("网关回调取号入口");
   session = (SurveySession)redisService.get(token, SurveySession.class);
   if(session != null){
      session.setMobile(inputMobile);
      session.setNetwayMobile(inputMobile);
      /**获取网关手机号码对应号段省份,加载入session**/
      RwkPrefix prefix = rwkCommonService.findPrefix(inputMobile,logUniqueFlag);
      if(prefix != null){
         String provinceId = prefix.getProvinceid().toString();
         session.setUserProvinceId(provinceId);
      }
      log.info("网关回调取得Session对象号码={}、省份代码={}",session.getNetwayMobile(),session.getUserProvinceId());
   }
   redisService.set(token, session,10,TimeUnit.MINUTES);
   session = (SurveySession)redisService.get(token, SurveySession.class);
   if (session != null){
      log.info("网关回调redis中取出对象号码={}",session.getNetwayMobile());
   }else {
      log.info("网关回调redis未set数值成功");
   }

   log.info("网关回调取号出口");
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐