亲测通过

1,pc端生成带有当前会话的sessionid的url(通过微信来扫描)

2,扫描后,微信浏览器将访问url,将微信浏览器中的sessionid改成通过url传过来的session(pc端),然后引导用户进入微信网页授权地址,参考 http://mp.weixin.qq.com/wiki/9/01f711493b5a02f24b04365ac5d8fd95.html

3,在微信浏览器中得到openid,并存入session

        private String sid;
private String state;
@Action("weixinloginerweima")
public void weixinloginerweima() throws Exception{
if (sid==null&&state==null) {
write("sid参数错误");
return;
}
if (sid==null) {
sid=state;
}
String appid = "wxXXXXXXXXXX";
String app_secret = "XXXXXXXXXXXXXX";
cookie("JSESSIONID", sid,null);
if (!sid.equals(session.getId())||code==null) {
String path = request.getContextPath();
String getWebUrl= "http://"+request.getServerName()+("/".equals(path)?"":path);
String localurl = getWebUrl+"/hindex/weixinloginerweima";
String weixinurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+URLEncoder.encode(localurl, "utf8")+"&response_type=code&scope=snsapi_base&state="+sid+"#wechat_redirect";
response.sendRedirect(weixinurl);
}else{
write(code);
Map<String, String> param = new HashMap<>();
param.put("appid", appid);
param.put("secret", app_secret);
param.put("code", code);
param.put("grant_type", "authorization_code");
JSONObject jsonObject = HttpUtil.get("https://api.weixin.qq.com/sns/oauth2/access_token", param );
String weixinid = jsonObject.getString("openid");
if (weixinid==null) {
write(jsonObject.toJSONString());
return;
} Map<String, Object> param1 = new HashMap<>(); param1.put("weixinid", weixinid);
List<User> users =easyService.find(User.class, param1 , null, null);
if (users!=null&&users.size()>0) {
session.setAttribute("user", users.get(0));
response.sendRedirect(getWebUrl()+"/hindex/weixinlogin?sta=1");
}else{
session.setAttribute("weixinid", weixinid);
response.sendRedirect(getWebUrl()+"/hindex/weixinlogin?sta=2");//在微信上提示在pc端绑定账号
} }

  

4,在pc端,用ajax检测session是否已有openid,如果有,则进行,绑定或者注册新用户处理

@Action("checkweixinid")
public void checkweixinid() {
Object object = session.getAttribute("weixinid");
if (object==null) {
write("2");
}else{
write("1");
}
}

  

<a href="javascript:;" style="position:relative;" onclick='toWeiXinLogin()'>
<span id="weixinloginerweima" style="left:10px;display:none;position: absolute; height: 200px; width: 200px; top: 24px; z-index: 88;"></span> <img src="weixinlogin.png"/>
</a>

  

var erweima = false;
function toWeiXinLogin(){
if(erweima===false){
erweima = true;
$.getJSON("${ctx}/hindex/getweixinurl",function(data){
var qrcode = new QRCode(document.getElementById("weixinloginerweima"), {
width : 200,
height : 200
});
qrcode.makeCode(data.url);
weixinloginerweimashow();
});
}else{
weixinloginerweimashow();
}
}
function checkweixinid(){
$.ajax({
"url":"${ctx}/hindex/checkweixinid",
"success":function(data){
if(data==1){
location.href="${ctx}/hindex/bangding";
}else{
var display = $("#weixinloginerweima").css("display");
if(display=="none"){ }else{
setTimeout(checkweixinid,3000);
} } }
});
}
function weixinloginerweimashow(){
var display = $("#weixinloginerweima").css("display");
if(display=="none"){
$("#weixinloginerweima").show();
setTimeout(checkweixinid,3000);
}else{
$("#weixinloginerweima").hide();
}
}

  

java网站,修改cookie中的jsessionid可改变会话的session,在地址后面加过;jsession=sessionid,未成功

php中,可以直接调用session_id($sessionid)

微信号

源文:http://www.cnblogs.com/yanglingyun/p/5032381.html

微信公众平台实现pc端网站登录的更多相关文章

  1. 微信授权登录-微信公众号和PC端网站

    https://blog.csdn.net/qq_34664239/article/details/79107529 一.微信公众号授权登录——微信公众平台 微信授权登录,并调用后台接口,获取用户信息 ...

  2. 微信公众号手机端PC端多客服系统

    最近很多客户反应没有专门的客服坐在电脑面前,接收回复客户的问题:不能及时回复客户 咨询的问题,现在我们已经为此帮您解决烦恼!! 支持PC与手机端接收微信客户咨询与回复客户,让您随时随地及时回复客户咨询 ...

  3. PHP微信公众平台oauth2.0网页授权登录类的封装demo

    一.微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:用户同意授权,获取code 第二步:通过code换取网页授权access_token 第三步:拉取用户信息(需scope为 ...

  4. Java微信公众平台开发(十三)--微信JSSDK中Config配置

    转自:http://www.cuiyongzhi.com/post/57.html 前端开发工程师和关注前端开发的开发者们在2015年中肯定被腾讯的JSSDk引爆过,搞APP的.搞前端的甚至是是搞后端 ...

  5. Java微信公众平台开发(十一)--微信JSSDK中Config配置

    JSSDK曾经引爆前端以及后端的工程师,其魔性的力量毋庸置疑,在我们的技术眼里它的实现原理和根本是不能够被改变的,这篇文章就不对其js的实现做任何评价和解说了(因为我也不是很懂,哈哈),这里要说的是它 ...

  6. 微信公众平台开发——微信授权登录(OAuth2.0)

    1.OAuth2.0简介 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户 ...

  7. curl 模拟登录微信公众平台带验证码

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

  8. PHP中CURL技术模拟登陆抓取网站信息,用与微信公众平台成绩查询

    伴随微信的红火,微信公众平台成为许多开发者的下一个目标.笔者本身对于这种新鲜事物没有如此多的吸引力.但是最近有朋友帮忙开发微信公众平台中一个成绩查询的功能.于是便在空余时间研究了一番. 主要的实现步骤 ...

  9. 微信公众平台开发(免费云BAE+高效优雅的Python+网站开放的API)

    虽然校园App是个我认为的绝对的好主意,但最近有个也不错的营销+开发的模式出现:微信平台+固定域名服务器. 微信公众平台的运行模式不外两个: 一.机器人模式或称转发模式,将说话内容转发到服务器上完成, ...

随机推荐

  1. linux的压缩命令

    gzip: Linux压缩保留源文件的方法: gzip –c filename > filename.gz Linux解压缩保留源文件的方法: gunzip –c filename.gz > ...

  2. C#的循环语句

    1.输入月份,日期号,输出是见年的第几天. 循环语句: for 格式 for(初始条件;循环条件;状态改变) { 循环体,执行代码(break;跳出循环体) } 2.一个游戏,前20关是每一关自身的分 ...

  3. kernel/ptrace.c

    /* ptrace.c *//* By Ross Biro 1/23/92 *//* edited by Linus Torvalds */ #include <linux/head.h> ...

  4. Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  5. php部分,一个用递归无限分类的方法

    <?php $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国'); $data[]=array('id'=>2,'paren ...

  6. 自动化测试工具QTP的使用实例 分类: 软件测试 2015-06-17 00:23 185人阅读 评论(0) 收藏

    1. QTP简介 1.1QTP功能与特点 QTP是QuickTest Professional的简称,是一种自动化软件测试工具.在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试 ...

  7. 关系与导航属性(摘自微软MSDN)

    关系与导航属性 本主题概述实体框架如何管理实体间的关系.还对如何映射和操作关系提供了一些指南. 关系.导航属性和外键 在关系数据库中,表之间的关系(也称为关联)是通过外键定义的.外键 (FK) 是用于 ...

  8. WIN7 WIN8 WIN10你们的WmiPrvSE.exe系统占用资源厉害吗?

    大家一起来做个实验吧.把你的支付宝安全控件和支付宝数字证书两个东东都卸掉.试试看电脑是否年轻几岁? 出处:百度贴吧原帖

  9. gui2

    事件:描述发生了什么的对象. 存在各种不同类型的事件类用来描述各种类型的用户交互. 事件源:事件的产生器. 事件处理器:接收事件.解释事件并处理用户交互的方法. 比如在Button组件上点击鼠标会产生 ...

  10. 如何让老式浏览器支持html5新增的语义元素

    html5新增加了一些语义元素,如header, footer, nav, aritcle, aside,等等. 然而,有些老款浏览器无法识别这些元素,会把它们当成 inline 元素对待,这会导致一 ...