最近使用融云SDK,需要向融云服务器请求一个token参数
参考融云官方文档:http://www.rongcloud.cn/docs/server.html
获取 Token 方法
方法名:/user/getToken
签名方法:请参考 通用 API 接口签名规则
URL:http://api.cn.ronghub.com/user/getToken.[format]
[format] 表示返回格式,可以为 json 或 xml,注意不要带 [ ]。
HTTP 方法:POST
上传参数(即parameters)
参数name可以设为与userId一样
请求头(headers)
Signature (数据签名)计算方法:将系统分配的 App Secret、Nonce (随机数)、Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1 哈希计算。如果调用的数据签名验证失败,接口调用会返回 HTTP 状态码 401。
返回值
token是我们的最终需要的参数
以上是具体的参数结构,下面使用Swift语言请求我们需要的参数token
###写下如下方法(调用时传入一个useId的字符串)
func requestToken1(userID:String) -> Void {
let dicUser = ["userId":userID,
"name":userID,
"portraitUrl":"http://img3.duitang.com/uploads/item/201508/30/20150830083023_N3rTL.png"
] //请求token的用户信息
let urlStr = "https://api.cn.ronghub.com/user/getToken.json" //网址接口
let appKey = "3argexb6re94e"
let appSecret = "ajiqI7yE0lB7kZ"
let nonce = "\(arc4random())" //生成随机数
let timestamp = "\(NSDate().timeIntervalSince1970)"//时间戳
var sha1Value = appSecret + nonce + timestamp
sha1Value = sha1Value.sha1()//数据签名,sha1是一个加密的方法
let headers = [ //照着文档要求写的Http 请求的 4个head
"App-key":appKey
,"Nonce":nonce
,"Timestamp":timestamp
,"Signature":sha1Value
]
Alamofire.request(urlStr, method: .post, parameters: dicUser , encoding: URLEncoding.default, headers: headers).responseJSON { (response) in
print(response)
if let dic = response.result.value as? NSDictionary{
let code = dic.value(forKey: "code") as! NSNumber
if code.stringValue == "200" {
print(dic.value(forKey: "token"))
}
}
}
}
下面是sha1的方法,创建NSString的category,并在桥接文件中引用
.h文件
#import
@interface NSString (SHA1)
- (NSString *)sha1;
@end
.m文件
#import "NSString+SHA1.h"
#import
typedef unsigned char *(*MessageDigestFuncPtr)(const void *data, CC_LONG len, unsigned char *md);
static NSString *_getMessageDigest(NSString *string, MessageDigestFuncPtr fp, NSUInteger length) {
const char *cString = [string UTF8String];
unsigned char *digest = malloc(sizeof(unsigned char) * length);
fp(cString, (CC_LONG)strlen(cString), digest);
NSMutableString *hash = [NSMutableString stringWithCapacity:length * 2];
for (int i = 0; i < length; ++i) {
[hash appendFormat:@"%02x", digest[i]];
}
free(digest);
return [hash lowercaseString];
}
@implementation NSString (SHA1)
- (NSString *)sha1 {
return _getMessageDigest(self, CC_SHA1, CC_SHA1_DIGEST_LENGTH);
}
@end
参考文献http://www.jianshu.com/p/93338a645eba