精华内容
下载资源
问答
  • 遇到一个这样的问题,微信关注公众号,注册信息表中以该关注微信号的openid为查询条件,获取用户所拥有的权限。当我用任意手机(无论是否关注过该公众号)码的时候如何获取扫码手机的openid。此码openid是否会...
  • 最近项目中遇到一个自己之前没有接触过的新功能,即就是要生成一个二维码,微信用户扫码可以进行登录,并把用户信息,如:昵称,头像、省份...获取到并入库。 一:先说怎样生成二维码? 1.可以百度“草料二维码...

    最近项目中遇到一个自己之前没有接触过的新功能,即就是要生成一个二维码,微信用户扫码可以进行登录,并把用户的信息,如:昵称,头像、省份...获取到并入库。

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html    微信开放文档地址。

    一:先说怎样生成二维码?

    1.可以百度“草料二维码”,可以利用网站生成二维码。前提是要输入一个URL,才可以生成这个二维码;

    2.此URL就是

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    

    ,要改动的就是openid,和redirect_uri,这个edirect_uri就是回调域名,公众号上面配置的(前端工程师做的);至此二维码生成了。

    二:扫码获取用户信息?扫码调下面的接口

    由于之前接触过微信支付,知道怎样获取openid,不懂得朋友可以去我的另一篇

    《全面详细的微信支付思路流程以及项目代码分享》https://blog.csdn.net/zhangleiyes123/article/details/82857195中去了解,接下来就是怎样获取到用户信息,进入到微信公众号查找相关文档,获取用户信息有两个接口,我们要使用第二个接口,

    //获取用户信息接口     此接口的access_token 是接口基础调用access_token 不是网页授权access_token
      //public static String GET_USERINFO="https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN";
    
     //获取用户信息接口    此接口是网页授权access_token
      public static String GET_USERINFO="https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}&lang=zh_CN";

    直接上代码:

     /**
    	 * 获取openId  微信登录 获取用户姓名
    	 * @param code
    	 * @return
    	 */
        @ApiOperation(value="根据code获取openid",notes="")
    	@GetMapping("/getOpenId")
    	public BaseResult getOpenId(@RequestParam("code") String code){
        	Map<String,Object> map = new HashMap<String,Object>();
        	Map<String,Object> map1 = new HashMap<String,Object>();
        	Map<String, Object> result = new HashMap<String,Object>();
        	try {
        		map.put("status", 0);//默认失败
    			map.put("appId", WxPayConfig.APPID);//为了给前端用
    			if(!StringUtil.isNullOrEmpty(code)){//有code
    				//请求api获取openid(获取access_token,access_token里面带有openid)
    				String str = HttpInvoker.sendGetRequest(StringUtil.format(WxPayConfig.GET_OPENID, new Object[]{WxPayConfig.APPID,WxPayConfig.APPSECRET,code}));
    				//将json转map
    				Map<String, Object> toMap = WeixinUtil.jsonStrToMap(str);
    				if(!StringUtil.isNullOrEmpty(toMap.get("openid"))){//获取openid成功
    					map.put("status", 1);//成功
    					map.put("openId", toMap.get("openid").toString());  
    					map.put("access_token", toMap.get("access_token").toString());
    					//=================================================================================
    					//获取用户信息
    					String str1 =HttpInvoker.sendGetRequest(StringUtil.format(WxPayConfig.GET_USERINFO, new Object[]{toMap.get("access_token").toString(),toMap.get("openid").toString()}));
    					//将json转map
    					Map<String, Object> toMap1 = WeixinUtil.jsonStrToMap(str1);
    					map1.put("nickname", toMap1.get("nickname").toString());//微信名
    					map1.put("sex",toMap1.get("sex").toString());//性别  值为1时是男性,值为2时是女性,值为0时是未知
    					map1.put("province",toMap1.get("province").toString());//省
    					map1.put("city",toMap1.get("city").toString());//城市
    					map1.put("country",toMap1.get("country").toString());//国家
    					map1.put("headimgurl",toMap1.get("headimgurl").toString());//用户头像
    					if(!StringUtils.isEmpty(str) && !StringUtils.isEmpty(str1)) {
    						User user=userRepo.findByOpenId(toMap.get("openid").toString());
    						if(user==null) {
    							//用户设置用户名和openid
    							User user1=new User(toMap1.get("nickname").toString(),toMap.get("openid").toString());
    							userRepo.save(user1);
    						}
    						result.put("openid", toMap.get("openid").toString());
    						result.put("nickname", toMap1.get("nickname").toString());
    					}
    					return new BaseResult(Constants.SUCCESS_CODE,Constants.SUCCESS_MSG,result);//返回openid
    				}else {
    					return new BaseResult(Constants.ERROR_CODE,Constants.ERROR_MSG,"获取openid失败");
    				}
    			}else {
    				return new BaseResult(Constants.ERROR_CODE,Constants.ERROR_MSG,"没有传入code值");
    			}	
    		} catch (Exception e) {
    			e.printStackTrace();
    			return new BaseResult(Constants.EXCEPTION_CODE,Constants.EXCEPTION_MSG);
    		}
        }

    现在,数据库中就有扫码人的信息了。

    相关参考链接:https://blog.csdn.net/qq_33696345/article/details/80521077

     

    展开全文
  • 微信二维码扫获取openid

    万次阅读 2018-05-31 11:24:08
    扫描二维码后,通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。第一步 确定回调域名,即扫描二维码后你需要跳转的后台URL,例如:...

    扫描二维码后,通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

    第一步 确定回调域名,即扫描二维码后你需要跳转的后台URL,例如:

    http://myWechatTest.top/myProject/wechat_queueInfo.do?user=abc&pwd=123456

    http://myWechatTest.top  --> 我的外网域名,类似于localhost:8080 但localhost只有内网才能访问。

    myProject --> 我的项目名

    第二步 构造URL:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx123456789&redirect_uri=http%3A%2F%2FmyWechatTest.top%2FmyProject%2Fwechat_queueInfo.do%3Fuser%3Dabc%26pwd%3D123456&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect

    黑色部分:是腾讯后台的Oauth2.0鉴权接口,是固定写法,appid为微信公众号的appid

    红色部分:redirect_url = xxx   ; xxx是第一步中的回调域名,不同的是此处进行了编码,也必须要编码,否则第一步中url 带 的参数后台接收不到。编码的方式:在浏览器的开发者模式中的console中输入:encodeURIComponent('你的URL') 回车即可。

    蓝色部分:如下参数说明

    参数说明

    参数是否必须说明
    appid公众号的唯一标识
    redirect_uri授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
    response_type返回类型,请填写code
    scope应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
    state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    #wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数

    第三步:将URL生成二维

    可以百度“草料二维码”,可以利用网站生成二维码。

    第四步:后台代码获取openid 。

    思路:首先获取request中的code,然后通过code调用腾讯微信接口获取用户信息,其中就包括了openid。

    由于小编使用的是struts2,所有构造了一个request对象。

    public String queueInfo() throws Exception{
    		HttpServletRequest request = (HttpServletRequest)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);  
    		String code = request.getParameter("code");
    		//通过code获取openid;
    		net.sf.json.JSONObject wxUser = CoreService.getOpenid(code);
    		String openid = wxUser.getString("openid");
    }
    public class CoreService {
            public static String GETOPENID = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
            /*通过code获取用户openid*/
    	public static JSONObject getOpenid(String code) throws IOException{
    		JSONObject jsonObject = null;
    		String path = GETOPENID.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code);  
    		StringBuffer buffer = new StringBuffer();
                    URL url = new URL(path);
                    HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
                    httpUrlConn.setRequestMethod("POST");
                    httpUrlConn.setDoOutput(true);
                    httpUrlConn.setDoInput(true);
                    httpUrlConn.setUseCaches(false);
                        // 将返回的输入流转换成字符串
                    InputStream inputStream = httpUrlConn.getInputStream();
                    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                    String str = null;
                    while ((str = bufferedReader.readLine()) != null) {
                        buffer.append(str);
                    }
                    bufferedReader.close();
                    inputStreamReader.close();
                    // 释放资源
                    inputStream.close();
                    inputStream = null;
                    httpUrlConn.disconnect();
                    jsonObject = JSONObject.fromObject(buffer.toString());
    		return jsonObject;
    	}
    }




    展开全文
  • 扫二维码关注公众号

    2018-12-03 10:25:09
     网站实现扫描二维码关注微信公众号,如果已经关注公众号就自动登陆网站并获取其微信昵称,头像等信息,如果用户未关注就等用户关注公众号后自动登陆网站 –如果用户已关注公众号,网站端直接自动登陆,如果没有...

    原文链接

    需求
       网站实现扫描二维码关注微信公众号,如果已经关注公众号就自动登陆网站并获取其微信昵称,头像等信息,如果用户未关注就等用户关注公众号后自动登陆网站

    –如果用户已关注公众号,网站端直接自动登陆,如果没有关注,就等用户关注公众号之后网站端自动登陆

    (目前已经完成了这个功能,示例网址:http://www.bid-data.com/ 爱招标——免费实时标讯推送平台,为企业负责人及商务人员即时掌控招标动态、中标检索、竞争对手中标项目分析等服务平台。)

    做微信扫码登陆,生成二维码必须是微信公众号中绑定的域这个域名,网站生成不了二维码(网站与微信服务器不是同一个域名) ,而是调用微信系统的接口获取二维码,用户扫码后也是请求微信服务器

    实现思路
      1,微信的系统,提供生成带参数的二维码的接口,这个参数就是唯一值(场景值)
      2,网站调用微信系统,获取生成的二维码图片
      3,用户扫码会直接调用微信服务器,将用户访问微信服务器的信息记录到redis,key就是唯一值(场景值)
      4,网站端做轮训去查询redis中是否有这个唯一值的数据,如果有就获取用户信息登录,没有就五秒一次轮训,登录后就不在做轮训(从二维码弹出之后开始做轮训,关闭二维码后停止轮训)
       5,这里的唯一值是可以自己定义的,我用的是截取了几位的时间戳

    实现步骤
    (1)微信端:写一个获取带参数的临时二维码接口。
    复制代码
      // 临时二维码
    private final static String QR_SCENE = “QR_SCENE”;
    // 永久二维码
    private final static String QR_LIMIT_SCENE = “QR_LIMIT_SCENE”;
    // 永久二维码(字符串)
    private final static String QR_LIMIT_STR_SCENE = “QR_LIMIT_STR_SCENE”;
    // 创建二维码
    private String create_ticket_path = “https://api.weixin.qq.com/cgi-bin/qrcode/create”;
    // 通过ticket换取二维码
    private String showqrcode_path = “https://mp.weixin.qq.com/cgi-bin/showqrcode”;

    @RequestMapping("getQrcode")
    public @ResponseBody String getQrcode(@RequestParam(value = "sceneId")int sceneId) throws Exception{
    
        
        String ticket = createTempTicket(tokenService.getToken(),"2592000",sceneId);
        LOGGER.info("get wechat qrcode  ==> start");
        LOGGER.info("sceneId :"+sceneId);
        LOGGER.info("ticket :"+ticket);
        LOGGER.info("get wechat qrcode  ==> end");
        return ticket;
    }
    /** 
     * 创建临时带参数二维码 
     * @param accessToken 
     * @expireSeconds 该二维码有效时间,以秒为单位。 最大不超过2592000(即30天),此字段如果不填,则默认有效期为30秒。 
     * @param sceneId 场景Id 
     * @return 
     */  
    public String createTempTicket(String accessToken, String expireSeconds, int sceneId) {  
      
        TreeMap<String,String> params = new TreeMap<String,String>();  
        params.put("access_token", accessToken);  
        Map<String,Integer> intMap = new HashMap<String,Integer>();
        intMap.put("scene_id",sceneId);  
        Map<String,Map<String,Integer>> mapMap = new HashMap<String,Map<String,Integer>>();  
        mapMap.put("scene", intMap);  
        
        Map<String,Object> paramsMap = new HashMap<String,Object>();  
        paramsMap.put("expire_seconds", expireSeconds);  
        paramsMap.put("action_name", QR_SCENE);  
        paramsMap.put("action_info", mapMap);  
        String data = new Gson().toJson(paramsMap);  
        String tse = HttpRequestUtil.HttpsDefaultExecute(HttpRequestUtil.POST_METHOD,create_ticket_path,params,data);  
        
        JSONObject jsonObject = JSONObject.fromObject(tse);
        LOGGER.info("ticket :"+jsonObject.getString("ticket"));
    

    return showqrcode_path+"?ticket="+jsonObject.getString(“ticket”);
    }
    复制代码
    accessToken就是调用微信接口的凭证token
    (2)网站端:网站写一个调用微信生成二维码的接口

    复制代码
    @RequestMapping(“getQrcode”)
    public @ResponseBody Hashtable getQrcode(int sceneId){

        System.out.println(sceneId);
        
        Hashtable param = new Hashtable();
        param.put("sceneId", sceneId);
    
        String qrcodePath = HttpUtil.postRequest(Constant.getValue("get_qrcode"), param);
    
        System.out.println(" qrcodePath ==> "+qrcodePath);
        param.put("path", qrcodePath);
        return param;
    }
    

    复制代码
    直接使用http调用接口就行,Constant.getValue(“get_qrcode”)这个就是微信提供二维码接口的url

    (3)微信端:微信处理用户请求(这个地址是微信公众号填的那个地址,微信服务器会将所有用户请求转发到这个地址)

    复制代码
           // 事件推送
    else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
    // 事件类型
    String eventType = requestMap.get(“Event”);
    // 关注
    if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {

                    //获取用户信息
                    String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
                    requestUrl = requestUrl.replace("ACCESS_TOKEN", tokenService.getToken())
                            .replace("OPENID", fromUserName);
                    JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET",null);
                    String nickname = jsonObject.getString("nickname");
                    String address = jsonObject.getString("country")+"-"+jsonObject.getString("province")+"-"+jsonObject.getString("city");
                    String headimgurl = jsonObject.getString("headimgurl");
    

    //将用户信息存入redis,key为唯一值(场景值)
    Hashtable params = new Hashtable();
    params.put(“phoneIme”, fromUserName);
    params.put(“state”, 1);
    params.put(“location”, address);
    params.put(“realName”, nickname);
    params.put(“nickname”, nickname);
    params.put(“headimgurl”, headimgurl);
    if(StringUtils.isNotBlank(eventKey)){
    redisCacheTool.setDataToRedis(eventKey.replace(“qrscene_”, “”), 3600, params);
    System.out.println("qrcode redis key ==> "+eventKey.replace(“qrscene_”, “”));
    params.put(“equipmentType”, eventKey);
    }
                //入库
    HttpUtil.postRequest(Constant.getValue(“UPDATE_USER”), params);

                }
                // 取消关注
                else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
                    // TODO 取消订阅后用户不会再收到公众账号发送的消息,因此不需要回复
                    Hashtable params = new Hashtable();
                    params.put("phoneIme", fromUserName);
                    params.put("state", 0);
                    HttpUtil.postRequest(Constant.getValue("UPDATE_USER_ANS"), params);
                    
                }
                // 扫描带参数二维码
                else if (eventType.toLowerCase().equals(MessageUtil.EVENT_TYPE_SCAN)) {
                    // TODO 处理扫描带参数二维码事件
    

    if(StringUtils.isNotBlank(eventKey)){

                        String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
                        //获取用户信息
                        requestUrl = requestUrl.replace("ACCESS_TOKEN", tokenService.getToken())
                                .replace("OPENID", fromUserName);
                        JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET",null);
                        String nickname = jsonObject.getString("nickname");
                        String address = jsonObject.getString("country")+"-"+jsonObject.getString("province")+"-"+jsonObject.getString("city");
                        String headimgurl = jsonObject.getString("headimgurl");
    

    //将用户信息存入redis,key为唯一值(场景值)
    Hashtable params = new Hashtable();
    params.put(“nickname”, nickname);
    params.put(“headimgurl”, headimgurl);
    params.put(“location”, address);
    redisCacheTool.setDataToRedis(eventKey, 3600, params);
    System.out.println("qrcode redis key ==> "+eventKey);
    }

                    respContent = "返回的信息";
                    textMessage.setContent(respContent);
                    respXml = MessageUtil.messageToXml(textMessage);
                }
    

    复制代码
    (4)网站端:登陆页面中做轮训,每隔几秒查询一次redis,如果有用户信息就登陆

    复制代码
    var timestamp = new Date().getTime() + “”;
    var str = timestamp.substring(8, timestamp.length);

        window.setInterval(function() {
        
        getUser(cont);
        
    }, 10000);
    
        function getUser() {
        $.ajax({
            type : 'get',
            data : {
                sceneId : str
            },
            dataType : 'json',
            url : "getUser.do",
            success : function(data) {
    
                if (data.msg == "success") {
                    location.reload(); 
                }
    
            },
            error : function(data) {
    
                if (data.msg == "success") {
                    location.reload();
                }
    
            }
        });
    }        
    

    复制代码

    –本文意在对网站实现微信公众号用户扫码关注登录的实现思路做了概述

    –这个方案中轮训访问是个问题,也是可以改进的地方,但是目前没有更好的方案,如果您有什么更好的建议,欢迎留言给点思路

    优化后的方案 :http://www.cnblogs.com/cmyxn/p/7814120.html

    展开全文
  • 前端是当页面加载完成才弄下一次请求,利用ajax请求,当status=408时,一直在加载请求,当status=201时,获取用户头像一直加载请求,直到status=200才跳转到另一个页面,涉及到登陆记得加cookie 1、请求登陆的地址,...

    a、status=408什么也没有操作

    b、status=201微信扫了码但是没有点击确认

    c、status=200代表扫码成功并确认登陆

    前端是当页面加载完成才弄下一次请求,利用ajax请求,当status=408时,一直在加载请求,当status=201时,获取用户头像一直加载请求,直到status=200才跳转到另一个页面,涉及到登陆记得加cookie

    1、请求登陆的地址,请求登陆的 时候会有上面说的三种状态,分别判断

    1266143-20190921214332188-726005125.png

    2、如果是确认扫码登陆了,会返回一个redirect_uri地址,这个地址用来请求获取用户的信息ticket,返回的地址与页面请求返回的少了"&fun=new&version=v2&lang=zh_CN",得加上这个才能获取ticket

    1266143-20190921220447349-1252175328.png

    返回的ticket如下:

    <error> 
        <ret>0</ret> 
        <message></message> <skey>@crypt_dd043c47_d6303d6aed797c295a21960d9c2d729c</ske y> <wxsid>hYiHcYEqVMC4Kim9</wxsid> <wxuin>795592819</wxuin> <pass_ticket>aNUg%2B%2FHFbBavV3w9ndTBh8hjSErIhrkBBGVl0PV F%2B9lQhFi5KtGYjlWCv2%2FoBrQf</pass_ticket> 
        <isgrayscale>1</isgrayscale>
    </error>
    

    3、url地址,webchat/urls.py

        path('polling/', views.long_pooling, name="long_pooling"),
    

    4、前端页面,templates/webch.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Wechat</title>
    </head>
    <body>
        <div style="width: 300px;margin: 0 auto;">
            <img id="qcode"  style="width: 300px;height: 300px;" src="https://login.weixin.qq.com/qrcode/{{code}}"/>
        </div>
        <script src="/static/js/jquery.min.js"></script>
        <!--<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>-->
    
        <script>
            //页面加载完在请求polling()
            $(function () {
               polling();
            })
            function polling() {
                $.ajax({
                    url:'/polling/',
                    type:"GET",
                    dataType:"json",
                    success:function (arg) {
                        if(arg.status == 408){
                            polling()
                        }else if(arg.status == 201){
                            //获取图片接着发
                            $("#qcode").attr('src',arg.data);
                            polling()
                        }else{
                            location.href="/index/"
                        }
    
                    }
                })
            }
        </script>
    
    </body>
    </html>

    5、后台登陆的三种状态判断,web/views.py

    # Create your views here.
    from django.shortcuts import render
    from django.shortcuts import HttpResponse
    import requests
    import re
    import time
    import json
    from bs4 import BeautifulSoup
    VERIFY_TIME =None
    verifi_uuid =None
    LOGIN_COOKIE_DICT = {}
    TICKET_COOKIE_DICT= {}
    TICKET_DATA_DICT = {}
    TIPS=1
    def long_pooling(request):
        """二维码长轮询获取登陆"""
        """
        1、status=408什么也没有操作
        2、status=201微信扫了码但是没有操作
        3、status=200代表扫码成功并确认登陆
        """
        #返回的json状态和数据
        ret = {"status":408,"data":None}
        #二维码长轮询url
        try:
            #TIPS=0是没有过于频繁的轮询.刚开始是为1
            global TIPS
            #请求的地址,uuid=verifi_uuid,后面那个值是随机生产时间戳
            base_pooling_url = "https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid={0}&tip={1}&r=-1322669031&={2}"
            pooling_url= base_pooling_url.format(verifi_uuid,TIPS,VERIFY_TIME)
            reponse_login = requests.get(url=pooling_url)
            #print("pooling_reponse.text",pooling_reponse.text)
            #扫码一直没有点击登陆,状态码是201,获取返回头像数据
            if "window.code=201" in reponse_login.text:
                #获取头像图片地址
                TIPS = 0
                #获取图片地址
                avatar = re.findall("userAvatar = '(.*)';",reponse_login.text)[0]
                #print("avatar",avatar)
                #更新状态和内容
                ret["status"] = 201
                ret["data"] = avatar
            #print("reponse_login",reponse_login.text)
            elif "window.code=200" in reponse_login.text:
                #登陆时候获取的cookies
                LOGIN_COOKIE_DICT.update(reponse_login.cookies.get_dict())
                #登陆成功返回一个重定向地址,这个地址请求可以获取用户信息ticket
                redirect_uri = re.findall('redirect_uri="(.*)";',reponse_login.text)[0]
                redirect_uri+="&fun=new&version=v2&lang=zh_CN"
                #print("redirect_uri",redirect_uri)
    
                #获取ticket和添加ticket的cookie
                reponse_ticket = requests.get(url=redirect_uri,cookies=LOGIN_COOKIE_DICT)
                TICKET_COOKIE_DICT.update(reponse_ticket.cookies.get_dict())
                #print("reponse_ticket:",reponse_ticket.text)
                #找出ticket里的值
                soup=BeautifulSoup(reponse_ticket.text,"html.parser")
                for tag in soup.find():
                    #print(tag.name,tag.string)
                    #把数据存入到dict中,为了下次请求的时候使用
                    TICKET_DATA_DICT[tag.name]=tag.string
                #print("TICKET_DATA_DICT",TICKET_DATA_DICT)
                ret["status"] = 200
        except Exception as e:
            print(e)
        return HttpResponse(json.dumps(ret))
    

    微信登陆的页面初始化,获取用户的基本信息

    找到获取用户信息请求地址

    1266143-20190921223345062-1487141318.png

    返回的用户信息

    1266143-20190921223607021-1377732579.png

    
    path('index/', views.index, name="index"),
    

    后台的请求获取用户信息,web/views.py

    def index(request):
        """微信登陆的页面初始化,获取用户的基本信息"""
        user_init_url = "https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-1332226764"
        payload_data = {
            "DeviceID":"e379444626462097",
            "Sid":TICKET_DATA_DICT["wxsid"],
            "Skey":TICKET_DATA_DICT["skey"],
            "Uin":TICKET_DATA_DICT["wxuin"]
        }
        cookie_all = {}
        #因为不知道用哪个cookie所以上面两个都给加上了
        cookie_all.update(LOGIN_COOKIE_DICT)
        cookie_all.update(TICKET_COOKIE_DICT)
        #返回的内容是用户的信息
        reponse_init=requests.post(url=user_init_url,json=payload_data,cookies=cookie_all)
        print("reponse_init",reponse_init)
        return render(request,"index.html",{"data":reponse_init.text,})

    注:因为之前是图片加载完成就发送请求,造成前端status不等于200就不断轮询pedding,然后使django的wsgi引发错误(太多的请求,wsgi不知获取那个信息):

    self.status.split(' ',1)[0], self.bytes_sent AttributeError: 'NoneType' object has no attribute 'split'

    解决:是等页面加载完再轮询,当刚开始请求时候刚开始url的tip=1,当status=201的时候tip=0。,这样他就不会不断的轮询,

    转载于:https://www.cnblogs.com/venvive/p/11565253.html

    展开全文
  • 记录一些小程序获取...然后网页根据值为s=/mqtt/api/log/id/6666轮询获取用户信息 用户用微信扫描这个二维码实现登录 二维码连接为 https://142536.vip/tp/public/index.php?s=/mqtt/api/log/id/6666 也可以生成 ...
  • 浙政钉的开发文档和专有钉钉一样:但想通过浙政钉需向发浙政钉起申请获取应用信息 这里以专有钉钉为例 1.首先先注册一个专有钉钉账户 专有钉钉开放平台开发文档:https://dg-work.cn/ 根据提示完成注册 2....
  • 一:用户拒绝授权使用 wx.openSetting({}) 重新调起授权用户信息 场景模拟:  用户进入微信小程序-程序调出授权  (此图片来源于网络,如有侵权,请联系删除! ) 选择拒绝之后,需要用到用户授权才能正常使用的页面...
  • 刚开始接触微信的时候一头雾水,领导想要一个获取微信用户信息的功能,而且是的别人的二维码,我是一阵忙活啊。 经过努力和尝试,终于功夫不负有心人啊,赶紧记录一下,我用的是thinkphp编写的。 第一步:就是...
  • 可复用)php微信关注公众号或码实现获取用户信息(内含简易框架搭建,可复用)概述》详细流程准备工作准备公众号及配置相关接口文档获取access_token生成临时带参二维码用户事件回调获取用户详细信息详细程序实现-...
  • 使用微信码重定向获取用户信息在转向界面 1.构造二维码 2.码获取二维码链接和对应的id(为使二维码易于识别,应将链接缩短,所以以下取名为A) 3.重定向获取用户信息 4.转到准确链接获取相应...
  • 这里写自定义微信扫描二维码,跳转到第三方网页,并获取用户OpenId和基本信息,这个要怎么才能让每次获取的信息不一样,现在情况是,有个固定二维码,没过的微信 都会跳转到最新页面。之前有过的都会停留在旧的...
  • 获取二维码,让微信公众号跳转到以下代码的code方法即可,用户点击二维码后,通过二维码获取关注用户信息及二维码推广者信息,以及判断用户是否关注,具体代码逻辑在以下代码responseMsg方法,但需要在公众平台url...
  • 本文旨在记录如何码带参数的二维码事件 本文为作者原创 转载请注明出处 尊重一下笔者的劳动成果 十分感谢 什么是带参数的二维码事件? 当我们需要扫描二维码进入公众号并且期望可以做一些自定义的业务处理,比如...
  • 通过生成带参二维码,将用户的openid获取的同时做为参数,生成后,另一个用户扫码该二维码,系统可以获取到新用户openid的同时,也能标识着是哪个用户码了. 更多的图 通过上图可以看到,当A君关注B君展示的推广...
  • 需求: 第三方操作平台可以通过微信和企业微信码登录登录获取用户信息
  • 微信平台码登录时,因为开放平台的openid与原系统不一致,所以使用了原公众平台二维码扫码后获取用户openid,继而转链接形式. 油腻腻的大猪蹄进行测试oysIt005E1TDKTKIdc8TmR6VTViA < 使用开放平台的登录二维码...
  • 1.推荐者生成带参数二维码,这里我已经写过,就不再写了;写下获取access_token function __construct() { $this->appid = config('WXAPP_APPID'); $this->secrect = config('WXAPP_APPSECRET'); $this->...
  • 由于我只研究了1天时间,可能有些地方认知错误 1:网页版微信码登录的流程 ... 在这两个方法里面要有两个返回路径,第一个是获取权限以后生成二维码的页面,第二个是用户授权以后要跳转 ...
  • 功能描述:点击码按钮,获取二维码信息用户可以在用二维码生成工具生成一个二维码测试 在.wxml页面定义一个码按钮: <text class="saoma" bindtap="addGoosInfo">码</text> 点击码,调用...
  • 1、页面展示钉钉二维码,根据配置信息获取。 开发文档中的第二种实现方式,将钉钉登陆二维码嵌入自有项目的页面中 @RequestMapping("getAppId") @ResponseBody public WebResponse getAppId() throws ...
  • 1.后台传入个人信息保存,以个人信息的“业务类型编码+主键“”作为二维码场景值,换取微信ticket,再根据tiket获取二维码url,解析url生成文件流输出 2.微信后台监听用户扫码事件,从事件从获取场景值并解析出用户...
  • 1、微信公众号获取用户信息需要微信浏览器打开才能获取 2、pc端使用微信登陆,需要微信开发者这个,认证需要每年300,实际上只有码登陆功能是有用的 3、微信二维码事件,可以根据二维码的信息,用户码之后可以...
  • 需求 通过一个聚合二维码,支付宝...提供一个接口,获取用户浏览器请求头信息,判断是支付宝码进入还是微信码进入 包含 micromessenger 的是微信;包含 alipay 的是支付宝 String userAgent = request.getHeader
  • 二维码签到

    千次阅读 2017-06-21 22:10:28
    服务端主要完成课程创建,课程列表,然后查看列表,每一个有个展示,完成二维码扫码,出来此课程的所有学生信息。详细的界面完整流程: 我们的BaseApplication 是全局的Application...设置和获取用户信息。 @Ove
  • 上一篇 《网站实现扫描二维码关注微信公众号,自动登陆网站并获取信息》中已经实现用户扫码登陆网站并获取信息 但是上一篇方案中存在一个问题,也就是文章末尾指出的可以优化的地方(可以点击这个链接去看一下...
  • 只需要用微信一下二维码,这个网站就可以展示你的微信昵称和头像,免去注册账号和输入密码登录的步骤,还免去设置头像和昵称的步骤,所以是挺方便的。 那么如何把自己的网站接入这个呢?首先咱们得先在微信开放...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 230
精华内容 92
关键字:

扫二维码获取用户信息