使用云之讯语音验证码功能,需要到云之讯开放平台去注册对应的账号,才能使用。

这里http://www.ucpaas.com/doc/doc_rest3-2.jsp 是官方文档 ,需要自己研究第一行文字,才能

明白业务功能的实现点。

下面是一个封装好的类,针对使用该SDK的帮助类:

//
//  HYBUCSSDKHelper.h
//  UCSVoiceOrSMSVerifyCodeDemo
//
//  Created by 黄仪标 on 15/2/2.
//#import <Foundation/Foundation.h>
#import "UCSEvent.h"
#import "UCSService.h"/*!* 云之讯UCS SDK铺助类,封装对IM、智能验证、VOIP网络电话功能* @author huangyibiao*/
@interface HYBUCSSDKHelper : NSObject<UCSEventDelegate>/*!* 此处封装为单例*/
+ (HYBUCSSDKHelper *)shared;/*!*--------------------------------------------------------------------------* 下面的方法,是与云之讯平台连接相关的API*--------------------------------------------------------------------------*/// 明文连接
- (NSInteger)connectWithClientNumber:(NSString *)clientNumberpassword:(NSString *)clientPassword;// 连接服务器(密文)
- (NSInteger)connect:(NSString *)token;// 连接服务器(明文,指定IP,Port)
- (NSInteger)connect:(NSString *)hostAddressport:(NSString *)hostPortclientNumber:(NSString *)clientNumberpassword:(NSString *)clientPassword;// 连接服务器(密文,指定IP,Port)
- (NSInteger)connect:(NSString *)hostAddresswithPort:(NSString *)hostPortwithToken:(NSString *)token;// 获取与云之讯平台连接的状态
- (BOOL)isConnected;/*!*--------------------------------------------------------------------------*         智能验证API*--------------------------------------------------------------------------*/
/*** 获取云验证码*/
- (void)ucsVerifyCodeWithPhone:(NSString *)phoneseconds:(int)seconds;/*** 验证码验证*/
- (void)checkUcsVerifyCodeWithPhone:(NSString *)phoneverifycode:(NSString *)verifycode;/*!*--------------------------------------------------------------------------*         语音验证码、短信验证码相关API*--------------------------------------------------------------------------*/
/*** 调起语音验证码接口*/
- (void)voiceCodeTo:(NSString *)phone verifyCode:(NSString *)verifyCode;/*** 调起短信验证码接口* @param phone 短信接收端手机号码集合,用英文逗号分开,每批发送的手机号数量不得超过100*              个(国内短信不要加前缀,国际短信号码前须带相应的国家区号,如日本:0081)* @param param 内容数据,用于替换模板中{数字},若有多个替换内容,用英文逗号隔开即可*/
- (void)smsCodeTo:(NSString *)phone param:(NSString *)param;@end

下面是实现文件,这里的网络库使用的是AFN:

