使用阿里大鱼的短信验证码总结
自己做的是app直接调用阿里大鱼的短信验证码 然后和本地存储的随机六位数对比,下面说下步骤:
1.首先呢,先进入阿里大鱼的开放平台 http://open.taobao.com/doc2/apiDetail?spm=0.0.0.0.D1PYJd&apiId=25450
2.然后能看到 文档中心 让我们传递的一些参数(公共参数和请求参数) 有些是必传的 在此我列出 我自己传递的一些参数
首先我们看到的是第一个参数
appkey这个是注册就有的
format是固定传json的
method也是固定传 alibaba.aliqin.fc.sms.num.send
rec_num 也就是接收的手机号码
sign这个放最后面说 这个就是 签名之后的
sign_method 这个看你签名的方式 这里我使用的是md5
sms_free_sign_name 这个参数是你在平台申请的 模板名称
sms_param 这个是你平台申请的 模板格式 其中 name是个可变的参数占位
sms_template_code 这个就是平台申请的模板id了
sms_type 是固定传 normal 的
还有2个参数
一个是timestamp 另一个是 v
v是固定传 2.0
timestamp是按照阿里大鱼的时间格式来传递当前的时间
我这边的参数和参数值都进行了 utf-8进行URL编码
在此 我列出编码方法 这个方法找了好久
+(NSString *)urlFormString:(NSString *)string{
NSString * encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
kCFAllocatorDefault,
(CFStringRef)string,
NULL,
(CFStringRef)@":/?#[]@!$ &‘()*+,;=<>%{}|^~`",
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding) ));
return encodedString;
}
这里面我对一些特殊的字符进行了转码 不然后台识别不了比如 :号
既然说到编码了 那么就说说怎么被坑的吧 我使用的网络请求方式是AFNetworking 由于大鱼要求的时间格式传递是一个固定的格式yyyy-MM-dd HH:mm:ss
可以看到 这个时间格式中间是有空格的
空格在iOS端编码后 会成为%20 但是java或者php后台接收的 空格格式是 + 所以我在此我特地用了 + 来代替%20
NSString *hexStr=[HextransformString urlFormString:dateTime];
NSString *replacStr=[hexStr stringByReplacingOccurrencesOfString:@"%20" withString:@"+"];
此时我就开始用AF的post来传递了字典类型的了
但是当时没发现 AF底层对参数和参数值又进行了一次编码 此时 + 变成了 %2B
所以在这里我就没有字典类型传递了 直接使用的是 url拼接的形式进行的传递(时间比较赶 也就没想太多)
好了 下面就说下签名 签名我是用javasdk比对的
说下步骤:
1.人工按照 ASCII码排序 也就是首先比对第一个字母前后 第一个一样 再比对 第二个以此类推
2.把所有的参数和参数值拼接好后 的字符串进行MD5加密
3.然后把所有的大写字母转化为小写字母
总结就是一步:
NSString *md5Str=[[str md5String] uppercaseString];
str就是人工按照 ASCII码排序的一个字符串
今天就写到这里 如果有什么不准确的还望大家指点一二 谢谢