微信公众平台消息有时候不处理问题追踪

 更新时间:2016年11月25日 17:24  点击:1687
下面本文章给各位整理了一篇关于微信公众平台消息有时候不处理问题追踪,希望此思路对各位朋友会带来帮助哦。

这几天我们的微信公众平台突然不处理用户消息,但是接口应答率是100%,但是还是会经常出现无法回复请求的信息,也就是是说明我么有接收到微信官方提供的数据,所以这边应答率是100%,昨天微信官方也发布了新的PHP SDK,发现sort在排序的时候需要设置第二个参数,以字符串来进行排序,这样就很清楚,微信又发送消息给我们,但是被我们的验证机制给拦截了,所以会造成这样的问题。

微信在升级SDK的时候也开放了微支付的接口申请,接口申请必须是服务号,而且是必须认证过的。O2O终于可以整套实现了。

WebQQ协议更新后,原登陆算法等信息改变,导致很多盆友无法正常登陆,本站发布了一些与WebQQ最新登陆协议相关的文章,有因为未发布Demo,一些盆友会加Q来问,是否适应最新的WebQQ,小编就做了一个小的Demo来供大家测试。

声明

1、本Demo做的比较简单,未对密码及验证码等对错做验证,只是做登陆演示。

2、QQ是个比较隐私的东西,那么请您用测试号登陆本软件,先小人后君子吧。

本站与最新WebQQ登陆协议相关文章

