根据上图所示,我们需要准备的代码不是单一的,而是好几个配合的。代码有:ajax长连接的js代码、ajax长连接数据判断代码、微信公众号api配置、微信二维码生成代码、数据库处理代码等。

效果就如http://ce.67zixue.com

要实现这功能需要用到六个文件分别处理数据,和一个sql数据库

文件分别有:index.php,wxqr.php,send.php,weixin.php,config.php,wxlogin.php

数据库:67zixue_ce.sql


首页当然就是index.php

<?php
//获取二维码的ticket,并且定义页面唯一性的login_token
include('wxqr.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
<h1>用微信扫我登录</h1>
<img width="200px" src="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=<?=$ticket?>" />
<!--https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket= 就可以获取到二维码了-->
<p id="msg"></p>
<script>
//默认启动
$(document).ready(function(){sendajax();});//ajax长连接函数,是使用jQuery的js插件
function sendajax(){$.ajax({      type:"POST",        //ajax发送的形式为postdataType:"json",  //ajax发送的格式为jsonurl:"send.php",       //ajax发送到send.php文件timeout:80000,       //ajax请求超时时间80秒      data:{time:"80",token:"<?=$login_token?>"}, //ajax的提交的参数,time是长连接世界,token是当前页面的唯一tokensuccess:function(data,textStatus){      //成功接收ajax反馈if(data.success=="1"){//成功反馈data.success=1扫描成功$("#msg").append("[你扫我了]"+data.text+"<br>"); alert('你扫我了~刷新一下就好了');sendajax();    }      //未从服务器得到数据,继续查询if(data.success=="0"){      //成功反馈data.success=0扫描失败//$("#msg").append("[还没扫我]<br>");      sendajax();   }      },      //Ajax请求超时,继续查询      error:function(XMLHttpRequest,textStatus,errorThrown){      if(textStatus=="timeout"){      //$("#msg").append("[居然还不扫我]<br>");      sendajax();      }      }      });
}
</script>
</body>
</html>

微信二维码生成文件wxqr.php

<?phpinclude('config.php'); //加载配置文件$login_token = rand(1,100000); //随机定义页面的唯一性的登录login_token$ticket_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$token}";//使用配置的$token组合成为获得ticket_url的链接$ticket_data = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id":'.$login_token.'}}}';//使用随机定义的唯一性的登录login_token制作微信带参数二维码//参考网站http://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html/*POST的代码和参数,网站抄回来的,不解析*/$ch = curl_init();curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_URL,$ticket_url);curl_setopt($ch, CURLOPT_POSTFIELDS, $ticket_data);$ticket_json = curl_exec($ch);/*POST的代码和参数,不解析*/$ticket_array = json_decode($ticket_json,true); //json转码回数组$ticket = $ticket_array['ticket'];    //获取二维码的ticket

微信服务器处理代码weixin.php

<?php
/*** 微信服务器代码处理*///define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
// $wechatObj->valid();
$wechatObj->responseMsg();class wechatCallbackapiTest
{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//默认处理代码if (!empty($postStr)){libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$eventkey = $postObj->EventKey;$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";             $msgType = "text";/*组装反馈的内容*/$login_url = "http://ce.67zixue.com/wxlogin.php?login_token=$eventkey&user=$fromUsername";   //$eventkey就是带参数的二维码扫描后反馈的login_token//参考网站http://mp.weixin.qq.com/wiki/2/5baf56ce4947d35003b86a9805634b1e.html#.E6.89.AB.E6.8F.8F.E5.B8.A6.E5.8F.82.E6.95.B0.E4.BA.8C.E7.BB.B4.E7.A0.81.E4.BA.8B.E4.BB.B6$contentStr = "<a href='".$login_url."'>点击登录</a>";//html组装,用a标签,不多说/*组装反馈的内容*/$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}
}?>

微信反馈的页面wxlogin.php

<?php
/*微信反馈登录页面*/
include('config.php');
$token = $_GET['login_token'];
//获得url中的login_token
$result = mysql_query("INSERT INTO ajax (`token`) values ({$token})");
//查找数据库中是否有对应的token
?>
<h1>登录成功</h1>

最后就是我们的配置文件,config.php 进行各种数据配置的配置

<?php/*数据库配置*/$servername = "***"; $username = "***";$password = "***";$dbdatabase = "67zixue_ce";$db_connect = mysql_connect($servername,$username,$password);$res = mysql_select_db($dbdatabase,$db_connect);/*微信参数 token*/$appID = "***";$appsecret = "***";/*生成微信当前的token,用于生成二维码*//*因为token每天有次数和时间限制,因此需要制作数据库进行记录,以便token多次使用*//*参考网站http://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html*/$now_time = time();$token_result = mysql_query("SELECT * FROM token ORDER BY time");$token_info = mysql_fetch_row($token_result);$token_time = $token_info[2];//判断获取时间与当前时间if(($now_time - $token_time) < 7200){$token = $token_info[1];}else{//以get形式提交获取数据$token_url= "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appID}&secret={$appsecret}";$token_json = file_get_contents($token_url);$token_array = json_decode($token_json,true);$token = $token_array['access_token'];$result = mysql_query("INSERT INTO token (`token`,`time`) values ('{$token}','{$now_time}')");}

最后就是sql文件了,67zixue_ce.sql

-- phpMyAdmin SQL Dump
-- version 3.3.7
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2015 年 05 月 04 日 12:33
-- 服务器版本: 5.5.36
-- PHP 版本: 5.2.17p1SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;--
-- 数据库: `67zixue_ce`
---- ----------------------------------------------------------
-- 表的结构 `ajax`
--CREATE TABLE IF NOT EXISTS `ajax` (`id` int(11) NOT NULL AUTO_INCREMENT,`token` varchar(255) DEFAULT NULL,`ticket` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=30 ;-- ----------------------------------------------------------
-- 表的结构 `token`
--CREATE TABLE IF NOT EXISTS `token` (`id` int(11) NOT NULL AUTO_INCREMENT,`token` varchar(128) DEFAULT NULL,`time` varchar(32) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=179 ;

代码呢~留个言~

点我下载

那个微信的配置如下图,仅供参考

转自67自学网

微信登录58同城代码相关推荐

  1. 在哪里能收到python实例代码-python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移 ...

  2. python可以爬取58同城代码_爬取58同城—字体反爬

    我爬取的是58同城北京租房的索引页. url:https://bj.58.com/chuzu/?PGTID=0d100000-0000-1e00-4039-99b26a4fedeb&Click ...

  3. 微信登录界面安卓代码_【雷电说明书】安卓模拟器微信登录闪退,转圈,停止运行解决方法...

    雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...

  4. 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法

    雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...

  5. 微信登录界面安卓代码_「微信多开神器」一键安排你的所有微信

    很多人都有两个微信号,一个用于工作,和同事老板打交道.一个用于生活,时不常发发牢骚. 现在的安卓手机上大多自带微信双开的功能,很方便.但电脑上如何同时登陆两个微信呢? 一.使用bat文件,无限制多开微 ...

  6. 使用 HtmlUnit 操作网页(登录58同城)

    1.导入jar包 htmlunit-2.35.0-OSGi.jar Ps:之前研究了网页的电脑端登录,发现 btn.click() 执行无效,查看众多资料未果后,突然想起还有h5页面,套入一看,完全o ...

  7. java 模拟登录58同城_Java 模拟58登录(二) 实现

    实现 流程 根据之前的分析可以得出58登录的大致流程如下发送Get请求(data?), 获取 token 发送Get请求(getcode?), 请求发送手机验证码, 同时获得一个tokencode 发 ...

  8. java 模拟登录58同城,Java项目实战之同城信息网站(类似58同城)开发

    getIntHeader(Stringname) 示例 Go语言结构体字面量 结构体类型的值可以通过结构体字面量来设置,即通过设置结构体的成员变量来设置. typePointstruct{X,Yint ...

  9. python可以爬取58同城代码_【Python爬虫】:爬取58同城二手房的全部房地产标题...

    北街家园七区 双阳台大两居 看楼有锁匙 相邻卖场,小区业主真诚售卖,房屋十分整洁,刚性需求 (新上!急卖)百环家园高层住宅观景平台大两居 次序分离出来 双入户花园 海淀区幸福里~北清路旁边~ 智能化精 ...

最新文章

  1. 【边缘计算】对边缘计算的理解与思考
  2. OpenYurt v0.4.0 新特性发布:高效地管理边缘存储资源
  3. Error:Kotlin: Module was compiled with an incompatible version of Kotlin
  4. Java8的产品周期_java8的时间和`Date`的对比
  5. 十年维护专家的“秘籍
  6. K8S 搭建 nacos 1.4.1 集群(MySQL 8.0)
  7. 【Scratch案例教学】scratch旋转风车 ​​​​scratch编程案例教学 scratch创意编程 少儿编程教案
  8. esp-idf的内存管理——tlsf算法
  9. 分享一下“rmvb转avi“的操作技巧,3步搞定
  10. 批量检测支付宝是否开通
  11. 计算机桌面上任务栏在哪里,电脑桌面上的任务栏不见了怎么办
  12. Linux应用-加密和安全
  13. 1997年世界编程大赛一等奖作品(分享)
  14. see into/see off/seek to等动词词组
  15. 思科网络设备常用命令
  16. CATIA P3 V5-6R2018 软件下载
  17. 挂载ISO镜像文件作为本地yum源
  18. UI设计师主要做什么 工作内容大致有哪些
  19. Java:利用接口实现打印机案例(墨盒有彩色和黑白色,纸张有A4纸和B5纸)
  20. CSS(二)文字样式

热门文章

  1. jdk eclipse SDK下载安装及配置教程
  2. KNN中的k如何选择?
  3. 计算GMAC和GFLOPS
  4. 【720科技SpringMVC】第五次课:Converter 和 Formatter
  5. 演讲稿丨史忠植 司马贺的人工智能创新之路
  6. css通过计算得出width
  7. app 显示一张靓女图片
  8. 计算机毕业设计ssm基于java的酒店管理系统tpk08系统+程序+源码+lw+远程部署
  9. 毕业设计 单片机自动晾衣架设计与实现(源码+硬件+论文)
  10. 面向对象编程Object-Oriented Programming(oop)