这段时间一直写个项目, 从切图到前端到后台都要搞定,真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;

  

  

curl 模拟登录微信公众平台带验证码的更多相关文章

  1. .Net HttpClient 模拟登录微信公众平台发送消息

    1.模拟登录 public WeiXinRetInfo ExecLogin(string name, string pass) { CookieContainer cc = new CookieCon ...

  2. 微信公众平台开发 微信JSSDK开发

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...

  3. 使用 Laravel 框架:成为微信公众平台开发者

    转: http://ninghao.net/blog/1441 作者:王皓发布于:2014-05-30 13:16更新于:2014-05-31 12:05 我们可以使用Laravel 框架为微信公众平 ...

  4. 【微信公众平台开发】微信JS-SDK开发,信公众平台js-sdk

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过)   2 ...

  5. 最新微信公众平台js sdk整合PHP版

    由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa1 ...

  6. 微信公众平台JSSDK开发

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引入 ...

  7. 微信公众平台开发(110) 微信连Wi-Fi

    关键字:微信公众平台 微信连Wi-Fi 微信 WiFi 硬件鉴权作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-wifi.html 微信连Wi- ...

  8. 微信公众平台Php版php开发(转)

    http://www.1990c.com/?p=932 近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的-  今天来分享一下开发经验~微信公众平台提供的接口很简单,先看看消息交互流程:  说 ...

  9. 微信公众平台PHP开发

    p=932" style="color: rgb(255, 153, 0); text-decoration: none;">微信公众平台PHP开发 2013.05 ...

随机推荐

  1. MYSQL中UNIX时间戳与日期的转换

    select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s'); select UNIX_TIMESTAMP('2016-06-04 01:03:05 ...

  2. linux mail 使用外部邮箱地址发邮件

    centos 61.系统yum安装的mailx会默认使用本地sendmail发送邮件,这样要求本地的机器必须安装和启动Sendmail服务,配置麻烦,而且会带来不必要的资源占用.通过修改配置文件可以使 ...

  3. BufferedReader 中的 readLine()

    BufferedReader中的readLine()方法,API解释如下: Reads a line of text. A line is considered to be terminated by ...

  4. IDL数组计算

    函数 作用 min 最小值 max 最大值 total 求和 stddev 标准差 mean 平均值  

  5. OC的封装、继承与多态

    面向对象有三大特征:封装.继承和多态. 一.封装 封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问.简而言之,信息隐藏,隐 ...

  6. Android7.0 新特性

    删除了三个隐式广播 1.监听网络变化的广播 CONNECTIVITY_ACTION,在Manifest.xml中注册的 不会受到,在前台运行的程序 registerReceiver()注册的广播可以接 ...

  7. 4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托

    MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 ...

  8. c#-基础:类的进阶

    类的概述: 类是一个能存储数据并执行代码的数据结构 数据成员:通常模拟该类所表示显示世界的事物特性 函数成员:执行代码.模拟显示世界事物的功能和操作 数据成员:字段,常量 函数成员执行代码:方法 运算 ...

  9. 分析一个类似于jquery的小框架

    在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , und ...

  10. HPUX 只取syslog.log当前三天的信息

    LOG_DAYS=1todays_date=`date +%m:%d:%Y`current_date=`echo $todays_date | sed 's/://g'`day=`echo $toda ...