• 微信公众平台上可配置这些域名。 1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉 2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要求将当前的...
    在微信公众平台上可配置这些域名。

    1.业务域名:在微信浏览器中点击文本框,会弹出下面的提示,很不爽,通过配置业务域名可以将该提示去掉

    2.JS接口安全域名:分享到朋友圈(js-sdk)时用上,此接口要求将当前的界面url加密后,才可以分享到朋友圈。
    采用前后端分离开发时,js-sdk的验证参数通过php接口获得时,会报invalid signature错误。解决方法:前端将当前的window.location.href传到php接口,php代码中将下图中的$url换成前端传过来的url,生成验证相应参数,再返回,在生成分享链接时才不会出错

    3.网页授权域名:用于获取用户针对于公众号的唯一标识openid。但只能添加一个域名。我设置为一级域名后,同一服务器上,通过二级域名访问的就不能通过网页授权了。我的解决方法是,将网页授权的redirect_uri设置为php接口,这样,用户点击https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4e2480691f223ba7&redirect_uri=http://xxx/xxx.php &response_type=code&scope=snsapi_base&state=1#wechat_redirect
    。在php接口中拿到code,调微信的接口,换取openid,再跳转回前端界面,同时把openid带回去。
    展开全文
  • 微信开发的,必不可少的都会涉及到微信网页授权,来获取用户信息的功能。想要实现公众号通过微信网页授权机制,来获取用户基本信息,必须先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权...
    做微信开发的,必不可少的都会涉及到微信网页授权,来获取用户信息的功能。想要实现公众号通过微信网页授权机制,来获取用户基本信息,必须先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,填写授权回调域名。但是呢,在微信公众号后台,业务域名和JS安全域名都可以填写3个,唯独网页授权域名只能填写一个

    现在我只有一个公众号,由于业务需要,我在不同的场景下不同的域名都使用这个公众号,而且都需要获取用户信息。但是网页授权域名只能填写一个,并且只有回调地址的域名与该设置完全相同,才能成功发起微信授权,否则就会提示rediret_uri参数错误。

    那么,就来讲讲怎么突破这个限制,实现多个域名使用一个公众号同时发起网页授权获取到用户基本信息。

    它只能填写一个授权域名,那我们就从这一个域名下手,既然这个授权域名可以顺利拿到网页请求的数据,那我们其他的域名可以先去请求授权域名,然后让授权域名再去微信服务器请求数据,这样就完美解决了。这个授权域名,起到了类似于中介和代理人的作用。实现方法如下:
    1.在公众号后台设置一个授权回调页面域名,比如叫:wx.agency.com,我们可以称其为代理域名。
    2.在wx.agency.com指向的网站根目录下部署一个index.php文件。

    工作原理如下:
    (1)当你的其他域名需要发起微信授权时,将授权请求先发到代理域名wx.agency.com,然后wx.agency.com会把这个请求转发到微信服务器; 
    (2)当用户同意授权后,wx.agency.com会收到微信的授权回调,并把回调结果(code、state参数)原封不动地再返回给最开始发起授权的域名。

    代码实现:
    之前有写过微信网页授权获取用户基本信息,那是常规方法授权获取用户信息,代码如下:

    public function _userInfoAuth($redirect_url){
    	
    	//1.准备scope为snsapi_userInfo网页授权页面
    	$redirecturl = urlencode($redirect_url);
    	$snsapi_userInfo_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$this->_appid.'&redirect_uri='.$redirecturl.'&response_type=code&scope=snsapi_userinfo&state=YQJ#wechat_redirect';
    	
    	//2.用户手动同意授权,同意之后,获取code
    	//页面跳转至redirect_uri/?code=CODE&state=STATE
    	$code = $_GET['code'];
    	if( !isset($code) ){
    		header('Location:'.$snsapi_userInfo_url);
    	}
    	
    	//3.通过code换取网页授权access_token
    	$curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->_appid.'&secret='.$this->_appsecret.'&code='.$code.'&grant_type=authorization_code';
    	$content = $this->_request($curl);
    	$result = json_decode($content);
    	
    	//4.通过access_token和openid拉取用户信息
    	$webAccess_token = $result->access_token;
    	$openid = $result->openid;
    	$userInfourl = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$webAccess_token.'&openid='.$openid.'&lang=zh_CN ';
    	
    	$recontent = $this->_request($userInfourl);
    	$userInfo = json_decode($recontent,true);
    	return $userInfo;
    }
    这次获取用户信息的代码如下:

    //第三方代理服务器授权登录
    public function agencyInfoAuth($redirect_url){
    	
    	//1.准备scope为snsapi_userInfo网页授权页面
    	$redirecturl = urlencode($redirect_url);
    	$snsapi_userInfo_url = 'http://wx.agency.com/index.php?appid='.$this->_appid.'&redirect_uri='.$redirecturl.'&response_type=code&scope=snsapi_userinfo&state=YQJ#wechat_redirect';
    	
    	//2.用户手动同意授权,同意之后,获取code
    	//页面跳转至redirect_uri/?code=CODE&state=STATE
    	$code = $_GET['code'];
    	if( !isset($code) ){
    		header('Location:'.$snsapi_userInfo_url);
    	}
    	
    	//3.通过code换取网页授权access_token
    	$curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->_appid.'&secret='.$this->_appsecret.'&code='.$code.'&grant_type=authorization_code';
    	$content = $this->_request($curl);
    	$result = json_decode($content);
    	
    	//4.通过access_token和openid拉取用户信息
    	$webAccess_token = $result->access_token;
    	$openid = $result->openid;
    	$userInfourl = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$webAccess_token.'&openid='.$openid.'&lang=zh_CN ';
    	
    	$recontent = $this->_request($userInfourl);
    	$userInfo = json_decode($recontent,true);
    	return $userInfo;
    }
    可以卡看到两种方法唯一的区别就在第一步准备scope为snsapi_userInfo网页授权页面链接不同,一个是去open.weixin.qq.com请求数据,另一个是去wx.agency.com请求数据。

    这个方案我亲测有效,虽然增加了一次重定向操作,但实际上不会对用户体验产生多大的影响,真实解决了公众号网页授权域名只能填写一个的问题。

    实现思路来自:http://www.cnblogs.com/lyzg/

    展开全文
  • 微信开发的,必不可少的涉及到微信网页授权,来获取用户信息的功能。想要实现公众号通过微信网页授权机制,来获取用户基本信息,必须先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取...
    做微信开发的,必不可少的涉及到微信网页授权,来获取用户信息的功能。想要实现公众号通过微信网页授权机制,来获取用户基本信息,必须先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,填写授权回调域名。但是呢,在微信公众号后台,业务域名和JS安全域名都可以填写3个,唯独网页授权域名只能填写一个
    展开全文
  • 在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网、论坛、商城等等网页授权是只能一个域名,那么问题来了?这怎么搞?答案就是: 做一个中转服务!域名1:www.test.com域名2: ...

    在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网、论坛、商城等等

    网页授权是只能一个域名,那么问题来了?这怎么搞?

    答案就是: 做一个中转服务!

    域名1:www.test.com

    域名2: bbs.test.com

    这时候,再解析一个二级域名:code.test.com 作为中转授权域名

    并在微信公众平台后台网页授权域名地方填写这个 中转域名

    www.test.com 授权代码改为:

    header("location:http://code.test.com/code.php?ask_type=www");
    

    bbs.test.com 授权代码改为:

    header("location:http://code.test.com/code.php?ask_type=bbs");
    

    code.test.com 域名新建三个文件

    • code_php : 发起授权文件
    • www.php: 返回接收code并跳转www.test.com文件
    • bbs.php : 返回接收code并跳转 bbs.test.com文件

    code_php 文件代码:

    if(isset($_GET['ask_type']) && !empty($_GET['ask_type'])){
        $ask_type = $_GET['ask_type'];
        if($ask_type == 'bbs'){
            $action = "bbs.php";
        }elseif($ask_type == 'www'){
            $action = "www.php";
        }
        //发起授权
        $appid = "";  
        $redirect_url = "http://code.test.com/".$action;
        $code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".urlencode($redirect_url)."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        header("location: ".$code_url);    
        die;
    
    }else{
        echo "nononono";
    }
    

    bbs.php文件代码:

    if(isset($_GET['code']) && !empty($_GET['code'])){
        $code = $_GET['code'];
        $bbs = "http://bbs.test.com/";
        header("location:".$bbs."?code=".$code);
    }else{
        echo 'nonono';
    } 
    

    www.php文件代码:

    if(isset($_GET['code']) && !empty($_GET['code'])){
        $code = $_GET['code'];
        $bbs = "http://www.test.com/";
        header("location:".$bbs."?code=".$code);
    }else{
        echo 'nonono';
    }
    

    目前是两个业务域名。如果还有其他业务,可以按照上述例子新增!


    展开全文
  • 这篇博文跟大家分享下如何配置微信公众号网页授权域名和JS接口安全域名配置。

    这篇博文跟大家分享下如何配置微信公众号网页授权域名和JS接口安全域名配置。


    1. 打开微信公众平台 https://mp.weixin.qq.com/

    2. 登陆成功后进入微信公众平台后台管理,在最底部可以看到 开发—》接口权限
      在这里插入图片描述
      我们可以看到正如下图所示有两个非常常用的接口:微信登陆和微信分享。
      在这里插入图片描述
      关于使用分享接口和不使用分享接口的例子如下图所示:
      在这里插入图片描述
      可以看出使用分享接口是会看起来更美观,用户体验更好。

    3. 接下来讲解下这方面的重点配置 网页授权域名和JS接口安全域名配置

    我们在 设置-------》公众号设置 可以看到网页授权域名JS接口安全域名配置
    在这里插入图片描述
    在配置之前先来说下不配置会出现什么错误:

    JS接口安全域名如果不配置或配置不正确,那么会提示 config:invalid signature

    网页授权域名如果不通,那么将无法微信登陆成功。

    1. 如何配置这两部分呢?

    在Spring Boot 中如果配置了拦截器,那么需要配置如下两处地方:

    import com.xxxx.interceptor.MyTokenAuthorityInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    /**
     * @author qing-feng.zhao
     * @description 静态资源处理
     * @date 2019/11/23 10:06
     */
    @Component
    @Configuration
    public class StaticResourceConfig extends WebMvcConfigurationSupport {
        /**
         * 添加自定义拦截器
         */
        private final MyTokenAuthorityInterceptor myTokenAuthorityInterceptor;
        public StaticResourceConfig(MyTokenAuthorityInterceptor myTokenAuthorityInterceptor) {
            this.myTokenAuthorityInterceptor = myTokenAuthorityInterceptor;
        }
    
        @Override
        protected void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(myTokenAuthorityInterceptor)
                    .addPathPatterns("/**")
                    .excludePathPatterns("/swagger-ui.html/**")
                    .excludePathPatterns("/webjars/**")
                    .excludePathPatterns("/v2/**")
                    .excludePathPatterns("/swagger-resources/**")
                    .excludePathPatterns("/static/**")
                    .excludePathPatterns("/actuator/**")
                    .excludePathPatterns("/csrf/**")
                    .excludePathPatterns("/home-page.do")
                    .excludePathPatterns("/toLoginPage.do")
                    .excludePathPatterns("/read-api-page.do")
                    .excludePathPatterns("/csrf/**")
                    .excludePathPatterns("/csrf")
                    .excludePathPatterns("/MP_verify_oO9gqu9Pv8fY06o0.txt")
                    .excludePathPatterns("/")
                    .order(1);
        }
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //自定义框架资源处理
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
            //Swagger 静态资源处理
            registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
            registry.addResourceHandler("/csrf/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
            registry.addResourceHandler("/MP_verify_oO9gqu9Pv8fY06o0.txt").addResourceLocations("classpath:/MP_verify_oO9gqu9Pv8fY06o0.txt");
        }
    }
    

    如果是纯静态页面,那么我们可以用Jetty .

    之所以推荐使用Jetty 而不是tomcat 是因为Jetty 更加简单,不需要繁琐的配置环境变量,直接java -jar start.jar 方式启动

    Jetty 下载地址: https://www.eclipse.org/jetty/download.html

    完事后我们需要在webapps 目录下创建一个ROOT文件夹,然后将MP_verify_********.txt 放进去。

    这样才可以通过域名:http://xxx.com/MP_verify_********.txt 访问,验证通过视为这个域名可以正常访问。

    当然,Jetty 默认是8080端口,而这里的配置是不支持IP或端口号以及短链域名。
    在这里插入图片描述
    为了解决这个问题,我们可以通过nginx 设置请求转发。

    比如api.xxx.com 域名 80端口映射到这个端口上即可。

    		server {
    			listen       80;
    			server_name  html5.xxx.com;
    			large_client_header_buffers 4 16k;
    			client_max_body_size 300m;
    			client_body_buffer_size 128k;
    			proxy_connect_timeout 600;
    			proxy_read_timeout 600;
    			proxy_send_timeout 600;
    			proxy_buffer_size 64k;
    			proxy_buffers   4 32k;
    			proxy_busy_buffers_size 64k;
    			proxy_temp_file_write_size 64k;
     
    		  location ^~ / {
    		   proxy_redirect off;
    			   proxy_set_header x-real-ip $remote_addr;
    			   proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    		   proxy_set_header host $http_host;
    			   proxy_pass   http://127.0.0.1:8085/;
    		   }
    		}
    		server {
    			listen       80;
    			server_name  api.xxx.com;
    			large_client_header_buffers 4 16k;
    			client_max_body_size 300m;
    			client_body_buffer_size 128k;
    			proxy_connect_timeout 600;
    			proxy_read_timeout 600;
    			proxy_send_timeout 600;
    			proxy_buffer_size 64k;
    			proxy_buffers   4 32k;
    			proxy_busy_buffers_size 64k;
    			proxy_temp_file_write_size 64k;
     
    		  location ^~ /api/ {
    		   proxy_redirect off;
    			   proxy_set_header x-real-ip $remote_addr;
    			   proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    		   proxy_set_header host $http_host;
    			   proxy_pass   http://127.0.0.1:8087/api/;
    		   }
    		}
    

    上面是HTML5映射,下面是Restful API 地址。

    如果是请求api.xxx.com 就将http://api.xxx.com:80端口映射到 http://api.xxx.com:8087/api/

    如果是请求html5.xxx.com 就将http://html5.xxx.com:80端口映射到 http://api.xxx.com:8085

    最后按照JS-SDK 进行开发即可

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

    本篇完~

    展开全文
  • 由于微信网页开发,需要获取用户信息,所以就需要网页授权,但是在微信公众平台公众号只能设置一个回调域名,现在 只有一个公众号,但是我多个业务不同的域名,并都需要拿到用户信息,这时一个回调域名肯定是不能...
  • 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 现在,我们要实现一个微信网页,通过微信访问网页时,网页会展示微信用户的个人信息。因为涉及...
  • 1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个...
  • 所有微信开发的相关内容,都需要参考官方文档。 [微信公众平台|开发文档] http://mp.weixin.qq.com/wiki/home/。 一、通过网页授权,可以获取用户微信的基本信息。 二、总共有5个步骤: 1 :用户同意授权,...
  • 刚接触微信开发,对后台设置的几个域名有点搞不清。看下微信后台 公众号设置-功能设置里面,具体内容见下图:1.业务域名 :据说是微信浏览器中访问域名内容,和提示红色安全提醒,添加到这里面的域名就不存在这个...
  • 微信公众号网页授权(springboot) 第一步在微信公众平台中找到网页授权,若没有微信公众号,可以用测试号来进行 官方链接: http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 其中Token可以随便写,可能...
  • 第一步在微信公众平台中找到网页授权       然后再填写授权回调页面,这里的页面如同手册里面一样 以xxx.xxxxx.com 即可 而且此处的域名一定要和代码中回调地址在同一个域名之下。       关于...
  • 微信公众号网页授权登录: 前端时间做了一个微信公众号的项目,就是微信公众号的菜单点击我的个人中心,就向用户授权登录 获取用户的信息,进行业务逻辑的操作,微信公众号官方文档,这是我写的文章,里面有很多...
  • 一、方式一:手动实现微信授权 1、若没有微信公众号,可以用测试号来进行测试号 (1)官方链接:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 其中Token可以随便写,可能一开始配置的URL...
  • 微信开发——网页授权 项目需求:通过用户在微信中打开网页获取用户的openid来实现绑定消费卡的功能。 项目开发:首先我们需要配置微信的运行环境,这里请参考我的第一篇关于微信开发的日志。 第一步我们得去平台...
  • 首先 ,你需要微信能够访问到的一个域名,将其配置到微信公众平台。  如图: 授权回调域名配置规范为全域名并且不带http,比如需要网页授权域名为:www.qq.com,配置以后此域名下面的页面...
  • 在做微信公众号开发的时候,用到了Web网页开发,由于需要获取微信用户信息,所以需要调用微信网页授权接口,根据官方手册,需要配置一个微信授权回调域名。但本地开发测试的时候,开发或测试机器与域名绑定的IP不...
  • 通常一个企业可能有多个网站,每个业务方向,或者产品类型都会有单独的一个网站,但是微信支付或登录,只允许填写一个网页授权域名,我们不可能每个网站都去申请一个公众号,且不说每年300元的成本,主要是管理起来...
  • 微信网页授权域名目前最多可以填写两个!!!,那么问题来了?这应该怎么办? 答案就是: 做一个中转服务! 域名1: www.test.com 域名2: bbs.test.com 中转域名:zhongzhuan.test.com (说明!域名不一定...
1 2 3 4 5 ... 20
收藏数 7,955
精华内容 3,182