WebQQ二次登陆失败{“retcode”:103,”errmsg”:”"}

解决办法

重新抓了一次包,发现现在WebQQ将登陆加入SSL层也就是Https在第一次登陆的时候,返回的数据如下:

 代码如下 复制代码

ptuiCB('0','0','http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=你的QQ号&service=login&nodirect=0&ptsig=一串加密数据s_url=http%3a%2f%2fweb2.qq.com%2floginproxy.html%3flogin2qq%3d1%26webqq%5ftype%3d10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0','0','登录成功!', 'I');

上述数据中包含一个回调地址:

 代码如下 复制代码

<a href="http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin">http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin</a>=你的QQ号&service=login&nodirect=0&ptsig=一串加密数据s_url=http%3a%2f%2fweb2.qq.com%2floginproxy.html%3flogin2qq%3d1%26webqq%5ftype%3d10&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0

访问上面的地址(302跳转,注意Cookie的获取),获取到一个Cookie名为p_skey,将这个Cookie在二次登陆的时候,加入到Cookie中即可实现二次登陆。

WebQQ最新登陆协议

1、获取验证码

方法:Get

地址:

 代码如下 复制代码
https://ssl.ptlogin2.qq.com:443/check?uin=958736715&appid=1003903&js_ver=10041&js_type=0&login_sig=Mge3PexTk00li3ipMUlHCzouT0xU*8MU6YkkZsIUo8*zQKRTM2rwPUOFbhbGw1No&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html&r=0.9403657828909222

Cookie:提交无。返回ptvfsession或verifysession

2、第一次登陆

方法:Get

地址:

 代码如下 复制代码
https://ssl.ptlogin2.qq.com:443/login?u=【QQ号码】&p=【加密后的密码】&verifycode【验证码】&webqq_type=40&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D40&h=1&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=3-12-12775&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10041&login_sig=Mge3PexTk00li3ipMUlHCzouT0xU*8MU6YkkZsIUo8*zQKRTM2rwPUOFbhbGw1No

Cookie:提交ptvfsession或verifysession,返回pt2gguin、uin 、skey、ETK、superuin、superkey、supertoken 、ptisp、RK、ptuserinfo、ptcz 、ptcz、airkey、ptwebqq 。

3、第一次登陆成功后返回回调地址

方法:Get

地址:

 代码如下 复制代码
http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=【QQ号码】&service=login&nodirect=0&ptsig=tLfZcSFkHNP57Lg0tPtLM6XLh73XeghnEH3pTFyHCLY_&s_url=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D40&f_url=&ptlang=2052&ptredirect=100&aid=1003903&daid=164&j_later=0&low_login_hour=0&regmaster=0

Cookie:提交ptvfsession、verifysession、skey、ptcz:、ptwebqq、RK、superkey、supertoken。返回pt2gguin、uin、skey、p_uin、p_skey、pt4_token。

4、第二次登陆

方法:Post

地址:http://d.web2.qq.com/channel/login2

Cookie:提交ptvfsession、verifysession、skey、ptcz:、ptwebqq、RK、superkey、supertoken、p_skey、pt4_token、uin、p_uin、ptui_loginuin。

其他细节本文不再叙述,如果还有其他问题,请自行采取抓包软件,对WebQQ登陆进行抓包,无太大的技术含量,各位看官自行努力。

如果您参照上述两篇文章依然无法解决你的问题 了,那只有检查其它原因了。

Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机

网络广播地址计算方法:
(1)IP地址与子网掩码进行“位与”运算,得到网络地址
(2)子网掩码“取反”运算,然后与网络地址进行“位或”运算,得到广播地址

 代码如下 复制代码

//ip地址转换广播地址
private function ip2broadcast($ip,$mask){
 $ipSplit = explode('.',$ip);
 $maskSplit = explode('.',$mask);
 $broadcast = null;
 for ($i=0; $i < 4; $i++) {
  $ipBin = sprintf("%b",$ipSplit[$i]);
  while((8-strlen($ipBin))>0) $ipBin = "0".$ipBin;

  $maskBin = sprintf("%b",$maskSplit[$i]);
  while((8-strlen($maskBin))>0) $maskBin = "0".$maskBin;

  $broadcastBin = null;//www.111cn.net
  for ($j=0; $j < 8; $j++) {
   $broadcastBin .= (!intval(substr($maskBin, $j , 1))) |
      (intval(substr($ipBin, $j , 1)) & intval(substr($maskBin, $j , 1)));
  }

  if ($i>0) $broadcast .= ".";
  $broadcast .= bindec($broadcastBin);
 }
 return $broadcast;
}

 

以前我们写过很多利用curl模拟登录的,今天我来介绍两个例子都可以实现对方网站有验证码图片时由用户输入验证码之后再验证。


例子

读取远程的验证码利用框架加载到此页面然后手工输入

 

 代码如下 复制代码

<?php
/**
 * @author 追逐__something
 * @version $id
 */
define('SCRIPT_ROOT',dirname(__FILE__).'/');
$act = trim($_REQUEST['act']);
switch($act)
{
    case 'login':
        // 获取验证码
        $code = trim($_REQUEST['code']);
       
        // $loginParams为curl模拟登录时post的参数
        $loginParams['act'] = 'login';
        $loginParams['password'] = '111111';
        $loginParams['username'] = 'wlpadmin';
        $loginParams['vcode'] = $code;
       
        // $cookieFile 为加载验证码时保存的cookie文件名
        $cookieFile = SCRIPT_ROOT.'cookie.tmp';
       
        // $targetUrl curl 提交的目标地址 www.111cn.net
        $targetUrl = 'http://local.xx.com/admin/login.php';
       
        // 参数重置
        $content = curlLogin($targetUrl, $cookieFile, $loginParams);
        echo $content;
    break;
    case 'authcode':
        // Content-Type 验证码的图片类型
        header('Content-Type:image/png');
        showAuthcode('http://local.xx.com/admin/vcode.php?r=0.03192671708666017');
        exit;
    break;
}

/**
 * 模拟登录
 * @param string $url 提交到的地址
 * @param string $cookieFile 保存cookie的文件
 * @param string $loginParams 提交时要post的参数
 * @return string $content 返回的内容
 */
function curlLogin($url, $cookieFile, $loginParams)
{
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFile); //同时发送Cookie
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $loginParams); //提交查询信息
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

/**
 * 加载目标网站图片验证码
 * @param string $authcode_url 目标网站验证码地址
 */
function showAuthcode( $authcode_url )
{
    $cookieFile = SCRIPT_ROOT.'cookie.tmp';
    $ch = curl_init($authcode_url);
    curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFile); // 把返回来的cookie信息保存在文件中
    curl_exec($ch);
    curl_close($ch);
}
?>
<iframe src="?act=authcode" style='width: 100px; height:40px ' frameborder=0 ></iframe>
<form>
<input type="hidden" name="act" value="login">
<input type="text" name="code" />
<input type="submit" name="submit" >
</form>

例子

思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作

 

 代码如下 复制代码

//初始化变量
$cookie_file = "tmp.cookie";
$login_url = "http://xxx.com/logon.php";
$verify_code_url = "http://xxx.com/verifyCode.php";

echo "正在获取COOKIE...n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储
$contents = curl_exec($curl);
curl_close($curl);

echo "COOKIE获取完成,正在取验证码...n";
//取出验证码 www.111cn.net
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);

$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存n";
//停止运行20秒
sleep(20);

echo "休眠完成,开始取验证码...n";
$code = file_get_contents("code.txt");
echo "验证码成功取出:$coden";
echo "正在准备模拟登录...n";

$post = "username=maben&pwd=hahahaha&verifycode=$code";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);

