Swift3.0使用Alamofire获取融云SDK的token

最近使用融云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)

Swift3.0使用Alamofire获取融云SDK的token_第1张图片
请求头
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

你可能感兴趣的:(Swift3.0使用Alamofire获取融云SDK的token)