融云发送手机短信验证短信(.net版本)
首先本次需求是在MVC5中进行的,通过收费的融云服务来验证手机号码,而且本次的项目也是前后台分离,所以添加了WEBAPI2,那么先添加WEBAPI的接口
using System;
using System.Web.Http;
using System.Net.Http;
using System.Web.Script.Serialization;
using System.Text;
using System.Web; namespace BlackNails.Controllers
{
public abstract class WebAPI2BaseController : ApiController
{
public HttpContext context = HttpContext.Current; public static HttpResponseMessage toJson(Object obj)
{
String str;
if (obj is String || obj is Char)
{
str = obj.ToString();
}
else
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
str = serializer.Serialize(obj);
}
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
} public string Options()
{
return null; // HTTP 200 response with empty body
}
}
}
然后添加一个UserController接口文档
using BlackNails.CommonClass;
using BlackNails.Controllers;
using BlackNails.DAL;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
using System.Web.Script.Serialization; namespace BlackNails.WebAPI
{
public class UserController : WebAPI2BaseController
{ [HttpGet]
public HttpResponseMessage sendCode(string mobile)
{
var response = new Response(); Random r = new Random();
int i = r.Next(, );
string Random = i.ToString(); TimeSpan ts = DateTime.Now - DateTime.Parse("1970-1-1");
string Timestamp = Convert.ToInt32(ts.TotalSeconds).ToString(); //以字节方式存储
byte[] data = Encoding.Default.GetBytes(Constant.APP_SECRET + Random + Timestamp);
System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
//得到哈希值
byte[] result = sha1.ComputeHash(data);
//转换成为字符串的显示
string Signature = BitConverter.ToString(result).Replace("-", ""); WebRequest request = WebRequest.Create("http://api.sms.ronghub.com/sendCode.json");
request.Method = "POST";
string postData = "mobile=" + mobile + "&templateId=" + Constant.TEMPLATE_REGISTER + "®ion=86";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
request.Headers.Add("App-Key", Constant.APP_KEY);
request.Headers.Add("Nonce", Random);
request.Headers.Add("Timestamp", Timestamp);
request.Headers.Add("Signature", Signature);
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, , byteArray.Length);
dataStream.Close();
WebResponse resp = request.GetResponse();
dataStream = resp.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
ReturnJson _ReturnJson = jsonSerializer.Deserialize<ReturnJson>(responseFromServer);
var code = _ReturnJson.code;
var sessionId = _ReturnJson.sessionId;
if(code == )
{
response.Code = ;
response.Message = "发送验证码成功!";
context.Cache.Insert(mobile, sessionId);
} else
{
response.Code = ;
response.Message = "发送验证码失败!";
context.Cache.Insert(mobile, "");
}
reader.Close();
dataStream.Close();
resp.Close(); response.Data = null;
return toJson(response);
} [HttpGet]
public HttpResponseMessage verifyCode(string mobile, string code)
{
var response = new Response(); Random r = new Random();
int i = r.Next(, );
string Random = i.ToString(); TimeSpan ts = DateTime.Now - DateTime.Parse("1970-1-1");
string Timestamp = Convert.ToInt32(ts.TotalSeconds).ToString(); //以字节方式存储
byte[] data = Encoding.Default.GetBytes(Constant.APP_SECRET + Random + Timestamp);
System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider();
//得到哈希值
byte[] result = sha1.ComputeHash(data);
//转换成为字符串的显示
string Signature = BitConverter.ToString(result).Replace("-", ""); WebRequest request = WebRequest.Create("http://api.sms.ronghub.com/verifyCode.json");
request.Method = "POST";
string postData = "sessionId="+ context.Cache[mobile] +"&code=" + code;
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("App-Key", Constant.APP_KEY);
request.Headers.Add("Nonce", Random);
request.Headers.Add("Timestamp", Timestamp);
request.Headers.Add("Signature", Signature);
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, , byteArray.Length);
dataStream.Close();
WebResponse resp = request.GetResponse();
dataStream = resp.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
ReturnJson _ReturnJson = jsonSerializer.Deserialize<ReturnJson>(responseFromServer);
var rtnCode = _ReturnJson.code;
var rtnSuccess = _ReturnJson.success;
if (rtnCode == )
{
response.Code = ;
response.Message = "手机号验证成功!";
}
else
{
response.Code = ;
response.Message = "手机号验证失败!";
}
reader.Close();
dataStream.Close();
resp.Close(); response.Data = rtnSuccess;
return toJson(response);
}
}
}
融云发送手机短信验证短信(.net版本)的更多相关文章
- Java实现发送手机验证码功能(短信+语音)
利用第三方平台可以实现发送手机短信验证码和语音验证码的功能,本文使用框架是struts2+spring+hibernate,现就action层给出核心代码功能. public class Verify ...
- Python使用腾讯云-短信服务发送手机短信
目前[腾讯云短信]为客户提供[国内短信].[国内语音]和[海外短信]三大服务,腾讯云短信SDK支持以下操作: 国内短信 国内短信支持操作: • 指定模板单发短信 • 指定模板群发短信 • 拉取短信回执 ...
- [android]ShareSDK——内容分享和短信验证
前言 新版本号ShareSDK的分享和短信验证,按官网的文档,都须要加入一个<Activity></Activity>标签,而分享和短息验证的这个标签内容都一样.会冲突. 解决 ...
- ASP.NET MVC+Bootstrap 实现短信验证
短信验证大家都已经非常熟悉了,基本上每天都在接触手机短信的验证码,比方某宝,某东购物.站点注冊,网上银行等等,都要验证我们的手机号码真实性.这样做有什么优点呢. 曾经咱们在做站点的时候.为了提高用户注 ...
- nodejs向远程服务器发送post请求----融云Web SDK/客户端获取token
最近要用到一个叫融云的及时通讯的SDK,在获取token这个步骤的时候有点卡顿,以防以后碰到类似的问题,再此记录一下. 客户端通过融云 SDK 每次连接服务器时,都需要向服务器提供 Token,以便验 ...
- C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制
https://blog.csdn.net/IT_xiao_guang_guang/article/details/104299983 前言 1.发送手机验证码用的是网建的SMS接口(http:/ ...
- 基于融云的IM通讯
一.业务场景 项目的发展需要吧原来自己的写的通讯换为第三方的,多家对比后选择了融云IM通讯,项目要实现的功能这要是单聊.群聊.聊天室.发送的内容为文字.图片.文件.语音通话与视频通话.听起来挺复杂的我 ...
- Luffy之注册认证(容联云通讯短信验证)
用户的注册认证 前端显示注册页面并调整首页头部和登陆页面的注册按钮的链接. 注册页面Register,主要是通过登录页面进行改成而成. 先构造前端页面 <template> <div ...
- 阿里云短信验证_基于阿里云OpenAPI实现
阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单 ...
随机推荐
- mysql管理----状态参数释义
下面是数据库MySQL优化的一些步骤 一.通过show status和应用特点了解各种SQL的执行频率 通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extende ...
- Arduino线程库ProtoThreads
参考: Arduino线程库ProtoThreads 一个“蝇量级” C 语言协程库
- 调用图灵机器人API实现Android智能机器人
非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353 下 ...
- brew udpate出现错误“/usr/local is not writable.”的问题解决
如图所示: 在命令行输入: sudo chown -R 当前登录的用户名 /usr/local 再次输入: brew update 问题解决.
- LPC1768外部中断与GPIO中断
LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...
- Mac iTerm2使用rz、sz从远程上传下载文件
使用 brew install lrzsz .如果安装遇到错误的话,使用以下方法: 在mac终端下运行: brew install lrzsz (安装教程:http://brew.sh/index_z ...
- 【spoj7528】 Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ (题目链接) 题意 给出一个字符串,询问其中字典序第K小的子串. Solution 后缀自动机例题. 构出后缀自动机以后,对每 ...
- C# Expression表达式笔记
整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧 它表示具有常量值的表达式 我们选建一个控制台应用程序 ConstantExpression _ ...
- ubuntu内核的编译安装
原创声明:转载请注明出处. 一.操作环境: 1.ubuntu版本 2.linux原有内核版本 3.要安装的linux内核版本 linux-3.16.39 二.新内核的编译和安装 1.首先下载linux ...
- pypi 的使用
关于本人的package,情况比较简单,所有的.py文件全部放到了一个叫做FundsData的文件夹下(package下),上层目录也叫FundsData(其实叫什么都可以),其下放了setup.py ...