www.cftea.com

用中国电信天翼开放平台实现“短信验证码”功能-开发

千一网络(原创)2016/10/23 13:06:57

其实除了验证码短信发外,中国电信天翼开放平台可以实现很多功能,比如获取天气预报、位置定位、公交查询、短信发送、验证码短信发送等。我们这里只探讨其验证码短信发送功能。

概念

“模板短信”与“短信验证码”的区别

“模板短信”就是想发什么就发什么,“短信验证码”就是固定格式的短信。

“短信验证码”中“验证短信下发”与“自定义短信验证码下发”的区别

“验证短信下发”就是验证码由天翼开放平台产生,然后通过回调地址,告诉用户的应用其产生的验证码是多少。

“自定义短信验证码下发”就是验证码由用户的应用产生,加密后,传给天翼开放平台。

我觉得“验证短信下发”要比“自定义短信验证码下发”复杂些,所以本文代码针对的是“验证短信下发”。

创建应用

注册审核通过后,就得创建应用了,创建应用需要写 20 个以上的汉字描述,还不含标点。

创建过程中,要求选择“能力”,就是说你要哪种接口,短信发送?天气预报?公交查询?需要注意的是:其网页在 Chrome 中显示不正常。

这些填完了,还要填一些资料才可以提交审核,不过,我们暂时不忙点“提交审核”按钮,我们点击应用名称,我们先测试一下。

点击应用名称后,进应用的“应用设置”,获取 App Id、App Secret。

官方网站上有开发文档,参见:http://open.189.cn/index.php?m=ability&c=index&a=show&id=342,还提供了各种开发语言的示例。不过官方文档有两个不足:一是有遗漏、二是不够白话,本文就这两方面作些梳理。

开发第一步、获取 Access Token

官方没有代码,我写了一个。

由于短信这个功能不需要授权,所以使用的是应用场合二的参数,具体可参见:http://open.189.cn/index.php?m=content&c=index&a=lists&catid=62

获取的结果是 JSON 格式字符串,要拆解其中的 Access Token 可用 JSON 处理,请参见:C# 中处理 JSON

注意:令牌有效期单位为秒,天翼开放平台的令牌有效期折算出来是 30 天,过期之前可以直接使用,不必再次到服务器获取令牌,过期后需要刷新令牌。如果还没有过期就又请求了令牌,结果怎样呢?有的平台是返回新令牌,而天翼开放平台不是这样,它还是返回老令牌。请勿频繁获取令牌,我虽然不知道天翼开放平台如何,但其他有些平台是限制了每天获取令牌次数的,比如 2000 次。

开发第二步、发送短信

这个官方是有示例代码的,要注意的是测试期间不是想发哪个手机号都可以,只能是后台中指定了的,配置地方如下:

天翼测试短信配置

如果没配置,则会提示:Application in the test condition, test account is not configured

好了,现在我们已经可以向手机发验证码了。(代码官方有,这里就不再列了。不过真心觉得官方的对代码规范的精益求精做得还真不够

调用后,天翼开放平台会告诉我们一些信息(JSON 格式),最重要的是 identifier,我们要将其取出来。

还有个问题,我们采用的是“验证短信下发”这种方式,这个验证码是由天翼开放平台产生的,它必须告诉我们,我们才知道正确的验证码是多少。请往下看。

开发第三步、开发状态报告接收程序

以上我们做了一个简单的接收程序,把它放在网上去,然后将这个地址告诉天翼开放平台,发送短信后,天翼开放平台会调用这个地址,向这个地址 POST rand_code 与 identifier 参数,我们与第二步的 identifier 对比,就知道每次发送的验证码是哪一条记录,再与客户填写的验证码一对比,就知道填写正确与否了。

特别说明:上一段说了“将这个地址告诉天翼开放平台”,怎么告诉呢?

是不是后台应用设置中“短信验证码设置” -> “状态报告接收地址”这里呢?我要说的是,这个地方,你配置了它会调用,但调用时不会传 rand_code,反而传其他一些东西,所以不是这里,我们完全可以将此项留空。

那在哪里配置呢?天翼开放平台提供的示例代码中:SendSMSVC.cs,第 20 行:private string _url = "http://open.189.cn";//这里请替换为您的状态监控页

So,后台的“状态报告接收地址”与代码中的“状态监控页”,是两个不同的东西。

官方示例代码有很多写好的类,比如签名、获取信任码,非常实用,建议当作类库来用。

<<返回首页<<