闲话少叙,上点干货。
短信验证方式的基础设置就不在阐述。只描述遇到的问题及解决方案。
首先是一个对接失败的案例,先看东西
这是短信网关方的get构造请求方式
这是某公司短信网关验证方式中的帮助文档
协调两边参数,构造http get请求方式,但是久久没有收到验证码。分析了之后怀疑是短信网关方要求的SIGN字段中的MD5加密出现了问题,联系400后确认当前版本中MD5加密方式中的参数仅支持单一参数,不支持组合参数。
后续我们找了一个平台但平台端验证方式要求AES验证方式,只能作罢。
深夜在论坛里寻宝,找到一个SSL VPN对接成功的案例,注册了平台账户。重新对接,这次找到的平台所有参数都是固定参数,同时也没有要求验证字段。心中窃喜想着这下总能对接成功了吧。
按照要求构造完http 请求还是没能收到验证码
抓包分析后服务器端返回400查询后发现400服务为参数不对或者不符合服务器规范
、
再次分析抓包数据后明确了发送不成功的原因,受平台生成的http get连接影响Sign字段我们直接输入了我们定制的签名字段签名字段在发送时被进行了URL编码,而平台端要求UTF-8编码。将sign字段后的值改为了ID后尝试网关端终于有了响应,但是短信还是发送失败。
分析平台端提供的错误代码说明后,确认为短信内容超出变量限制。
原因是某公司自带的短信内容提示是通过短信猫发送的,短信猫可以发送全部内容。
但短信平台由于我们设置了固定的短信模版,实际发送时仅需要发送我们设置的变量参数即可。修改短信内容为下图所示后短信发送成功,用户侧验证完成。
技术总结
HTTP 请求构造时要注意平台端要求的参数,设备端是否全部支持。需要注意编码规范,中文字符和标点符号在HTTP传输时会经过URL编码,建议使用纯数字代替。还需要注意GSM跟短信网关平台的区别,如果平台申请时仅申请了验证码,那发送时只需要发送验证码变量即可。不需要发送全部内容。
提一个建议 上网行为管理设备内能否直接内置一家短信网关接口。如有短信验证需求,客户直接购买即可输入ID和key后即可使用。当前方式相对比较复杂。