微信开通判断微信扫码 扫微信号

在分享链接里打开页面,如何判断是否关注此微信公众号? - 知乎4被浏览2512分享邀请回答19 条评论分享收藏感谢收起1 个回答被折叠()微信扫描公众号二维码实现登陆 -
- ITeye博客
博客分类:
前提条件:
1.微信公众平台为服务号,
2.服务号实现了账号绑定功能,即将open_id 与业务系统中的用户名有对应关系
具体实现原理:
1.用户访问业务系统登陆页时,调用二维码接口,获得二维码的ticketid,同时将sessionid,ticketid和二维码的seceneid保存
2.返回登陆页时,根据ticketid获得微信二维码
3.页面通过ajax发送请求,判断是否已经扫描成功。
4.公众平台服务监测到扫描事件,更新seceneid中扫描二维码的业务系统用户名
4.当ajax监测到扫描成功,并返回有业务系统用户名,即可做模拟登陆!
具体代码:
根据sceneID获取,获取ticketId,
sceneId可以为sessionID,或者自定义的其他任何值,但必须保证不重复
注意:这里请求的type可以为临时二维码或永久二维码,具体区别可以参看微信公众平台的开发者文档。
public static String getSceneTicket(String type,String sceneId){
WxScene scene = new WxScene();
scene.setAction_name(type);
scene.setSceneId(Integer.parseInt(sceneId));
scene.setExpire_seconds(1800);
String jsonScene = JSONObject.fromObject(scene).toString();
String url = WeixinContents.qr_scene_ticket_url.replaceAll("ACCESS_TOKEN", getAccessToken(WeixinContents.appid,WeixinContents.appsecret).getToken());
System.out.println(jsonScene);
JSONObject jsonObject = httpRequest(url, "POST", jsonScene);
int result = 0;
String ticket = "";
if (null != jsonObject) {
if (jsonObject.containsKey("errcode")) {
result = jsonObject.getInt("errcode");
ticket = jsonObject.getString("ticket");
2.扫描二维码登陆的几个action
@ActionKey("/")
@ClearInterceptor(ClearLayer.ALL)
public void index() {
LoginUser u = (LoginUser)getSessionAttr("LoginUser");
setAttr("root", this.getRequest().getContextPath());
if(null==u){
setAttr("ticketId",wxTicket());
render("/WEB-INF/login.html");
redirect("/index");
private String wxTicket() {
int sceneId = Db.queryInt("select SEQ_WX_SCENE.Nextval from dual");
String ticketId = WeixinHttpUtils.getSceneTicket("QR_SCENE", sceneId+"");
setSessionAttr("ticketId",ticketId);
setSessionAttr("sessionId",this.getRequest().getSession().getId());
String sql = "insert into wx_scence_logon(id,sessionid,ticketid,SCENCE_ID) values(sys_guid(),?,?,?)";
Db.update(sql,this.getRequest().getSession().getId(),ticketId,sceneId);
return ticketId;
@ActionKey("/cxTicket")
@ClearInterceptor(ClearLayer.ALL)
public void cxTicket(){
String ticketId = getPara("ticketId");
String sessionid = getPara("sessionId");
while(i&10){
Record r = Db.findFirst("select id from wx_scence_logon l,wx_user u where u.open_id = l.open_id and l.ticketid = ? and l.sessionId = ?",ticketId,sessionid);
if(r!=null&&StringUtils.isNotEmpty(r.getStr("id"))){
setAttr("success","1");
setAttr("logonId",r.getStr("id"));
setAttr("success","0");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
render(new JsonRender().forIE());
@ActionKey("/ticketLogon")
@ClearInterceptor(ClearLayer.ALL)
public void ticketLogon(){
String id = getPara("ticketId");
Record r = Db.findFirst("select user_id as username from wx_scence_logon l,wx_user u where u.open_id = l.open_id and l.id = ?",id);
if(r!=null&&StringUtils.isNotEmpty(r.getStr("username"))){
String username = r.getStr("username");
LoginUser user = LoginUser.dao.findFirst("select user_id,xm,department_id,departmentname,userpw from gy_user u where u.username = ? and u.userlockstate = '1' ",username);
String permSql = "select distinct p.* from hr_user_role t,hr_role r,hr_role_perm m,hr_perms p where t.role_id = r.id and m.role_id = r.id and m.perm_id = p.id and user_id = ?";
List&Record& perms = Db.find(permSql,new Object[]{user.getStr("user_id")});
if(perms!=null&&perms.size()&0){
this.getSession().removeAttribute("USER_PERMS");
setSessionAttr("USER_PERMS",perms);
getRequest().getSession().setAttribute("LoginUser",user);
this.redirect("/main");
3.
登陆页面
二维码显示
&img src="https://mp./cgi-bin/showqrcode?ticket=${ticketId!}" width="250px"/&
定时查询扫描状态
function wxCxTikcet(){
$.getJSON("${root!}/cxTicket",{ticketId:"${ticketId}",sessionId:"${sessionId}"},function(data){
//alert(data.success=="1");
if(data.success=='1'){
_logon(data.logonId);
//window.location.href="${root!}/ticketLogon/"+data.logonId;
var t_int = window.setInterval("wxCxTikcet()",5000);
4.公众平台代码
}else if(eventType.equalsIgnoreCase(MessageUtil.EVENT_TYPE_SCAN)){
String scene_id = eventK
if(Integer.parseInt(eventKey)==0){
respContent = "扫描参数出错!请刷新重试!";
respContent = getSceneContent(scene_id,fromUserName);
private static String getSceneContent(String sceneId,String fromUserName){
String sql ="select * from WX_SCENCE_LOGON
where scence_id = ?";
Record r = Db.findFirst(sql,sceneId);
if(r!=null){
String updateSql = "update wx_scence_logon set open_id = ? where id = ?";
Db.update(updateSql,fromUserName,r.getStr("id"));
return "您已成功登陆***系统!";
说明,框架使用jfinal 1.5
浏览: 87367 次
来自: 武汉
郑云飞 写道你好,请问,按照你的代码,为什么Android手机 ...
学习了。。。
没有开启开发模式可以使用此接口发送模板消息吗????急求!!
你好,请问,按照你的代码,为什么Android手机可以收到发送 ...
有办法吗,我觉得扫描过后要是直接知道是哪个的二维码,多好微信扫二维码的使用方法
微信扫二维码教程
1、打开公众扫码/回复
2、在微信公众号扫码界面里选择新建任务
3、点击选择文件,打开二维码图片的存放路径,添加到平台,然后在粉丝数量里填入需要扫码的数量。
选择二维码图片操作示意图:
4、最后预览任务,提交即可完成下单,接下来平台会自动执行相关操作,任务进度可在扫码任务里进行查看。
以上就是详细的微信扫码操作教程。
国内最专业的网上自助微信刷粉平台,专业团队为您贴心服务!
官网地址:微信综合业务代理平台 & & & &
微信综合业务代理平台(C)版权所有
技术支持:QQ
官网地址:
国内最大微信刷粉平台,网聚粉丝的力量
微信公众号&&&订阅号
微信公众号&&&&服务号
微信个人号&&&&私人号Posts - 143,
Articles - 1,
Comments - 2306
--最为完美的 Linq to DB 解决方案
移植 Linq to SQL 的利器(Linq to Access、SQLite、MySQL、Oracle、Firebird、PostgreSQL、DB2)
15:09 by 麦舒, ... 阅读,
这年头,招个人不容易,现在大小活都得干了, 现在干起了微信开发这活儿,顺带写点经验。
上一回,写了篇文章是封装微信接口消息的处理的,具体可以看:
现在来谈谈如何获取通过微信提供的接口来获取微信用户所写的基本信息,包括国家,省,市,昵称。当然,要获取用户的信息,是要经过用户授权。关于这部份的文档,可以看到。
我要说的是具体的操作。
一、填写授权回调页面的域名
在这里填的是 wx.alinq.org。在获得用户的授权后,会跳转到一个由开发人员指定的页面,该页面的链接必须在该域名下。如果没有填写的话,会出现一个页面链接无效的页面。
二、引导用户到指定的授权页面
关于参数的解释,具体可以参考微信相关的文档。值得注意的是 redirect_uri 是一个 url ,必须要对它进行 url 编码,在生成该 url 后,你可以到 &来对把 url 生成一个二维码,然后在微信里扫一扫来进行测试。&
扫一扫后:
三、最后奉上完整实现的代码
下面是完整的代码,希望对大家有用。^_^
&%@ WebHandler Language="C#" Class="UserAuth" %&
public class UserAuth : IHttpHandler
public void ProcessRequest(HttpContext context)
var appid = "wxf1c24c60e3ac13b7";
var secret = "acb7a290d4b7c2e6e97d4d3";
var code = context.Request.QueryString["Code"];
if (string.IsNullOrEmpty(code))
var url = string.Format("https://open./connect/oauth2/authorize?appid={0}&redirect_uri=http%3a%2f%2fwx.alinq.org%2fTest%2fUserAuth.ashx&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect", appid);
context.Response.Redirect(url);
var client = new System.Net.WebClient();
client.Encoding = System.Text.Encoding.UTF8;
var url = string.Format("https://api./sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", appid, secret, code);
var data = client.DownloadString(url);
var serializer = new JavaScriptSerializer();
var obj = serializer.Deserialize&Dictionary&string, string&&(data);
string accessT
if (!obj.TryGetValue("access_token", out accessToken))
var opentid = obj["openid"];
url = string.Format("https://api./sns/userinfo?access_token={0}&openid={1}&lang=zh_CN", accessToken, opentid);
data = client.DownloadString(url);
var userInfo = serializer.Deserialize&Dictionary&string, object&&(data);
foreach (var key in userInfo.Keys)
context.Response.Write(string.Format("{0}: {1}", key, userInfo[key]) + "&br/&");
最后,留下联系方式,做微信开发的同学,有啥问题可以讨论讨论,当然,讨论其它方面的技术问题也是可以的。
各位朋友,可以扫一扫下这面这个公众号,建这个公众号的目的,希望能够和更多的同行交流。大家放心,这个公众号是绝对不会打扰大家的。
另外,再顺便给大家介绍我写的另外一款免费软件:

我要回帖

更多关于 微信扫码支付判断成功 的文章

 

随机推荐