asp.net core 腾讯验证码的接入

asp.net core 腾讯验证码的接入

Intro

之前使用的验证码服务是用的极验验证,而且是比较旧的,好久之前接入的,而且验证码服务依赖 Session,有点不太灵活,后来发现腾讯也有验证码服务,而且支持小程序,并且是唯一支持小程序的验证码。。(垄断么。。)

而且相比之下,腾讯验证码不需要依赖 Session,集成起来也比较方便,于是就用了腾讯验证码,详细参考:https://007.qq.com/product.html?ADTAG=index.block

验证流程

640?wx_fmt=png

640?wx_fmt=png

服务器端接入

using System.ComponentModel.DataAnnotations;	
using System.Net.Http;	
using System.Threading.Tasks;	
using Microsoft.Extensions.Logging;	
using Microsoft.Extensions.Options;	
using Newtonsoft.Json;	
using WeihanLi.Extensions;	
namespace ActivityReservation.Common	
{	public class TencentCaptchaOptions	{	/// <summary>	/// 客户端AppId	/// </summary>	[Required]	public string AppId { get; set; }	/// <summary>	/// App Secret Key	/// </summary>	[Required]	public string AppSecret { get; set; }	}	public class TencentCaptchaRequest	{	/// <summary>	/// 验证码客户端验证回调的票据	/// </summary>	public string Ticket { get; set; }	/// <summary>	/// 验证码客户端验证回调的随机串	/// </summary>	public string Nonce { get; set; }	/// <summary>	/// 提交验证的用户的IP地址(eg: 10.127.10.2)	/// </summary>	public string UserIP { get; set; }	}	public class TencentCaptchaHelper	{	private class TencentCaptchaResponse	{	/// <summary>	/// 1:验证成功,0:验证失败,100:AppSecretKey参数校验错误	/// </summary>	[JsonProperty("response")]	public int Code { get; set; }	/// <summary>	/// 恶意等级 [0, 100]	/// </summary>	[JsonProperty("evil_level")]	public string EvilLevel { get; set; }	/// <summary>	/// 错误信息	/// </summary>	[JsonProperty("err_msg")]	public string ErrorMsg { get; set; }	}	private const string TencentCaptchaVerifyUrl = "https://ssl.captcha.qq.com/ticket/verify";	private readonly TencentCaptchaOptions _captchaOptions;	private readonly ILogger _logger;	private readonly HttpClient _httpClient;	public TencentCaptchaHelper(	IOptions<TencentCaptchaOptions> option,	ILogger<TencentCaptchaHelper> logger,	HttpClient httpClient)	{	_captchaOptions = option.Value;	_logger = logger;	_httpClient = httpClient;	}	public async Task<bool> IsValidRequestAsync(TencentCaptchaRequest request)	{	// 参考文档:https://007.qq.com/captcha/#/gettingStart	var response = await _httpClient.GetAsync(	$"{TencentCaptchaVerifyUrl}?aid={_captchaOptions.AppId}&AppSecretKey={_captchaOptions.AppSecret}&Ticket={request.Ticket}&Randstr={request.Nonce}&UserIP={request.UserIP}");	var responseText = await response.Content.ReadAsStringAsync();	if (responseText.IsNotNullOrEmpty())	{	_logger.Debug($"Tencent captcha verify response:{responseText}");	var result = responseText.JsonToType<TencentCaptchaResponse>();	if (result.Code == 1)	{	return true;	}	}	return false;	}	}	
}

Startup 配置:

services.AddHttpClient<TencentCaptchaHelper>(client => client.Timeout = TimeSpan.FromSeconds(3))	.ConfigurePrimaryHttpMessageHandler(() => new NoProxyHttpClientHandler());	
services.AddTencentCaptchaHelper(options =>	
{	options.AppId = Configuration["Tencent:Captcha:AppId"];	options.AppSecret = Configuration["Tencent:Captcha:AppSecret"];	
});

前端接入

前端接入这里不作多介绍了,接入方式多种多样,具体可以参考官方文档:https://cloud.tencent.com/document/product/1110/36841

下面的代码是 angular spa 在前端接入的核心代码