#define kAccountSid @"" // 替换为您的sid
#define kAccountToken @""
#define kAppId @""
#define kAppName @""#define kUCSBaseURL @"https://api.ucpaas.com"
#define kSoftVersion @"2014-06-30" // 云之讯REST API版本号。@interface HYBUCSSDKHelper ()@property (nonatomic, strong) UCSService *ucsService;
@property (nonatomic, copy)   NSString   *callerPhoneNumber; // 主叫号码
@property (nonatomic, copy)   NSString   *phoneNumber;       // 被叫号码@end@implementation HYBUCSSDKHelper+ (HYBUCSSDKHelper *)shared {static HYBUCSSDKHelper *s_helper = nil;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{if (s_helper == nil) {s_helper = [[[self class] alloc] init];}});return s_helper;
}- (instancetype)init {if (self = [super init]) {self.ucsService = [[UCSService alloc] initWithDelegate:self];}return self;
}/*!*--------------------------------------------------------------------------* 下面的方法,是与云之讯平台连接相关的API*--------------------------------------------------------------------------*/
// 明文连接
- (NSInteger)connectWithClientNumber:(NSString *)clientNumber password:(NSString *)clientPassword {return [self.ucsService connect:kAccountSidwithAccountToken:kAccountTokenwithClientNumber:clientNumberwithClientPwd:clientPassword];
}// 连接服务器(密文)
- (NSInteger)connect:(NSString *)token {return [self.ucsService connect:token];
}// 连接服务器(明文,指定IP,Port)
- (NSInteger)connect:(NSString *)hostAddressport:(NSString *)hostPortclientNumber:(NSString *)clientNumberpassword:(NSString *)clientPassword {return [self.ucsService connect:hostAddresswithPort:hostPortwithwithAccountSid:kAccountSidwithAccountToken:kAccountTokenwithClientNumber:clientNumberwithClientPwd:clientPassword];
}// 连接服务器(密文,指定IP,Port)
- (NSInteger)connect:(NSString *)hostAddresswithPort:(NSString *)hostPortwithToken:(NSString *)token {return [self.ucsService connect:hostAddress withPort:hostPort withToken:token];
}// 查询帐号与服务器连接状态
- (BOOL)isConnected {return [self.ucsService isConnected];
}/*!*--------------------------------------------------------------------------*         智能验证*--------------------------------------------------------------------------*/
/*** 获取云验证码*/
- (void)ucsVerifyCodeWithPhone:(NSString *)phoneseconds:(int)seconds {[self.ucsService getVerificationCode:kAccountSidwithAppid:kAppIdwithAppName:kAppNamewithCodetype:1withPhone:phonewithSeconds:secondswithBusiness:1];
}/*** 验证码验证*/
- (void)checkUcsVerifyCodeWithPhone:(NSString *)phoneverifycode:(NSString *)verifycode {[self.ucsService doVerificationCode:kAccountSidwithAppid:kAppIdwithPhone:phonewithVerifycode:verifycode];
}/*!*--------------------------------------------------------------------------*         语音验证码、短信验证码相关API*--------------------------------------------------------------------------*/
/*** 调起语音验证码接口*/
- (void)voiceCodeTo:(NSString *)phone verifyCode:(NSString *)verifyCode {AFHTTPRequestOperationManager *manager = [self operationManagerWithBaseUrl:kUCSBaseURL];// 获取系统当前的时间戳NSString *timestamp = [self timestamp];[manager.requestSerializer setValue:[self authorization:timestamp] forHTTPHeaderField:@"Authorization"];NSString *url = [NSString stringWithFormat:@"/%@/Accounts/%@/Calls/voiceCode?sig=%@",kSoftVersion, kAccountSid, [self sig:timestamp]];NSDictionary *params = @{@"voiceCode" : @{@"appId"      : kAppId,@"to"         : phone,@"verifyCode" : verifyCode}};[manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"url: %@\nparmas: %@\nresponseObject:%@\nerrorMessage: %@ errorCode=%@ headers:%@",operation.response.URL.absoluteString,params,responseObject,responseObject[@"errorMessage"],responseObject[@"errorCode"],operation.request.allHTTPHeaderFields);if ([responseObject isKindOfClass:[NSDictionary class]]) {NSLog(@"%@", responseObject);} else {}} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"error: %@", [error description]);}];
}- (NSString *)timestamp {NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateStyle:NSDateFormatterMediumStyle];[formatter setTimeStyle:NSDateFormatterShortStyle];[formatter setDateFormat:@"yyyyMMddHHmmss"];NSDate *datenow = [NSDate date];NSString *timestamp = [formatter stringFromDate:datenow];return timestamp;
}- (NSString *)authorization:(NSString *)timestamp {// 使用Base64编码(账户Id + 冒号 + 时间戳)NSString *authorization = [NSString stringWithFormat:@"%@:%@", kAccountSid, timestamp];authorization = [self base64Encoding:authorization];return authorization;
}- (NSString *)sig:(NSString *)timestamp {// URL后必须带有sig参数,sig= MD5(账户Id + 账户授权令牌 + 时间戳),共32位(注:转成大写)// 使用MD5加密(账户Id + 账户授权令牌 + 时间戳),共32位。NSString *sig = [NSString stringWithFormat:@"%@%@%@", kAccountSid, kAccountToken, timestamp];sig = [[self md5n:sig] uppercaseString];return sig;
}/*** 调起短信验证码接口* @param phone 短信接收端手机号码集合,用英文逗号分开,每批发送的手机号数量不得超过100*              个(国内短信不要加前缀,国际短信号码前须带相应的国家区号,如日本:0081)* @param param 内容数据,用于替换模板中{数字},若有多个替换内容,用英文逗号隔开即可*/
- (void)smsCodeTo:(NSString *)phone param:(NSString *)param {AFHTTPRequestOperationManager *manager = [self operationManagerWithBaseUrl:kUCSBaseURL];// 获取系统当前的时间戳NSString *timestamp = [self timestamp];[manager.requestSerializer setValue:[self authorization:timestamp] forHTTPHeaderField:@"Authorization"];NSString *url = [NSString stringWithFormat:@"/%@/Accounts/%@/Messages/templateSMS?sig=%@",kSoftVersion, kAccountSid, [self sig:timestamp]];NSDictionary *params = @{@"templateSMS" : @{@"appId"      : kAppId,@"to"         : phone,@"templateId" : @(3177),@"param"      : param}};[manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {NSLog(@"url: %@\nparmas: %@\nresponseObject:%@\nerrorMessage: %@ errorCode=%@ headers:%@",operation.response.URL.absoluteString,params,responseObject,responseObject[@"errorMessage"],responseObject[@"errorCode"],operation.request.allHTTPHeaderFields);if ([responseObject isKindOfClass:[NSDictionary class]]) {NSLog(@"%@", responseObject);} else {}} failure:^(AFHTTPRequestOperation *operation, NSError *error) {NSLog(@"error: %@", [error description]);}];
}/*!* @brief 将字符串转换成二进制数据后,再进行base64编码* @return 返回base64编码后的字符串*/
- (NSString *)base64Encoding:(NSString *)str {NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];NSString *result = nil;// 判断是否是ios7及其以上版本
#define kIsIOS7OrLater ([UIDevice currentDevice].systemVersion.integerValue >= 7 ? YES : NO)if (kIsIOS7OrLater) {result = [data base64EncodedStringWithOptions:0];} else {result = [data base64Encoding];}return result;
}#pragma mark - md5加密
/*!* @brief 将字符串本身进行md5加密,并将加密后的字符串返回* @return 返回加密后的字符串*/
- (NSString *)md5n:(NSString *)str {const char *cStr = [str UTF8String];unsigned char result[16];CC_MD5(cStr, strlen(cStr), result);return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",result[0], result[1], result[2], result[3],result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]];
}#pragma mark - UCCEventDelegate
// 与云通讯平台连接成功
- (void)onConnectionSuccessful:(NSInteger)result {NSLog(@"与云通讯平台连接成功 result=%ld", result);
}// 与云通讯平台连接失败或连接断开
- (void)onConnectionFailed:(NSInteger)reason {NSLog(@" 与云通讯平台连接失败或连接断开 reason=%ld", reason);
}/*!*--------------------------------------------------------------------------*         智能验证:语音验证码、短信验证码相关API代理回调*--------------------------------------------------------------------------*/
// 云获取验证码成功  0:已经验证成功,1:已下发验证码到用户
- (void) onGetValiateCodeSuccessful:(NSInteger)nResult {NSLog(@"%@", nResult ? @"已下发验证码到用户" : @"已经验证成功");
}// 云获取验证码失败
- (void) onGetValiateCodeFailed:(NSInteger)reason {NSLog(@"云获取验证码失败 reason=%ld", reason);
}// 云验证成功
- (void) onDoValiateCodeSuccessful:(NSInteger)nResult {NSLog(@"云验证成功 result=%ld", nResult);
}// 云验证失败
- (void) onDoValiateCodeFailed:(NSInteger)reason {NSLog(@"云验证失败 reason=%ld", reason);
}- (AFHTTPRequestOperationManager *)operationManagerWithBaseUrl:(NSString *)url {// 开启菊花转[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURL URLWithString:url]];manager.requestSerializer = [AFJSONRequestSerializer serializer];manager.responseSerializer = [AFJSONResponseSerializer serializer];manager.requestSerializer.stringEncoding = NSUTF8StringEncoding;[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];[manager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];[manager.requestSerializer setValue:@"256" forHTTPHeaderField:@"Content-Length"];manager.responseSerializer.acceptableContentTypes = [NSSet setWithArray:@[@"application/json",@"text/html",@"text/json",@"text/javascript"]];return manager;
}@end