//这一块根据自己抓包获取到的网站上的数据来做判断
if(substr_count($result,"登录成功")){
 echo "登录成功n";
}else{
 echo "登录失败n";
 exit;
}

//啦啦啦,开始做你想做的事吧。。。。。

下面我们利用正则函数把字符转换在url形式了,当然后面推荐的php自带的函数我们也可以尝试一下哦,这里就不介绍了。

英文:

 代码如下 复制代码

function tourl($str) {
  $str = preg_replace('/[^a-zA-Z0-9]+/', '-', $str);
  $str = trim($str, '-');
  return strtolower($str);
}

包含特殊字符:

 代码如下 复制代码

function strtourl($str) {
  $str = htmlentities($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/&([a-z]{1,2})(?:acute|lig|grave|ring|tilde|uml|cedil|caron);/i','1',$str);
  $str = html_entity_decode($str, ENT_QUOTES, "UTF-8");
  $str = preg_replace('/[^a-z0-9]+/i', '-', $str);
  return strtolower($str);
}

除了上面方法php提供了urlencode()、urldecode()、rawurlencode()、rawurldecode()函数了,利用它就可以直接转换了这个就不介绍了。

[!--infotagslink--]

相关文章

  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)

    批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • C#多线程中的异常处理操作示例

    这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
  • postgresql 中的时间处理小技巧(推荐)

    这篇文章主要介绍了postgresql 中的时间处理小技巧(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • Python同时处理多个异常的方法

    这篇文章主要介绍了Python同时处理多个异常的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-29
  • C#异常处理中try和catch语句及finally语句的用法示例

    这篇文章主要介绍了C#异常处理中try和catch语句及finally语句的用法示例,finally语句的使用涉及到了C#的垃圾回收特性,需要的朋友可以参考下...2020-06-25
  • python用moviepy对视频进行简单的处理

    这篇文章主要介绍了python如何用moviepy对视频进行简单的处理,帮助大家更好的利用python处理视频,感兴趣的朋友可以了解下...2021-03-11
  • C#异常处理详解

    这篇文章介绍了C#异常处理,有需要的朋友可以参考一下...2020-06-25
  • sql server日志处理不当造成的隐患详解

    这篇文章主要给大家介绍了关于sql server日志处理不当造成的隐患的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
  • Spring MVC 处理一个请求的流程

    Spring MVC是Spring系列框架中使用频率最高的部分。不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分。因此程序员一定要熟练掌握MVC部分。本篇博客简要分析Spring MVC处理一个请求的流程。...2021-02-06
  • go语言中的Carbon库时间处理技巧

    这篇文章主要介绍了go语言中的Carbon库时间处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-05
  • C++异常处理入门(try和catch)

    C++ 提供了异常机制,让我们能够捕获运行时错误,本文就详细的介绍了C++异常处理入门,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
  • C#事务处理(Execute Transaction)实例解析

    这篇文章主要介绍了C#事务处理(Execute Transaction)实例解析,对于理解和学习事务处理有一定的帮助,需要的朋友可以参考下...2020-06-25
  • php图像处理(缩放、剪裁、缩放、翻转、旋转、透明、锐化)

    本文章来给各同学总结了一些常用的图像处理函数,包括有缩放、剪裁、缩放、翻转、旋转、透明、锐化功能,大家可参考参考。 注意事项:如果要使用php gd处理我们需要...2016-11-25
  • Python编程OpenCV和Numpy图像处理库实现图片去水印

    这篇文章主要介绍了Python编程中如何实现图片去水印本文采用了OpenCV和Numpy的图像处理的方法来实现,文中附含详细示例代码,有需要的朋友可以借鉴参考下...2021-09-26
  • javascript表单处理具体实现代码(表单、链接、按钮)

    这篇文章主要介绍了javascript表单处理具体实现代码,包括各种表单、链接、按钮控件介绍,感兴趣的朋友可以参考一下...2016-05-09
  • JavaScript 事件流、事件处理程序及事件对象总结

    JS与HTML之间的交互通过事件实现。事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。可以使用监听器(或处理程序)来预定事件,以便事件发生时执行相应的代码。本文将介绍JS事件相关的基础知识。...2017-04-03
  • C++之异常处理详解

    C++中处理异常的过程是这样的:在执行程序发生异常,可以不在本函数中处理,而是抛出一个错误信息,把它传递给上一级的函数来解决,上一级解决不了,再传给其上一级,由其上一级处理...2020-04-25
  • C#中执行批处理文件(*.bat)的方法代码

    本文介绍一下在C#中执行批处理文件(*.bat)的方法。...2020-06-25