  private loadCaptcha(): void {	var tCaptcha = document.getElementById("tCaptcha");	if (tCaptcha) {	this.InitCaptcha();	return;	}	let script = <any>document.createElement('script');	script.id = "tCaptcha";	script.type = 'text/javascript';	script.src = "https://ssl.captcha.qq.com/TCaptcha.js"	if (script.readyState) {  //IE	script.onreadystatechange = () => {	if (script.readyState === "loaded" || script.readyState === "complete") {	this.InitCaptcha();	}	};	} else {  //Others	script.onload = () => {	this.InitCaptcha();	};	}	document.getElementsByTagName('body')[0].appendChild(script);	}	private InitCaptcha(): void {	let captchaDom = document.getElementById('TencentCaptcha1');	if (!captchaDom) {	return;	}	this.tencentRecaptcha = new TencentCaptcha(	captchaDom, appId, (res) => {	this.captchaValid = false;	console.log(res);	// res(用户主动关闭验证码)= {ret: 2, ticket: null}	// res(验证成功) = {ret: 0, ticket: "String", randstr: "String"}	if (res.ret === 0) {	this.captchaInfo.nonce = res.randstr;	this.captchaInfo.ticket = res.ticket;	this.captchaValid = true;	this.tencentRecaptcha.destroy();	let button = <HTMLElement>document.getElementById("btnSubmit");	button.click();	}	}	);	console.log(`captcha inited`);	this.tencentRecaptcha.show();	}

使用效果:

640?wx_fmt=png

老版网站接入效果:

640?wx_fmt=png

Reference

  • https://github.com/WeihanLi/ActivityReservation

  • https://reservation.weihanli.xyz/Home/Reservate

  • https://reservation-client.weihanli.xyz/reservation/new

  • https://cloud.tencent.com/document/product/1110/36841

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg加环境变量

转自&#xff1a;http://blog.csdn.net/leixiaohua1020/article/details/19016469 FFMPEG是命令行工具&#xff0c;因此使用起来多少还是会有些不方便。在这记录两点方便使用FFMPEG的方法&#xff1a; 1.任何目录下都可以使用FFMPEG 问题描述&#xff1a;需要转码&#xff08;播…

.NET Core 微信公众号小程序6种获取UnionID方法,你知道哪几种?

前言获取UnionID是开发微信公众号/小程序中很有必要的一个环节&#xff0c;特别是针对一个公司拥有多个公众号小程序而推出的机制&#xff0c;实现打通账户一体化&#xff0c;用UnionID来区分多平台的唯一性。官方的解释&#xff1a;如果开发者拥有多个移动应用、网站应用、和公…

.NET LINQ分析AWS ELB日志避免996

前言小明是个单纯的 .NET开发&#xff0c;一天大哥叫住他&#xff0c;安排了一项任务&#xff1a;“小明&#xff0c;分析一下我们 超牛逼网站上个月的所有 AWS ELB流量日志&#xff0c;这些日志保存在 AWS S3上&#xff0c;你分析下&#xff0c;看哪个 API的响应时间中位数最长…

网络摄像头实时获取信息

转自&#xff1a;http://blog.csdn.net/yong_hen/article/details/42460387#quote 转自&#xff1a;http://blog.csdn.net/leo2007608/article/details/9885219 代码&#xff1a; openCV版本&#xff1a;2.4.10. 平台&#xff1a;win7 [cpp] view plaincopy #include <op…

[ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式

IoC主要体现了这样一种设计思想&#xff1a;通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用&#xff0c;并按照“好莱坞法则”实现应用程序的代码与框架之间的交互。我们可以采用若干设计模式以不同的方式实现IoC&#xff0c;比如我们在前面介绍的模板方法…

微软100题第5题

转载自&#xff1a;http://blog.csdn.net/littlestream9527/article/details/8104731 http://blog.csdn.net/v_july_v/article/details/6370650 http://blog.csdn.net/insistgogo/article/details/7689297 下面&#xff0c;我试图用最清晰易懂&#xff0c;最易令人理解的思维…

北京Dotnet分享会 || 精英论坛第三期

编者按&#xff1a;没有一成不变的定律&#xff0c;没有长久不衰的流行&#xff0c;更没有一劳永逸的侥幸&#xff0c;只有自己刻苦努力、脚踏实地、兢兢业业的学习和工作&#xff0c;才会成为这个社会永远不会被淘汰的中流砥柱。一、昨夜西风凋碧树昨夜西风凋碧树&#xff0c;…

微软开源微服务运行时Dapr,赋能云原生应用开发

Dapr 是一个可移植的、由事件驱动的 Serverless 运行时&#xff0c;用于跨云和边缘构建分布式应用程序。10月9日&#xff0c;正式以 MIT 协议开源。Dapr 使开发人员能够轻松地构建弹性、无状态和有状态的微服务&#xff0c;让它们在云和边缘位置上运行&#xff0c;并包含了开发…

最大堆和最小堆

堆和栈的区别&#xff1a;一、堆栈空间分配区别&#xff1a;1、栈&#xff08;操作系统&#xff09;&#xff1a;由操作系统自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈&#xff1b;2、堆&#xff08;操作系统&…

认知的高度 = 人生的高度

大家好&#xff0c;我是Z哥。我们每个人&#xff0c;每天要和很多不同的人打交道。我相信下面的场景每个程序员都有遇到过&#xff0c;业务方在某个模块下新提出了一个功能&#xff0c;但是你希望做新功能之前先把这个模块的低质量代码重构一下。但是&#xff0c;不管你怎么摆事…

VSCode开发.NETCore项目入门(1)设置中文语言环境

安装VSCode最新地址&#xff1a;https://code.visualstudio.com/&#xff0c;下载后安装即可配置语言环境打开安装好的VSCode软件&#xff0c;可以看到刚刚安装的VSCode软件默认使用的是英文语言环境&#xff0c;如下图&#xff1a;使用快捷键【CtrlShiftP】来配置&#xff0c;…

微软100题第11题

参照&#xff1a;http://blog.csdn.net/caryaliu/article/details/8107089 参照&#xff1a;http://blog.csdn.net/lalor/article/details/7626678 把二叉树看成一个图&#xff0c;父子节点之间的连线看成是双向的&#xff0c;我们姑且定义"距离"为两个节点之间的个…

.NET Core 3.0】框架之十三 || 部署攻略

本文有配套视频&#xff1a;https://www.bilibili.com/video/av58096866/?p9一、部署1、WIN_独立部署感谢群里&#xff08;白云&#xff09;小伙伴&#xff0c;博主 小淋科技 提出的方案(需要 netcore2.1 )&#xff0c;我竟然忽略了&#xff0c;该打该打&#xff0c;官档都读…

Python import以及os模块

转自&#xff1a;http://jianpx.iteye.com/blog/486466 http://blog.chinaunix.net/uid-27838438-id-4087978.html Import: 1. import 实际上是python虚拟机把当前的globals()和locals()传进__builtins__.__import__内置函数了&#xff0c;所以实际上干活的是那个__import__函…

.Net Core3.0 配置Configuration

准备.NET core和.NET项目配置上有了很大的改变&#xff0c;支持的也更加丰富了比如命令行&#xff0c;环境变量&#xff0c;内存中.NET对象&#xff0c;设置文件等等。.NET项目我们常常把配置信息放到webConfig 或者appConfig中。配置相关的源码https://github.com/aspnet/Exte…

asp.net core 3.0 中使用 swagger

asp.net core 3.0 中使用 swaggerIntro上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用&#xff0c;那个项目的 api 比较简单&#xff0c;都是匿名接口不涉及到认证以及 api 版本控制&#xff0c;最近把另外一个 api 项目升级到了 3.0&#xff0c;还是遇到了一些…

由微软100题“求和不用for while”引出的static类成员的知识

转自&#xff1a;http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html C类中谈到static,我们可以在类中定义static成员&#xff0c;static成员函数&#xff01;Cprimer里面讲过&#xff1a;static成员它不像普通的数据成员&#xff0c;static数据成员独立于该类的任意…

MCN是啥?了解一下这5个互联网热词

骗子刷量&#xff0c;黑吃黑半斤八两前几天一件事火爆了互联网圈&#xff0c;一场搞笑的骗局&#xff0c;一场蜂群传媒导演的“僵尸舞台剧”&#xff1a;一条一夜爆红的视频 流量却为0&#xff01;。一个电商商家卖产品有投放需求&#xff0c;找到了微博上一家 MCN 机构的一个女…

为什么我不建议你去外包公司?

前言在我离开上家公司之前&#xff0c;我的直属领导找我聊了一番。除了问候我有没有找好下家之外&#xff0c;还千叮咛万嘱咐我千万不要去外包公司&#xff0c;否则会在简历上留下无法磨灭的污点。当时的我对于外包公司的了解并不深&#xff0c;只是道听途说外包公司很坑&#…

友浩达优选上新,原生态农产品,买得安心,吃得放心

大闸蟹还在热卖&#xff0c;需要的同学可以访问 各位一直支持队长的朋友们友浩达优选上新了本着为大家推荐好东西的想法商城里上架的商品都是队长亲自挑选有质量保证的口碑好商品这次&#xff0c;来看看队长又给大家带了哪些好东西本次上新全是各地优选原生态农产品食品优质、安…