上面部分源码是无用的,因为这是为后面追加功能而添加的,这里只说明语音、短信验证码功能的实现。

说明:这里提供的部分源码,不意味着是好的代码,具体还请参考官方文档说明。

云之讯语音、短信验证码实现相关推荐

  1. 云之讯java短信验证码真小白教程

    准备:eclipse,浏览器 第一步:打开云之讯官网,先注册,注册后,如下图(可以看到送了些钱): 第二步:认证个人开发者/企业开发(认证后可以创建应用),如下图: 认证之后 第三步:创建应用,如图: ...

  2. 容联云通讯php短信接口,开发中使用 【容联 云通信】获取短信验证码的 Javascript 接口...

    开发中使用 [容联 云通信]获取短信验证码的 Javascript 接口 在平台应用列表添加应用. 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信. 在项目中绑定配置:将控制台首页的开发者主 ...

  3. 阿里云接口实现发送短信验证码

    java 阿里云接口实现发送短信验证码 1. 阿里云后台配置短信相关 1.1 开通短信服务 1.2 添加模板签名 1.3 创建秘钥 1.4 短信需要后台授权--注意点 2 java--简单实现短信验证 ...

  4. 云之讯php短信接口,菏泽java云之讯短信接口价格如何计算? 新锐信息科技服务至上...

    免费接码验证码接收平台 好用的接码平台有以下几个特征: 1.平台功能设置人性化:语音验证码+短信验证码一体化,方便用户使用.现在很多项目都慢慢开始了语音验证码的步伐. 2.平台稳定经营时间久:接码平台 ...

  5. 使用容联云Celery异步发送短信验证码

    文章目录 Celery/容联云 安装与命令 安装 celery启动命令 一.Celery 1.配置Celery 2.创建任务文件 二.容联云 1. 配置容联云 settings.py 2. 使用Sms ...

  6. Dython 容联云的一个测试短信验证码

    import random,redis from ronglian_sms_sdk import SmsSDK accId = '8a216da882f1f59401835463b6491132'  ...

  7. java 阿里云接口实现发送短信验证码

    1.先去阿里云开通短信服务: 2.添加模板及签名:需要审核,个人账户审核就几分钟就OK 先解释一下模板及签名: 标准参照:https://help.aliyun.com/document_detail ...

  8. 阿里云——Java实现手机短信验证码功能

    目录 如何实现短信验证码功能 1.准备工作 1.1 注册 阿里云 账号,并完成实名认证.找到短信服务功能. 1.2 开通短信服务 1.3 签名与模板 1.4 获取AccessKey 1.5 打开短信控 ...

  9. 云之讯手机号短信验证

    目录标题 1.下载相关服务sdk 2.解压 3.创建项目 4.导入依赖 5.修改配置 6.获取发送短信的工具包 7.使用 8.官网提供的例子 1.下载相关服务sdk 地址:http://docs.uc ...

  10. 阿里云服务 - Java实现短信验证码发送 --(完整教程)

    我们在实现登录注册的时候,常常用到了短信验证码校验,下面给大家简单介绍阿里云的短信服务平台. 相关jar包: aliyun-java-sdk-core-3.2.2.jar(点此下载) aliyun-j ...

