问题现象

某局点使用iMC EIA和第三方短信平台实现Portal短信认证,在输入完手机号之后点击获取验证码提示报错,报错信息为“获取密码失败。原因:短信发送失败,短信服务器返回错误。(error code:60505,67004)”。

告警信息

错误截图如下:

在iMC PLAT页面上尝试发送密码通知短信,也会提示报错,错误提示为“短信平台返回错误,错误码为-1。错误信息为null err”。报错截图如下:

原因分析

收集出现问题时候的前台日志,前台日志所在的路径为iMC所在的安装目录下的\client\log\imcforeground.log日志。通过分析日志可以看到出现故障时iMC已经向短信平台发起发送密码的任务,因为第三方短信平台没有回应故导致短信发送失败。

2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] Obtain SMS Recipient Number:[1892018XXXX  //iMC已经发出发送密码的任务给短信平台
2017-11-24 11:25:24 [ERROR] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::getImplMgr] reflect impl class error.
java.lang.ClassNotFoundException: com.imc.acm.Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:190)
at com.imc.acm.note.func.NoteMgrImpl.getImplMgr(iMC-ACM:292)
at com.imc.acm.note.func.NoteMgrImpl.a(iMC-ACM:351)
at com.imc.acm.note.func.NoteMgrImpl.sendNotifyPwdNote(iMC-ACM:667)
at com.imc.acm.guest.view.AcmGuestBean.sendPwdNote(iMCWebAcm:1280)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:51)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:420)
at javax.faces.component.UICommand.broadcast(UICommand.java:103)
at javax.faces.component.UIData.broadcast(UIData.java:1601)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1041)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:289)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1415)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:772)
at org.apache.myfaces.lifecycle.ApplyRequestValuesExecutor.execute(ApplyRequestValuesExecutor.java:38)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.imc.servlet.filters.FileUploadEncodingFilter.doFilter(FileUploadEncodingFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.imc.filter.ImcBrowserCacheInvalidFilter.doFilter(ImcBrowserCacheInvalidFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.imc.filter.ImcNoEtagFilter.doFilter(ImcNoEtagFilter.java:47)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.imc.filter.ImcExpiresFilter.doFilter(ImcExpiresFilter.java:830)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.imc.servlet.filters.UrlAccessController.doFilter(UrlAccessController.java:634)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::getImplMgr] It is not inject class.
2017-11-24 11:25:24 [WARN ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::getReflectClass] reflect class not found.
2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] No other SMS Sender is provided ,use H3C plat Sender.
2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] Send Message by plat ,the number is :18920187727
2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] Send Message by plat ,the smsContent is :【北京银行】接入帐号名:1892018XXXX,密码:179523。//这里电话号码为用户实际号码,后面信息使用XXXX代替。
2017-11-24 11:25:24 [INFO ] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] Send Message by plat ,the remark is :{userName=18920187727}
2017-11-24 11:25:36 [INFO ] [http-nio-8081-exec-20] [com.imc.plat.operlog.func.OperationLogMgrImpl::insertLog] [OperationLog]  Operator:hryx,IP Address:218.69.36.67,Module Name:平台,Operation:操作员注销。,Result:SUCCESS
2017-11-24 11:25:36 [INFO ] [http-nio-8081-exec-20] [com.imc.res.terminal.func.ResTerminalMgrImpl::delSession4Destroyed] Destroyed http session id is 432D18C14F013E0C3BA6B0EA1C21300C for remove terminal session.
2017-11-24 11:25:36 [WARN ] [http-nio-8081-exec-20] [com.imc.servlet.filters.UrlAccessController::doFilter] Access URL With No OperatorInfo: /imc/fault/accessMgrServletForBoard?null from 218.69.36.67
2017-11-24 11:25:36 [WARN ] [http-nio-8081-exec-22] [com.imc.servlet.filters.UrlAccessController::doFilter] Access URL With No OperatorInfo: /imc/navigationToLogin.xhtml?reloginFlag=true from 218.69.36.67
2017-11-24 11:25:41 [WARN ] [http-nio-8081-exec-11] [com.imc.servlet.filters.UrlAccessController::doFilter] Access URL With No OperatorInfo: /imc/fault/accessMgrServletForBoard?null from 218.69.36.67
2017-11-24 11:25:41 [WARN ] [http-nio-8081-exec-25] [com.imc.servlet.filters.UrlAccessController::doFilter] Access URL With No OperatorInfo: /imc/navigationToLogin.xhtml?reloginFlag=true from 218.69.36.67
2017-11-24 11:25:45 [ERROR] [http-nio-8081-exec-21] [com.imc.acm.note.func.NoteMgrImpl::a] Send Message error ,the error code is :50701
2017-11-24 11:25:45 [WARN ] [http-nio-8081-exec-21] [com.imc.acm.guest.view.AcmGuestBean::sendPwdNote] com.imc.acm.AcmException: 短信平台返回错误,错误码为-1。错误信息为“null err”。[67004] 短信平台返回错误,错误码为-1。错误信息为“null err”。
com.imc.acm.AcmException: 短信平台返回错误,错误码为-1。错误信息为“null err”。[67004] 短信平台返回错误,错误码为-1。错误信息为“null err”。
解决办法

联系第三方短信平台解决它们的问题之后,再次进行短信认证成功,可以正常获得密码短信。

建议与总结

出现短信发送失败的情况时候,需要先确定如下几方面原因,这样更有助于问题定位。

①尝试使用短信进行告警转发,查看告警短信是否可以发送,确定是iMC侧认证问题还是短信服务器问题。

②如果是短信猫发送短信需要查看此短信猫是否和iMC PLAT适配,目前短信猫的适配清单如下:
 WaveCom M2306B
WaveCom TS-WGC1(Q2403A)
万象串口短信猫(型号:DG-C1A)
万象USB口短信猫(型号:DG-U1A)
万象USB口迷你短信猫(型号:DG-MINI)
金笛串口M1206B短信猫(芯片:24PL)
金笛USB口M1206B短信猫(芯片:Q24PL,Q2403A)

请尽量采购适配的短信猫。

③如果是使用H3C短信平台需要查看iMC是否能够连接公网,通过公网访问亿美短信网关。

④如果使用第三方短信平台,请事先做好短信平台对接工作,确保iMC能正常调用短信平台接口。

 

案例信息

案例类型:经验案例
案例号:201712170004
创建时间:2017年12月17日
更新时间:2018年3月20日
发布时间:2017/12/18 20:06:44
文章密级:游客可见
有效期:长期有效
发布者:李树兵 [lfw1635]
点击次数:6333
评论平均得分:0
关键词:短信认证 短信 发送失败 60505 76004
产品线:ESM
产品系列:iMC-EIA终端智能接入组件
产品版本:
故障类型:

常用操作
收藏