这段时间一直写个项目, 从切图到前端到后台都要搞定,真tm累。 今天下午手残,不停用错误的密码去模拟登录微信公众平台,结果后来出现验证码,瞬间悲剧(菜鸟从来没搞过带验证码的)。

  研究了一下,发现其实很简单,直接把生成的二维码图片拉过来,让用户自己输入,再提交一遍表单即可。其实中间还是有些坑,比如生成验证码的时候,要把cookie保存下,登录的时候要带上这个cookie,要不然会总是提示需要验证码。

客户端:

 <body>
<form>
<p><input type="text" name="user" value="" />帐号</p>
<p><input type="password" name="pass" value="" />密码</p>
<div style="display:none">
<input type="text" name="code" />验证码
<img src="" id="imgcode" /><a href="javascript:;" id="changCode">换一张</a>
</div>
<input type="button" class="submit" value="绑定"/>
</form>
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script type="text/javascript">
$(function(){
$('.submit').on('click', function(){ var user = $('input[name=user]').val(),
pass = $('input[name=pass]').val(); var data = {
'user' : user,
'pass' : pass
}; if ( $('img').attr('src') != '' ) {
var code = $('input[name=code]').val();
data.code = code;
} $.post('wx-login.php', data, function(res){ var oRes = JSON.parse(res);
//console.log(oRes);
// -8 需要验证码
if ( oRes.base_resp.ret == '-8') {
$('img').attr('src','code.php?u='+user);
$('div').show();
} else if( oRes.base_resp.ret == 0 ){
alert('登录成功');
} else {
alert('登录失败');
}
}); }); $('#changCode').on('click', function(){
var user = $('input[name=user]').val();
$('img').attr('src','code.php?u='+user+'&s='+Math.random(1));
});
});
</script>
</body>

  服务端-验证码:

  code.php

 $username = $_GET['u'];
$url = "https://mp.weixin.qq.com/cgi-bin/verifycode?username={$username}&r=".time(); //必须绝对路径
$file = dirname(__FILE__).'/cookie/cookie_'.$username.'.txt'; $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt ($curl, CURLOPT_TIMEOUT, 10 );
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_COOKIEJAR, $file);
$res = curl_exec ($curl);
curl_close ( $curl );
header("Content-type:image/jpeg");
echo $res;

服务端-登录:

  wx-login.php

 $arr = array(
'username'=>$_POST['user'], //wx公众帐号
'pwd'=>md5($_POST['pass']), //wx公众帐号密码
'f'=>'json'
); if (isset($_POST['code'])) {
$arr['imgcode'] = $_POST['code'];
} $file = dirname(__FILE__).'/cookie/cookie_'.$arr['username'].'.txt'; $headers = array(
'User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36',
'Referer:https://mp.weixin.qq.com/',
); $curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://mp.weixin.qq.com/cgi-bin/login');
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 2 );
curl_setopt ($curl, CURLOPT_TIMEOUT, 10 );
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($arr));
curl_setopt($curl, CURLOPT_HTTPHEADER,$headers); if (!empty($arr['imgcode'])) {
curl_setopt($curl, CURLOPT_COOKIEFILE, $file);
} $result = curl_exec ($curl);
curl_close ( $curl );
echo $result;

  

  

最新文章

  1. stl循环删除
  2. Jquery,jquery-cookie.js 做的点击记住用户名和密码!
  3. 移动端自动化环境搭建-Appium Client的安装和AppiumLibrary库的安装
  4. python smtplib发送邮件遇到的认证问题
  5. POJO, DTO, VO, JavaBean的区别
  6. maven 错误解决办法集
  7. C#中DataTable排序、检索、合并等操作实例
  8. 权限管理AppOpsManager
  9. mysql防止重复插入记录方法总结
  10. 欧拉计划之题目9:找出唯一的满足a + b + c = 1000的毕达哥拉斯三元组{a, b, c}
  11. 有关基于模型的设计(MBD)一些概念和理解(zz)
  12. 【转】Asp.Net MVC3 简单入门详解过滤器Filter
  13. Quartz Scheduler 开发指南(1)
  14. Driver Signing changes in Windows 10
  15. level.go
  16. Linux下执行Java程序报错
  17. @Value取不到值的原因(引用application.properties中自定义的值)
  18. Lucas定理学习笔记(没有ex_lucas)
  19. 【C++ Primer 第13章】5. 动态内存管理类
  20. 随手记录一下 Vue 下来框搜索 select2 封装成vue

热门文章

  1. jsonp与JAVA的配合使用
  2. Xformode的坑
  3. 英语学习app分析
  4. (分享)视频压缩Free Video Compressor 汉化版/中文版【全网唯一】
  5. C# 软件绑定QQ群类开源放出
  6. WebService 用法
  7. 如何将ASP.NET MVC所有参数均自动设置为默认
  8. TCP、UDP、IP 协议分析
  9. C#图片上传服务器缩放存储功能
  10. Flume整合Spark Streaming