最新文章

  1. OVS DPDK vs OVS Deep Dive(十六)
  2. 【渝粤题库】广东开放大学 外贸会计 形成性考核
  3. mysql 连接池 100_mysql的最大连接数默认是100_MySQL
  4. python分布式框架_高性能分布式执行框架——Ray
  5. SoapSerialization——手机号码归属地
  6. Linux 下如何查找木马并处理
  7. 华为Mate X供货还没跟上,Mate Xs就要来了,余承东亲自确认
  8. Android:通过Intent传递对象、Parcelable
  9. java培训学费_太原java培训班价格表
  10. 64 ----平面与直线之间的位置关系、平面与直线之间的交角、两直线两平面的位置关系
  11. idea查找当前方法的实现_intellij idea快速查看当前类中的所有方法(推荐)
  12. react引入本地mp4视频
  13. java孢子进化_孢子的进化起源
  14. 智能中线保护装置-零线电流保护器-中性线保护装置
  15. 微信小程序项目设置并使用主题颜色
  16. Flex——项目item的属性(order、flex-grow、flex-shrink、flex-basis、flex、align-self)
  17. VBA怎样关闭工作簿和退出Excel
  18. 快来,票字版软件电子发票的设置方式(详细流程)
  19. 路由器linux版本升级,华为路由器升级全攻略
  20. 通过脚本将网址添加到客户的受信任站点

热门文章

  1. 自己实现一个内存分配器
  2. [论文学习]Mask R-CNN
  3. [229]python3的requests类抓取中文页面出现乱码的解决办法
  4. Qt小游戏之数字华容道(百行代码搭雏形,可玩;含源码+注释)
  5. Java 周日期计算工具,获取当前第几周,按周数获取周一至周日,按日期获取周一至周日
  6. python 实战2 斜边上的高
  7. 《一斛珠·元夜月蚀》
  8. 读《熵减 华为活力之源》
  9. Python入门技巧
  10. Echarts实现区级地图