新闻中心
华兴动态
媒体报道
行业常识
业内资讯
短信返回码
技术方案
码号查询
您的位置:首页>新闻中心>技术方案

vb.net实现手机短信验证码全过程

时间: 2019-05-24 来源: 华兴软通 本文链接:https://www.smshx.com/news_jishufangan4.html

在我们的工作生活中,使用各类网站、APP时,无论注册、支付,还是修改密码等情境下,都被要求获取短信验证码进行验证,那么验证码是如何发送的呢?接下来小编以华兴云短信为例,为大家详细介绍一下vb.net发送短信验证码的实现过程(同时实现防刷短信验证码机制,加密通信)。

一、实现思路

二、实现流程

1、注册账号

注册华兴云短信账号,填写基本信息,会有专人联系开户,并预送少量短信供测试使用。

2、下载接口

点击“产品中心”,进入产品页,选择对应的vb.net安全云短信接口及HTTPS版云短信接口文档下载;下载完毕文档如下:

3、配置参数变量

配置HttpsRequest.vb文件:

(1)将HttpsRequest.vb文件拷贝到项目中相应的位置,调用该类下的sendSms方法进行短信发送,及短信余额的查询getBalance方法。

(2)将sendSms方法中的注册码(regCode),密码(regPasswod),签名(signature),短信内容(content)修改成自己的信息。注意:短信内容可能需要报备。

(3)将目标手机号和内容根据代码里面的注释规则修改,在需要发送短信的地方调用sendSms这个方法就可以了。

4、报备短信模板

将待发内容提交至华兴客服工作人员,由工作人员进行黑名单、敏感词等检查,完成报备工作。

5、调用接口测试短信

完成前期的一系列准备工作,实际测试调用vb.net云短信接口的短信发送情况。

三、运行代码

查看HTTPS版云短信接口文档查看接口地址,参数说明及示例,调用下图代码配置好参数后,调用该方法测试发送短信,打印返回值,可查看文档中错误码

发送短信代码示例

图片验证码生成gif.aspx

<%@ import namespace="System"%>
<%@ import namespace="System.io"%>
<%@ import namespace="System.Drawing"%>
<%@ import namespace="System.Drawing.Imaging"%>
<%@ import namespace="System.Web.SessionState"%>
 
 
<script language="vb" runat="server">
    Sub Page_Load(ByVal Sender As Object, ByVal e As EventArgs)
        'RndNum为生成随机码的函数,
        Dim VNum As String = RndNum(4) '该值为生成验证码的位数
        Session("VNum") = VNum.ToString().Trim() '读取Session
        ValidateCode(VNum)   '根据Session生成图片
    End Sub
 
    '--------------------------------------------
    '生成图象验证码函数
    Sub ValidateCode(ByVal VNum)
        Dim Img As System.Drawing.Bitmap
        Dim g As Graphics
        Dim ms As MemoryStream
        Dim gheight As Integer = Int(Len(VNum) * 14)
        'gheight为图片宽度,根据字符长度自动更改图片宽度
        Img = New Bitmap(gheight, 24)
        g = Graphics.FromImage(Img)
        g.DrawString(VNum, (New Font("Arial", 12)), (New SolidBrush(Color.Red)), 3, 3) '在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
        ms = New MemoryStream()
        Img.Save(ms, ImageFormat.Png)
        Response.ClearContent() '需要输出图象信息 要修改HTTP头
        Response.ContentType = "image/Png"
        Response.BinaryWrite(ms.ToArray())
        g.Dispose()
        Img.Dispose()
        Response.End()
    End Sub
    Function RndNum(ByVal VcodeNum)
        Dim Vchar As String = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z" '需要使用中文验证,可以修改这里和ValidateCode函数中的字体
        Dim VcArray() As String = Split(Vchar, ",") '将字符串生成数组
        Dim VNum As String = ""
        Dim i As Byte
        For i = 1 To VcodeNum
            Randomize()
            VNum = VNum & VcArray(Int(35 * Rnd())) '数组一般从0开始读取,所以这里为35*Rnd
        Next
        Return VNum
    End Function
</script>

