前言
之前写过关于微信公众号验证码功能的插件,最近发现也可以对其进行改进一下,当然我实际并没有对这个插件进行改动,只是说下看下法的
想法
目前的公众号验证码验证功能是,网页端留二维码,用户扫码关注,然后回复制定关键词,比如:验证码,之类,然后获取随机字符,然后将随机字符填写到网页中,页面对其进行验证,如果OK就显示内容或者其他操作。
今天准备换个方式,流程还是先显示二维码,然后需要用户点击生成随机字符如:sd345 显示在网页页面中,需要用户将这个字符发送到微信公众号里面,如果在规定时间内,微信公众号受到了这个验证码,那么认定验证通过,进行下一个操作。
实现代码
今天并没有准备做这个,只是简单梳理下代码。
首先是生成一个随机字符,可以把很多元素加进去,日期,时间,文章链接,用户浏览器UA,用户IP,一起打包MD5加密
在显示短代码的地方使用一个按钮,点击之后加载一个随机验证码出来
//生成微信验证码 function wx_captcha() { date_default_timezone_set('Asia/Shanghai'); $min = floor(date("i") / 5); $day = date("d"); $day = ltrim($day, 0); $url = get_permalink(); $wx_token = trim('xxxxoooootoken');/*微信token*/ $ua = $_SERVER['HTTP_USER_AGENT']; $ip = $_SERVER['HTTP_CLIENT_IP']; $captcha = sha1($min . $url . $wx_token.$ua.$ip); $captcha = substr($captcha, $day, 6); return $captcha; } //生成验证码的短代码 function wx_captcha_gen_btn() { return '<a id="wx_captcha_gen_btn" href="javascript:;" data-action="wx_captcha_gen" class="cm-btn primary wx_captcha_gen_btn">点击加载验证码</a>';; } add_shortcode('wx_captcha_btn', 'wx_captcha_gen_btn'); //接受ajajx信息 function wx_captcha_gen() { if (isset($_POST['action']) && $_POST['action'] == 'wx_captcha_gen') { exit(wx_captcha()); } else { exit('400'); } } add_action('wp_ajax_wx_captcha_gen', 'wx_captcha_gen'); add_action('wp_ajax_nopriv_wx_captcha_gen', 'wx_captcha_gen');
在js代码里面做一个ajax生成验证码
$("#wx_captcha_gen_btn").click(function() { var ajax_data = { action: $("#wx_captcha_gen_btn").data("action") }; $.post(ajaxurl, ajax_data,function(b){ b = $.trim(b); //登陆信息 if (b !== '400' && b == '200') { $('#wx_captcha_gen_btn').after(b);//插入验证码字符 $.post(ajaxurl, 'checkmp',function(c){//开始检查公众号是否受到这个验证码 c = $.trim(c); //登陆信息 if (c !== '400' && c == '200') {//如果受到信息 $load_content();//加载被隐藏的内容 } else { alert("发生错误"); } }); } else { alert("发生错误"); } }); });
上面的代码只是大概,不要当真,具体实现还要再深入的。
梳理下
1,用户打开页面
2,用户点击了加载验证码的按钮
3,加载验证码按钮发起ajax,后台受到信息生成验证码并显示在前台页面
4,验证码显示后发起另一个ajax,轮询微信公众号是否受到上面生成的验证码,为了性能考虑,设置轮询次数上限,到时候还没好认定失败
5,微信公众号收到验证码并验证OK,开始显示被隐藏的内容
2,用户点击了加载验证码的按钮
3,加载验证码按钮发起ajax,后台受到信息生成验证码并显示在前台页面
4,验证码显示后发起另一个ajax,轮询微信公众号是否受到上面生成的验证码,为了性能考虑,设置轮询次数上限,到时候还没好认定失败
5,微信公众号收到验证码并验证OK,开始显示被隐藏的内容
-- 完 --
麻雀虽小五脏俱全
博主之前那个插件在 公众号回复一直提示
“咋公众号回复 提示该公众号提供的服务出现故障请稍后再试”
代码无法下载,在gitee私信你了,方便时间处理下麻烦了。
技术请教下,插件看有缓存,默认缓存时间是多久技术有限没有找到代码修改的地方,谢谢了。