微信扫码登陆_微信扫码登陆回调处理 - CSDN
精华内容
参与话题
  • 微信开放平台扫码登录

    千次阅读 2019-03-13 14:36:11
    微信开放平台扫码登录的功能只有已经认证过的微信公众号才可以使用,很多学习微信的同学可能没办法使用这个功能,但是别担心,以下网址中有很多账号可以使用:【想要获取更多公众账号可以关注微信公众号:小D课堂】 ...

           微信开放平台扫码登录的功能只有已经认证过的微信公众号才可以使用,很多学习微信的同学可能没办法使用这个功能,但是别担心,以下网址中有很多账号可以使用:【想要获取更多公众账号可以关注微信公众号:小D课堂】

    https://mp.weixin.qq.com/s?__biz=MzUyMDg1MDE2MA%3D%3D&idx=2&mid=2247483689&sn=55ecd5f4d00dd6de029756902459fd2b

     

    应用一:

    应用名称:漫道

    AppID:wx2a6cf9373f278ed2

    Appsecret:b32af04d9062ebc44b3f5d8b87a5a48e

    回调域名配置:testxdclass.tunnel.qydev.com

    应用二:

    应用名称:狼途

    AppID:wx025575eac69a2d5b

    Appsecret:72024309d9751d33e97e9d2a66e89944

    回调域名配置:test16web.tunnel.qydev.com

       首先一个问题就是项目的域名和微信授权域名不一致,没办法把自己的域名设置到,比如我的项目域名为  t238997p11.qicp.vip ,那么希望的是,当访问微信后台授权的域名时,能自动跳转到我自己的域名,这样就能运行后台代码。

    ----------------------------------------------------------------------------------------------------------------------- 

    以我自己使用的账号为例:

    openAppId: wx277996c4d2772104   #开放平台appid
    openAppSecret: xxxxxxxxxxxxxxxxxxxxxxxxxxx  #开发平台appSecret
    wechatOpenAuthorize: testdev.tunnel.qydev.com  #回调域名

    一、第一步:安装nginx进行代理

    1、下载安装nginx :官方网址:http://nginx.org/en/download.html

          点击进入官网,下载稳定版

    解压后点击nginx.exe,打开任务管理器,看到如下图说明nginx已开启

     

    2、利用nginx进行代理,使得当访问 testdev.tunnel.qydev.com 这个授权域名的时候,能够访问到我自己的后台代码。

    即,当访问 http://testdev.tunnel.qydev.com 【80端口省略不写】时等价于访问127.0.0.1:8080

    (1)配置nginx.conf

    注意:A:proxy_pass  代理的是upstream中的内容,并且upstream后面的名称一定要与proxy_pass  后面的一致

               B:监听的端口号一定是80,如果80端口已被占用一定要先解除占用

              C:server_name  是微信的已授权域名

     upstream sell
        {
            server 127.0.0.1:8080;
        }

        server {
            listen       80;
            server_name  testdev.tunnel.qydev.com;

            location / {
                 proxy_pass  http://sell;
            }

    }

    (2)修改hosts文件(在C:\Windows\System32\drivers\etc目录下)

    添加:127.0.0.1  testdev.tunnel.qydev.com

    二、SpringBoot后台代码

    @Controller
    @RequestMapping("/wechat")
    @Slf4j
    public class WechatController {
    
        @Autowired
        private WxMpService wxOpenService;
    
        /**
         * 微信开放平台授权登录
         *
         * @param returnUrl
         * @return
         */
        //访问:http://127.0.0.1:8080/sell/wechat/qrAuthorize?returnUrl=http://www.imooc.com
        @GetMapping("/qrAuthorize")
        public String qrAuthorize(@RequestParam("returnUrl") String returnUrl){
            String url = "http://testdev.tunnel.qydev.com/sell/wechat/qrUserInfo";
            String redirectUrl = wxOpenService.buildQrConnectUrl(url,WxConsts.QrConnectScope.SNSAPI_LOGIN, URLEncoder.encode(returnUrl));
            log.info("微信开放平台授权获取code,redirectUrl={}",redirectUrl);
            return "redirect:" + redirectUrl;
        }
    
        /**
         * 微信开放平台扫码获取openid
         *
         * @param code
         * @param returnUrl
         * @return
         */
        @GetMapping("/qrUserInfo")
        public String qrUserInfo(@RequestParam("code") String code,
                                 @RequestParam("state") String returnUrl){
            WxMpOAuth2AccessToken wxMpOAuth2AccessToken = new WxMpOAuth2AccessToken();
            try {
                wxMpOAuth2AccessToken = wxOpenService.oauth2getAccessToken(code);
            } catch (WxErrorException e) {
                log.info("[微信网页授权] {}",e);
                throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(),e.getError().getErrorMsg());
            }
            //获取openid
            String openId = wxMpOAuth2AccessToken.getOpenId();
    
            return "redirect:" + returnUrl+"?openid=" + openId;
        }
    }

    三、结果

    访问:  http://127.0.0.1:8080/sell/wechat/qrAuthorize?returnUrl=http://www.imooc.com

    出现如下图所示,地址栏变为:https://open.weixin.qq.com/connect/qrconnect?appid=wx277996c4d2772104&redirect_uri=http%3A%2F%2Ftestdev.tunnel.qydev.com%2Fsell%2Fwechat%2FqrUserInfo&response_type=code&scope=snsapi_login&state=http%3A%2F%2Fwww.imooc.com#wechat_redirect

    微信扫码后跳转到returnUrl后的回调地址 http://www.imooc.com,并返回openid

    地址栏变为 https://www.imooc.com/?openid=XXXXXJGsKKpEqGMEt7V7XXXXXX

    按照上述步骤微信扫码登录就实现了!!如果还有什么问题欢迎指教!!

    微信开放平台参考手册:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN

     

    展开全文
  • 微信扫码登录功能实现

    千次阅读 2019-09-17 07:19:53
    原因:很简单,公司的账号登录需要用到微信扫码登录与QQ的登录功能,所以,在做好了微信的扫码登录之后,本人就写这篇微信扫码登录功能实现的教程 教程开始 需要用到的网站: https://open.weixin.qq.com/ ...

    原因:很简单,公司的账号登录需要用到微信扫码登录与QQ的登录功能,所以,在做好了微信的扫码登录之后,本人就写这篇微信扫码登录功能实现的教程

    教程开始

    需要用到的网站:

    1. https://open.weixin.qq.com/  微信开放平台
    2. https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=a655e356d87d4d330ed5cbaf1324389741826089&lang=zh_CN  微信开放平台文档

     

    准备工作:

    1. 首先当然登录这个微信开放平台啦,不然怎么做扫码登录的功能

    2. 新建一个应用

     

    3. 新建完应用后是这样子的

     

    4. 进行开发者认证,1年300RMB,之前开发的时候没有进行开发者认证,微信那边一直说我有错误,后面又google又百度的,直到认证后,才正常开发

    5. 设置回调地址,这里的地址相当于回调域名,可以不用详细到访问的方法内(例:http://www.baidu.com)

     

    准备工作完成,正式开发

     

    1. 写一个获取服务器返回数据的自定义函数或者使用PHP的 file_get_content 函数

    这里的自定义函数的使用CURL

    PHP CURL
    //php curl(GET)请求
    public function curlGet($url){
        if(empty($url)){
            return false;
        }
        $output = '';
    
        $ch = curl_init();
        $str =$url;
        curl_setopt($ch, CURLOPT_URL, $str);
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
        $output = curl_exec($ch);
        return $output;
    }
    

     

    2. 浏览器打开网址,这个网址是一张二维码图片,二维码的信息则是你创建的应用信息

    092304_Nrj6_3554366.png

    网址:https://open.weixin.qq.com/connect/qrconnect?appid=appid&redirect_uri=redirect_uri&response_type=code&scope=snsapi_login&state=state

    参数 是否必须 说明
    appid 应用中的APPID
    redirect_uri 这是回调地址,先要在授权回调域设置回调的域名地址,然后这里填写的是回调域名下需要访问的方法(这里需要使用编码 URL 字符串函数urlencode())
    response_type 是     code固定参数
    scope snsapi_login 固定参数, 这里有多个参数,可以用 ‘ , ’分隔,当前仅仅做微信登录,则填写snsapi_login这个参数
    state 可以不填,用于防止csrf攻击,你发送什么参数,服务器则返回什么参数给你

     

    3. 用微信的扫一扫获取二维码中的code参数

    参数 说明
    code code参数
    state 用于防止csrf攻击,你发送什么参数,服务器相应返回什么参数给你

     

    4. 发送ACCESS_TOKEN获取请求

    使用 curlGet() 自定义函数访问以下网址

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

     

    参数 是否必须 说明
    appid 应用中的APPID
    secret 应用中的AppSecret
    code 上一步所获得的code参数
    grant_type authorization_code 固定参数

     

    5. 获取ACCESS_TOKEN参数

    参数 说明
    access_token 接口调用凭证
    expires_in access_token接口调用凭证超时时间
    refresh_token 用户刷新access_token
    openid 授权用户唯一标识
    scope snsapi_login 固定参数,用户授权的作用域,使用逗号(,)分隔
    unionid 已获得该用户的userinfo授权时,才会出现该字段。

     

    6. 发送获取OPENID请求

    使用 curlGet() 自定义函数访问以下网址

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

    参数 是否必须 说明
    access_token 接口调用凭证
    openid 授权用户唯一标识

     

    7. 获取用户信息

    参数 说明
    openid 授权用户唯一标识
    nickname 微信用户呢称
    sex 性别
    province 省份
    city 城市
    country 国家
    headimgurl 微信头像地址   最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    privilege 用户特权信息,json数组
    unionid 用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的

     

     

    结语

    到这里你已经成功的获取到你微信的对外信息了,你可以根据公司的开发需求开发出你所需要的微信扫码登录功能

     

     

    转载于:https://my.oschina.net/u/3554366/blog/1506955

    展开全文
  • java实现PC网站实现微信扫码登陆

    万次阅读 2019-04-03 15:57:10
    近期,开发一个项目要求PC网站可以进行扫码登陆。 1.前期工作 需要先在微信开放平台进行注册(https://open.weixin.qq.com/),并认证一个网站应用。 点击查看按钮,我们需要记录一下AppID,AppSercret的值,...

    近期,开发一个项目要求PC网站可以进行扫码登陆。

    1.前期工作

    需要先在微信开放平台进行注册(https://open.weixin.qq.com/),并认证一个网站应用。

    点击查看按钮,我们需要记录一下AppID,AppSercret的值,尤其第一次登陆的话生成好的AppSercret值一定要保存好。

    这个接口主要用来就是登陆的,我们可以看到他的作用文档写的很详细,只是用来登陆的,不能作为他用,比如我这个项目还需要页面微信扫码支付的操作,只是开通一个这个应用是不够的,我们需要开通其他的带有支付的功能的应用连接商户平台才可以使用微信支付,我的做法是申请了一个服务号,绑定商户平台开通了微信支付功能,这里先不讲解,后期会写到微信支付。

    这里面主需要记录AppID,AppSercret ,其中设置的地方就是授权回调域,不需要带www等 直接域名即可

     

    2.开发阶段

     

    2.1 参数配置

    这些都是通用的大家直接拿去用  参数直接可以配置在application.properties 中 方便我们直接调用

    weixin.pc.fw.accessTokenUrl=https://api.weixin.qq.com/sns/oauth2/access_token?
    weixin.pc.fw.userInfoUrl=https://api.weixin.qq.com/sns/userinfo?

    这两个就是上面让大家记住的两个参数

    weixin.pc.fw.appID=111111111111
    weixin.pc.fw.appsecret=11111111111111

     

    2.2 连接地址

    根据文档要求正常写就行

    https://open.weixin.qq.com/connect/qrconnect?appid=AAA&redirect_uri=BBB&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect

    AAA就是让大家记住的那个参数

    BBB就是回调地址,一定是跟我之前让大家在开放平台设置的回调域名下的地址

    2.3后端代码实现

    getPcWXAccessToken  getPcWeiXinUserInfo 这两个方法可以直接用

    pcLoginByWeiXin 这个方法由于里面有我得业务逻辑,我直接删吧删吧就扔上来了,大家直接调试下就可以了,放心可用。

        @Value("${weixin.pc.fw.accessTokenUrl}")
        private String pcAccessTokenUrl;
    
        @Value("${weixin.pc.fw.userInfoUrl}")
        private String pcUserInfoUrl;
    
    
    @RequestMapping(value = "/pcLoginByWeiXin", method = RequestMethod.POST)
    	@ResponseStatus(HttpStatus.OK)
    	public SourceDataBean<UserLoginBean> pcLoginByWeiXin(@RequestBody WeiXinLoginBean bean) {
    		logger.info("WeiXinLoginController ==> pcLoginByWeiXin(){} code: " + bean.getCode());
    		SourceDataBean<UserLoginBean> sdb = new SourceDataBean<UserLoginBean>();
    		UserLoginBean userLoginBean = new UserLoginBean();
    		String loginName = bean.getLoginName();
    		String openId = bean.getOpenId();
    		String code = bean.getCode(); // 微信code
    		/** 错误信息 **/
    		if (StringUtils.isBlank(userId) && StringUtils.isBlank(code) && loginName == null) {
    			sdb.setMessage("501", "微信code为空");
    			return sdb;
    		}
    		if (openId == null && code != null) {
    			// 第一次进入界面,code不空,openid为空,根据code获取openid,然后查询是否存在用户信息。
    			Map<String, String> accessTokenMap = getPcWXAccessToken(code); // 获取getWXAccessToken(微信网站PC扫码登录)
    			/** 请求微信服务器错误 **/
    			if (accessTokenMap.get("errcode") != null) {
    				logger.error("LoginController ==> newLoginByWeiXin.getWXAccessToken(){errcode:"
    						+ accessTokenMap.get("errcode") + ",errmsg:" + accessTokenMap.get("errmsg") + "}");
    				sdb.setMessage(accessTokenMap.get("errcode"), accessTokenMap.get("errmsg"));
    				return sdb;
    			}
    			openId = accessTokenMap.get("openid");
    			accessToken = accessTokenMap.get("access_token");
    			unionid = accessTokenMap.get("unionid");
    
    			// 查询出微信信息
    			Map<String, String> wxUserMap = this.getPcWeiXinUserInfo(openId, accessToken); // 获得微信用户信息
    	
    			/** 获取微信信息异常 **/
    			if (wxUserMap.get("errcode") != null) {
    				logger.error("LoginController ==> loginByWeiXin.getWeiXinUserInfo(){errcode:" + wxUserMap.get("errcode")
    						+ ",errmsg:" + wxUserMap.get("errmsg") + "}");
    				sdb.setMessage(wxUserMap.get("errcode"), wxUserMap.get("errmsg"));
    				return sdb;
    			
    
    
    			}
    		
    				
    		}
    		return sdb;
    	}
    
    	/**
    	 * 获取getPcWXAccessToken(微信网站PC扫码)
    	 * 
    	 */
    	private Map<String, String> getPcWXAccessToken(String code) {
    		logger.info("WeiXinLoginController ==> getPcWXAccessToken(){}");
    		Map<String, String> resMap = new HashMap<String, String>();
    		StringBuffer target = new StringBuffer();
    		target.append(pcAccessTokenUrl).append("appid=").append(pcAppID).append("&secret=").append(pcAppsecret)
    				.append("&code=").append(code).append("&grant_type=authorization_code");
    		logger.info("WeiXinLoginController ==> getPcWXAccessToken(){} target: " + target);
    		ClientResponseEntity responceEntity = HttpClientUtil.getMethod(target.toString(), "zh-cn");
    		String resMessageString = responceEntity.getMessage();
    		logger.info("WeiXinLoginController ==> getPcWXAccessToken(){} resMessageString: " + resMessageString);
    		JSONObject jSONObject = JSON.parseObject(resMessageString);
    		if (jSONObject != null && jSONObject.get("errcode") != null) { // 有错误码
    			String errcode = String.valueOf(jSONObject.get("errcode"));
    			String errmsg = String.valueOf(jSONObject.get("errmsg"));
    			resMap.put("errmsg", errmsg);
    			resMap.put("errcode", errcode);
    		} else {
    			String accessToken = String.valueOf(jSONObject.get("access_token"));
    			String refreshToken = String.valueOf(jSONObject.get("refresh_token"));
    			String openid = String.valueOf(jSONObject.get("openid"));
    			String expiresIn = String.valueOf(jSONObject.get("expires_in"));
    			String unionid = String.valueOf(jSONObject.get("unionid"));
    
    			resMap.put("access_token", accessToken);
    			resMap.put("refresh_token", refreshToken);
    			resMap.put("openid", openid);
    			resMap.put("expires_in", expiresIn);
    			resMap.put("unionid", unionid);
    		}
    		return resMap;
    	}
    
    	/**
    	 * 获得微信用户信息(微信网站PC扫码)
    	 * 
    	 * @param openId
    	 * @param accessToken
    	 * @return
    	 */
    	private Map<String, String> getPcWeiXinUserInfo(String openId, String accessToken) {
    		Map<String, String> resMap = new HashMap<String, String>();
    		StringBuffer url = new StringBuffer(pcUserInfoUrl);
    		url.append("access_token=").append(accessToken).append("&").append("openid=").append(openId).append("&")
    				.append("lang=zh_CN");
    		logger.info("WeiXinLoginController ==> getPcWeiXinUserInfo(){} url: " + url);
    		ClientResponseEntity responceEntity = HttpClientUtil.getMethod(url.toString(), "zh_CN");
    		String resMessageString = null;
    		try {
    
    			resMessageString = new String(responceEntity.getMessage().getBytes("ISO-8859-1"), "UTF-8");
    			// resMessageString =new
    			// String(responceEntity.getMessage().getBytes(),"utf-8");
    		} catch (UnsupportedEncodingException e) {
    			logger.error("WeiXinLoginController ==> getPcWeiXinUserInfo().UnsupportedEncodingException{} 获取用户信息编码错误");
    		}
    		logger.info("WeiXinLoginController ==> getPcWeiXinUserInfo(){} resMessageString: " + resMessageString);
    		JSONObject jSONObject = JSON.parseObject(resMessageString);
    		if (jSONObject != null && jSONObject.get("errcode") != null) {
    			String errcode = String.valueOf(jSONObject.get("errcode"));
    			String errmsg = String.valueOf(jSONObject.get("errmsg"));
    			resMap.put("errmsg", errmsg);
    			resMap.put("errcode", errcode);
    		} else {
    			String nickname = String.valueOf(jSONObject.get("nickname"));
    			String openid = String.valueOf(jSONObject.get("openid"));
    			String sex = String.valueOf(jSONObject.get("sex"));
    			String province = String.valueOf(jSONObject.get("province"));
    			String city = String.valueOf(jSONObject.get("city"));
    			String country = String.valueOf(jSONObject.get("country"));
    			String headimgurl = String.valueOf(jSONObject.get("headimgurl"));
    			String unionid = String.valueOf(jSONObject.get("unionid"));
    
    			resMap.put("nickname", nickname);
    			resMap.put("openid", openid);
    			resMap.put("sex", sex);
    			resMap.put("province", province);
    			resMap.put("city", city);
    			resMap.put("country", country);
    			resMap.put("headimgurl", headimgurl);
    			resMap.put("unionid", unionid);
    		}
    		return resMap;
    	}
    
    
    
    

    2.4调试的时候前端JS的写法

    		 	var openId = localStorage.getItem('openId');
    			$(document).ready(function () {
    				var user = localStorage.getItem('user');
    			 	var code = getUrlParam('code');
    				alert(code);
    			 	if(code!=null){
    				alert(commonIP + "api/weixinlogin/pcLoginByWeiXin");
    					$.ajax({
    						type: "POST",
    						url: commonIP + "api/weixinlogin/pcLoginByWeiXin",
    						data: JSON.stringify({
    							"code":code
    						}) ,
    						contentType: 'application/json',
    						success: function(data) {
    							if (data.errcode == 200) {
    								openId = data.openId;
    								for (var i=0;i<data.dataSource.total;i++) {
    									if(data.dataSource.list[i] != null 
    										&& data.dataSource.list[i].user!=null
    										&& data.dataSource.list[i].user.id != null){
    										$('#farm_username').append('<option style="text-align:center;" value='+data.dataSource.list[i].user.id+'>'+
    										data.dataSource.list[i].user.farmName+':'+data.dataSource.list[i].user.name+'</option>')
    									}
    				                } 
    							} else {
    								if(data.errcode == '400'){
    									openId = data.openId;
    									window.top.location.href = 'login.html?openId='+openId;
    								}else if(data.errcode == '40029'){
    									alert('无效的微信code');
    								}
    							}
    						}
    					});
    			 	}else if(user != null){
    					$('#farm_username').append('<option value='+JSON.parse(user).id+'>'+
    										JSON.parse(user).farmName+':'+JSON.parse(user).name+'</option>')
    				}
    			});

    这样我们PC端微信扫码登陆的功能就完成了

    3.效果 

     

     

     

    展开全文
  • 为了让用户登录网站的门槛...好了,就先谈一谈微信扫码登录的整个流程吧。  第一步,我们必须得把二维码放在页面上显示。首先普及一下二维码是有失效时间以及失效状态的,一旦你扫过一次二维码或者在某段时间内没...

    为了让用户登录网站的门槛更低,微信扫一扫登录变得越来越广泛,所以最近加紧赶制的项目中有用到这个功能,此篇文字的出发点基于微信开放平台已经配置好域名(80端口)并且认证成功获得app_id和secret并有权限调用微信的接口。好了,就先谈一谈微信扫码登录的整个流程吧。

      第一步,我们必须得把二维码放在页面上显示。首先普及一下二维码是有失效时间以及失效状态的,一旦你扫过一次二维码或者在某段时间内没有扫描页面上的二维码,该二维码就失效了。OK,微信官网给我们提供两种方式来显示二维码:1.后台发请求返回一个新的页面;2.前端js实例化二维码内嵌在自己的页面上,显然第一种比较适合懒的人(因为微信直接返回一个打包好的页面啊有木有,都不用各种css调样式了),不过在项目中两种都在用,所以就都说明一下。

      1.后台发请求获取微信返回的扫码页面

    $redirect_uri="http://你的微信开放平台绑定域名下处理扫码事件的方法";
    $redirect_uri=urlencode($redirect_uri);//该回调需要url编码
    $appID="你的appid";
    $scope="snsapi_login";//写死,微信暂时只支持这个值
    //准备向微信发请求
    $url = "https://open.weixin.qq.com/connect/qrconnect?appid=" . $appID."&redirect_uri=".$redirect_uri
    ."&response_type=code&scope=".$scope."&state=STATE#wechat_redirect";
    //请求返回的结果(实际上是个html的字符串)
    $result = file_get_contents($url);
    //替换图片的src才能显示二维码
    $result = str_replace("/connect/qrcode/", "https://open.weixin.qq.com/connect/qrcode/", $result);
    return $result; //返回页面

     这样子就会返回一个这样的页面,扫描后调用$redirect_uri,

      2.内嵌JS显示:

      这里就是通过js端实例化一个对象即可,首先在<head>标签内添加如下js文件,

     <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>

      其次在html中定义一个div包含二维码,

    <div id="login_container"></div>

        最后在$(document).ready()内进行实例化: 

    $(document).ready(function()
    {
        var obj = new WxLogin
        ({
            id:"login_container",//div的id
            appid: "你的appid",
            scope: "snsapi_login",//写死
            redirect_uri:encodeURI("你的处理扫码事件的方法") ,
            state: "",
            style: "black",//二维码黑白风格        
            href: "https://某个域名下的css文件"
        });
    });

     

      注意其中href里指向的css文件必须放在https协议下才能引用的到,不然页面上就是默认样式(显示上是一个比较大的二维码,你无法调节二维码的大小,位置,太痛苦了)。最后部分页面大概长成这样,这里的二维码大概只有140px:

      

      好了,二维码出现在页面上了,接下来我们就要大概的讲讲扫码的逻辑了,整个流程大概分为5步:

      走完这五步你就拿到扫码用户的所有信息了,之后再写上自己需要的的代码逻辑即可(如重定向或者登陆),在代码里的表现形式如下:

    //回调
    public function codeinfo()
    {
            $code = $_GET["code"];
            $appid = "你的appid";
            $secret = "你的secret";
            if (!empty($code))  //有code
            {
                //通过code获得 access_token + openid
               $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid
                . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
                $jsonResult = file_get_contents($url);
                $resultArray = json_decode($jsonResult, true);
                $access_token = $resultArray["access_token"];
                $openid = $resultArray["openid"];
    
                //通过access_token + openid 获得用户所有信息,结果全部存储在$infoArray里,后面再写自己的代码逻辑
                $infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid;
                $infoResult = file_get_contents($infoUrl);
                $infoArray = json_decode($infoResult, true);
         } 
    }
    展开全文
  • 微信扫码登录原理解析

    万次阅读 多人点赞 2017-12-17 11:52:36
    关于扫码登录的简单总结
  • 微信扫码登录实战(附代码)

    千次阅读 2018-10-11 22:55:38
    导读:由于微信端流量比较足,所以扫码登录系统功能也受到了很多系统的青睐,本文就来详细的解开该技术的面纱。 演示效果 准备工作 1. 需要一个微信开放平台账号,并创建一个网站应用 点击查看该应用,将...
  • 具体流程可以看微信官网的扫码登录文档 地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN 其实...
  • 微信扫码登录流程

    千次阅读 2019-11-23 20:46:52
    扫码登录看起来神奇,主要是因为微信 APP 扫自家的码会做一些普通二维码软件不会做的额外的操作,那就是将当前已登录的微信和扫出来的 ID 提交到微信服务器,类似的应用还有扫码支付、扫码加公众号等功能,实现流程...
  • 1、OAuth2.0简介  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该... ...每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某...
  • 实现微信扫码登录需要一个认证的服务号,因为实现这个功能需要调用微信提供的接口生成一个带参的公众号二维码,而这个带参二维码生成接口只有认证的服务号才拥有这个接口的使用权,接口说明如图1-...
  • 为了完成这个功能,疯狂百度各种扫码登录的技术文章,能实现微信或企业微信扫码登录的方式可以说有三种: 1.注册一个微信资源开放平台账号。官方链接是这个https://open.weixin.qq.com/。看网站应用模块即可,...
  • 我是做Java开发,公司有个网站需要用微信做三方登录,这个微信开放平台上都有,但还有个要求是用户扫码登录之后手机端微信自动跳转到公司的公众号上的一篇文章去,其实就是一个网页嘛,现在不知道怎么做这个自动跳转...
  • 微信扫码登录,网页授权登录步骤

    千次阅读 2018-07-18 11:28:49
    转发: https://blog.csdn.net/han_xiaoxue/article/details/78202551
  • 最近着手开发了微信网页扫码登录和公众号授权登录收获颇丰,两者的开发很类似。以下是我个人摸索过程中发现的两者的异同: 两者都可以通过微信客户端扫码授权的方式,让第三方页面获得微信用户的一些基本信息(昵称...
  • ... 网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢?... 微信扫
  • 今天遇到一个问题,做的网站,通过安卓手机微信扫一扫二维码或者识别二维码链接无法跳转,显示白屏,但是ios的微信扫码就没有问题,一开始认为是安卓版微信做了限制,后来分析了下扫码后跳转的链接,发现了这个问题...
  • 微信扫码登录是如何实现的?

    万次阅读 2018-11-21 10:45:20
    网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入...微信扫码界面 如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址: https://login.weixin.qq.com/l/...
  • 微信扫码支付:此公众号并没有这些scope的权限,错误码:10005
  • 如题如何,二维码生成用的是QrCode,里面放了一个地址。扫描后可以挑战到二维码中存储的那个地址。 请教一下。我跳转到我指定的请求地址的时候如何获取扫描用户的openid
  • 2 在应用里需要配置 工作台应用主页 (即扫码后的跳转地址) 和 企业微信授权里的授权回调域 (必须跟跳转地址是相同域名)3 开始开发 文档地址<!DOCTYPE html> <meta http-equiv="Content-Type" content="
1 2 3 4 5 ... 20
收藏数 55,113
精华内容 22,045
关键字:

微信扫码登陆