前端页面Default.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>vb.net发送手机验证码</title>
</head>
 
 
<body>
<form runat="server">
<div align="center">
<table width="750">
<tr>
<td valign="middle">手机号:</td>
<!--调用验证图片生成页--->
<td valign="top"><asp:textbox ID="Textbox1" runat="server" TextMode="SingleLine" /></td>
</tr>
<tr>
<td valign="top">输入验证码:</td>
<td valign="top"><asp:textbox ID="txtValidateCode" runat="server" TextMode="SingleLine" /><asp:Image id="Image1" runat="server" ImageUrl="gif.aspx" /><font color="#FF0000" size="2">*区分大小写</font></td>
</tr>
<tr>
<td colspan="2" valign="top" align="center"><asp:button ID="btnSubmit" runat="server" Text="验证" onclick="btnSubmit_click" />
<asp:label ID="ensonShow" runat="server" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

后端验证图片验证码并发送短信代码Default.aspx.vb

Imports System.Text
Imports System.Net
Imports System.IO
Imports System.Web
Imports System.Security.Cryptography.X509Certificates
Imports System.Net.Security
Partial Class _Default
    Inherits System.Web.UI.Page
    Sub btnSubmit_click(sender As Object, e As EventArgs)
        '判断输入的验证码与所给是否相同
        Dim strPhone = Textbox1.Text
        If txtValidateCode.Text = Session("VNum").ToString() Then
            Dim phoneRegex As Regex = New Regex("(^(13[0-9]|14[01456789]|15[0-3,5-9]|16[567]|17[01345678]|18[0-9]|19[189])\d{8}$)|(^0[12]\d{9}$)|(^0[3-9]\d{9}$)|(^0[3-9]\d{10}$)")
 
            If phoneRegex.IsMatch(strPhone) Then
                Dim url As String = "https://www.stongnet.com/sdkhttp/sendsms.aspx"
                Dim regCode As String = "101100-WEB-HUAX-761107"        ' 华兴软通注册码,请在这里填写您从客服那得到的注册码
                Dim regPasswod As String = "12345678"        ' 华兴软通注册码对应的密码,请在这里填写您从客服那得到的注册码
                Dim sourceAdd As String = Nothing        '子通道号(最长10位,可为空
                Dim phone As String = "15812345678"        '手机号码(最多1000个),多个用英文逗号(,)隔开,不可为空
 
                Dim signature As String = "【华兴】"        '签名
                Dim random As New Random()
                Dim content As String = "华兴软通$-_.+!*',^(αβ &@#%)验证码:" & (1000 + random.Next(9000)) & signature        '短信内容,请严格按照客服定义的模板生成短信内容,否则发送将失败
                content = HttpUtility.UrlEncode(content, Encoding.UTF8)        'content中含有空格,换行,中文等非ascii字符时,需要进行url编码,否则无法正确传输到服务器
                Dim param As String = "reg=" & regCode & "&pwd=" & regPasswod & "&sourceadd=" & sourceAdd & "&phone=" & phone & "&content=" & content
                Dim httpWebRequest As HttpWebRequest = TryCast(WebRequest.Create(url), HttpWebRequest)
                httpWebRequest.Method = "POST"        '指定允许数据发送的请求的一个协议方法
                httpWebRequest.ContentType = "application/x-www-form-urlencoded"        '设置 ContentType 属性设置为适当的值
                Dim data As Byte() = Encoding.UTF8.GetBytes(param)
                Using stream As Stream = httpWebRequest.GetRequestStream()            '写入数据
                    stream.Write(data, 0, data.Length)
                End Using
                Dim webResponse As WebResponse = TryCast(httpWebRequest.GetResponse(), HttpWebResponse)        '发起请求,得到返回对象
                Dim dataStream As Stream = webResponse.GetResponseStream()
                Dim reader As New StreamReader(dataStream, Encoding.UTF8)
                Dim returnStr As String = reader.ReadToEnd()
                ' Clean up the streams and the response.
                reader.Close()
                webResponse.Close()
                ensonShow.Text = returnStr
            Else
                ensonShow.Text = "请输入正确手机号"
            End If
        Else
           ensonShow.Text = "验证码不正确"
        End If
    End Sub
 
End Class

按照示例可使用客服提供的注册号密码进行手机号短信验证码的发送测试,根据接口返回码和文档按自己的要求做进一步的功能开发。

短信平台软件 短信群发平台 短信平台公司 群发短信公司 短信平台 短信平台软件 短信群发平台