微信oauth_企业微信oauth2 - CSDN
精华内容
参与话题
  • OAuth2.0实现API设计(微信登录)

    千次阅读 2019-07-04 15:11:22
    互联网API开放平台Oauth2.0认证原理 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。 oauth2.0认证协议比容现在qq联合登录,微信联合登录。第三方登录。 oauth...

    互联网API开放平台Oauth2.0认证原理

    OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。 oauth2.0认证协议比容现在qq联合登录,微信联合登录。第三方登录。 oauth2.0原理(appid、appsecret、access_tokent、回调地址、授权地址)。
    1. 在微信开放平台申请对应的appid信息。
    2. 然后在接口上生成对应的授权链接。
    3. 用户确定微信登录之后,跳转回调地址(需要配置域名权限)
    4. 获取到授权码code,使用授权码获取电影access_token
    5. 使用sccess_token openid 获取用户信息(openid想到与user_id)

    1.为什么会产生oauth2.0认证
    互联网开放平台接口相互调用保证接口安全(大型的互联网公司)。
    不同开放平台,对接的oauth2.0协议流程相同。
    学好这个微信登录,差不多都能登录,只是可能有些参数不用

    2.微信测试项目
    我们先做小程序登录,这里我们需要申请一下微信测试账号我这里使用SpringBoot对接的先在application.yml配置好测试参数,你们申请下来用自己的就行,哪有出来问题随时问我就行

    spring:
      mvc:
        view:
          # 页面默认前缀目录
          prefix: /WEB-INF/jsp/
          # 响应页面默认后缀
          suffix: .jsp
          
    appid: wx4cdae9126a8640f4
    secret: 15beb10a813c4fd3a89b870ac71fdce0
    redirectUri: http://127.0.0.1:80/callback
    ### 生成微信授权
    authorizedUrl: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
    ###获取code后,请求以下链接获取access_token
    access_token: https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    ###拉取用户信息(需scope为 snsapi_userinfo)
    userinfo: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
    
    server:
      port: 80
    

    得配置一个工具类,把application里面参数给接收过来,

    @Component
    public class WeiXinUtils {
    	@Value("${appid}")
    	private String appId;
    	@Value("${secret}")
    	private String secret;
    	@Value("${redirectUri}")
    	private String redirectUri;
    	@Value("${authorizedUrl}")
    	private String authorizedUrl;
    	@Value("${access_token}")
    	private String accessToken;
    	@Value("${userinfo}")
    	private String userinfo;
    
    	/**
    	 * 生成授权登录
    	 */
    	public String getAuthorizedUrl() {
    		return authorizedUrl.replace("APPID", appId).replace("REDIRECT_URI", URLEncoder.encode(redirectUri));
    	}
    	
    	/**
    	 * 获取code后,获取access_token
    	 * @param code
    	 * @return
    	 */
    	public String getAccessTokenUrl(String code) {
    		return accessToken.replace("APPID", appId).replace("SECRET", secret).replace("CODE", code);
    	}
    
    	/**
    	 * 获取用户
    	 * @param accessToken
    	 * @param openId
    	 * @return
    	 */
    	public String getUserInfo(String accessToken, String openId) {
    		return userinfo.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
    	}
    
    }
    
    

    先请求一下生成链接页面,请求一下,http://localhost/authorizedUrl 路径,会叫我们在微信登录,生成一个链接,我们可以把这个链接直接复制到微信上面,到这里一个基本的微信小程序登录就写好了在这里插入图片描述
    在这里插入图片描述

    // 生成授权链接
    	@RequestMapping("/authorizedUrl")
    	public String authorizedUrl() {
    	    
    	    System.out.println(weiXinUtils.getAuthorizedUrl());
    		return "redirect:" + weiXinUtils.getAuthorizedUrl();
    	}
    

    在这里插入图片描述

    刚想整合一下微信网页登录,发现我的账号是订阅号,完蛋,中奖了,订阅号好像都不能扫码登录,还是什么毛病,真的不知道了
    在这里插入图片描述

    那直接写微信登录后的回调地址吧

    // 微信授权回调地址
    	@RequestMapping("/callback")
    	public String callback(String code, HttpServletRequest request) {
    		// 1.使用Code 获取 access_token
    		String accessTokenUrl = weiXinUtils.getAccessTokenUrl(code);
    		System.out.println("根据code获取用户信息"+accessTokenUrl);
    		
    		JSONObject resultAccessToken = HttpClientUtils.httpGet(accessTokenUrl);
    		boolean containsKey = resultAccessToken.containsKey("errcode");
    
    		if (containsKey) {
    			request.setAttribute("errorMsg", "系统错误!");
    			return errorPage;
    		}
    		// 2.使用access_token获取用户信息
    		String accessToken = resultAccessToken.getString("access_token");
    		String openid = resultAccessToken.getString("openid");
    		// 3.拉取用户信息(需scope为 snsapi_userinfo)
    		String userInfoUrl = weiXinUtils.getUserInfo(accessToken, openid);
    		System.out.println("根据accessToken获取用户信息0"+userInfoUrl);
    		JSONObject userInfoResult = HttpClientUtils.httpGet(userInfoUrl);
    		System.out.println("userInfoResult:" + userInfoResult);
    		request.setAttribute("nickname", userInfoResult.getString("nickname"));
    		request.setAttribute("city", userInfoResult.getString("city"));
    		request.setAttribute("headimgurl", userInfoResult.getString("headimgurl"));
    		return "info";
    	}
    

    这是控制台打印的信息,我们可以根据这些信息写逻辑

    根据code获取用户信息https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx4cdae9126a8640f4&secret=15beb10a813c4fd3a89b870ac71fdce0&code=0112Oo0f1NeQYy0aGf1f1WAx0f12Oo0W&grant_type=authorization_code
    根据accessToken获取用户信息0https://api.weixin.qq.com/sns/userinfo?access_token=23_jWejGg2FQAPDUKKfdDdzEDAFxElb3M0ytVxDEE8c_JVJ9QLIb3ZsNBllNK0xr_6Ftrk3djrARBPJoG9QgxEVpQ&openid=ojN7n1Hvilu7Rd7g_uU4myl4BAsk&lang=zh_CN
    userInfoResult:{"country":"中国","province":"山东","city":"菏泽","openid":"ojN7n1Hvilu7Rd7g_uU4myl4BAsk","sex":1,"nickname":"晨小晨?","headimgurl":"http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eqCCQbRmjvWnON9HWIZvHU7vfLjXWibfIwCuokByj1lIWJy5zicvKNnMJUlb8jw1n8P9I6aE1o0sDgA/132","language":"zh_CN","privilege":[]}
    
    
    展开全文
  • 微信授权登录(OAuth)

    2018-08-30 21:08:14
    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。  允许用户提供一个令牌,而不是用户名和...

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

      允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

      我们这里主要模拟在微信公众号中使用OAuth2.0进行授权,获取用户的基本信息的过程。详细的开发文档可查看微信的官方文档。  

    微信公众平台开发者文档:

    http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html

    展开全文
  • 微信oauth2.0授权

    千次阅读 2015-10-12 09:39:54
    源代码正在上传...... 直接上贴: 准备:准备工作要做好,打开这个看看先 1,查看是否有使用这东西的权限(本人...2,修改:写上域名,一定要注意上面准备写的内容。 3,按钮参考上面准备里面要写的地址 ...6, 获取成功

    源代码http://download.csdn.net/detail/handaoyaosi/9172647

    直接上贴:

    准备:准备工作要做好,打开这个看看先


    1,查看是否有使用这东西的权限(本人用的是测试账号)


    2,修改:写上域名,一定要注意上面准备写的内容。


    3,按钮参考上面准备里面要写的地址


    4,接受code

    5,根据code获取openid


    6, 获取成功

    展开全文
  • 微信网页授权登录

    万次阅读 2016-11-17 14:00:28
    微信网页授权登录 日期:2016-11-14 作者:normanyang 功能:用于纪录微信网页授权步骤(前提条件:公众号为服务号,且通过认证) 微信网页授权api说明网址:...

    微信网页授权登录

    日期:2016-11-14

    作者:normanyang

    功能:用于纪录微信网页授权步骤(前提条件:公众号为服务号,且通过认证)

    微信网页授权api说明网址:https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f6553822520.html

    相关说明:目前微信api有两种方式获取用户信息。第一种是用户管理获取用户基本信息(包括UnionID机制),这个前提是用户必须事先已经关注公众号,通过获取基础access_token和openID来获取用户信息。第二种是以snsapi_userinfo为scope发起的网页授权,来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

    一、什么是OAuth2.0

    OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。

    OAuth 2.0OAuth协议的下一版本,但不向后兼容OAuth 1.0 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。

    OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

    二、微信公众平台OAuth2.0授权

    微信公众平台OAuth2.0授权详细步骤如下:

    1. 引导用户进入授权页面

    2. 用户点击授权页面URL,将向服务器发起请求

    3. 服务器询问用户是否同意授权给微信公众账号(scopesnsapi_base时无此步骤)

    4. 用户同意(scopesnsapi_base时无此步骤)

    5. 服务器将CODE通过回调传给微信公众账号

    6. 微信公众账号获得CODE

    7. 微信公众账号通过CODE向服务器请求Access Token

    8. 服务器返回Access TokenOpenID给微信公众账号

    9. 微信公众账号通过Access Token向服务器请求用户信息(scopesnsapi_base时无此步骤)

    10. 服务器将用户信息回送给微信公众账号(scopesnsapi_base时无此步骤)


    使用的AppIdAppSecret在公众平台基本配置中,可以找到。


    如果用户在微信中(Web微信除外)访问公众号的第三方网页,公众号开发者可以通过此接口获取当前用户基本信息(包括昵称、性别、城市、国家)。利用用户信息,可以实现体验优化、用户来源统计、帐号绑定、用户身份鉴权等功能。请注意,“获取用户基本信息接口是在用户和公众号产生消息交互时,才能根据用户OpenID获取用户基本信息,而网页授权的方式获取用户基本信息,则无需消息交互,只是用户进入到公众号的网页,就可弹出请求用户授权的界面,用户授权后,就可获得其基本信息(此过程甚至不需要用户已经关注公众号。)”

    在微信公众号请求用户网页授权之前,开发者需要先到公众平台网站的我的服务页中配置授权回调域名。请注意,这里填写的域名不要加http://


    配置授权回调页面域名

    点击右侧的修改。


    授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 

    http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权

     

    具体而言,网页授权流程分为四步:

    1   、引导用户进入授权页面同意授权,获取code

    2 、通过code换取网页授权access_token(与基础支持中的access_token不同)

    3 、如果需要,开发者可以刷新网页授权access_token,避免过期

    4、通过网页授权access_token和openid获取用户基本信息

    下面详细说明这些步骤:

    第一步:用户同意授权,获取code

    在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),

    引导关注者打开如下页面:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect (若提示“该链接无法访问”,

    请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。)

    参数说明:

    参数

    是否必须

    说明

    appid

    公众号的唯一标识

    redirect_uri

    授权后重定向的回调链接地址,请使用urlencode对链接进行处理

    response_type

    返回类型,请填写code

    scope

    应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息

    state

    重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值

    #wechat_redirect

    无论直接打开还是做页面302重定向时候,必须带此参数

    用户同意授权后

    如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,

    仅会带上state参数redirect_uri?state=STATE

    code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。

    第二步:通过code换取网页授权access_token

    首先请注意,这里通过code换取的网页授权access_token,与基础支持中的access_token不同。公众号可通过下述接口来获取网页授权access_token。

    如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。

    获取code后,请求以下链接获取,请求方法:GET

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

    参数说明

    参数

    是否必须

    说明

    appid

    公众号的唯一标识

    secret

    公众号的appsecret

    code

    填写第一步获取的code参数

    grant_type

    填写为authorization_code

    返回说明

    正确时返回的JSON数据包如下:

    {

      "access_token":"ACCESS_TOKEN",

       "expires_in":7200,

      "refresh_token":"REFRESH_TOKEN",

       "openid":"OPENID",

       "scope":"SCOPE"

    }

    参数

    描述

    access_token

    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

    expires_in

    access_token接口调用凭证超时时间,单位(秒)

    refresh_token

    用户刷新access_token

    openid

    用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

    scope

    用户授权的作用域,使用逗号(,)分隔

     

    错误时微信会返回JSON数据包如下(示例为Code无效错误):

    {"errcode":40029,"errmsg":"invalid code"}

    第三步:刷新access_token(如果需要)

    由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(7天、30天、60天、90天),当refresh_token失效的后,需要用户重新授权。

    请求方法:GET

    获取第二步的refresh_token后,请求以下链接获取access_token:  https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

     

    参数

    是否必须

    说明

    appid

    公众号的唯一标识

    grant_type

    填写为refresh_token

    refresh_token

    填写通过access_token获取到的refresh_token参数

    返回说明:

    正确时返回的JSON数据包如下:

    {

      "access_token":"ACCESS_TOKEN",

       "expires_in":7200,

      "refresh_token":"REFRESH_TOKEN",

       "openid":"OPENID",

       "scope":"SCOPE"

    }

    参数

    描述

    access_token

    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

    expires_in

    access_token接口调用凭证超时时间,单位(秒)

    refresh_token

    用户刷新access_token

    openid

    用户唯一标识

    scope

    用户授权的作用域,使用逗号(,)分隔

    错误时微信会返回JSON数据包如下(示例为Code无效错误):

    {"errcode":40029,"errmsg":"invalid code"}

    第四步:拉取用户信息(需scope为snsapi_userinfo)

    如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。

    httpGET(请使用https协议)

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

    注意:这里调用的接口千万不要用下面这个:

    http请求方式: GET

    https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN(这个接口是用基础access_tokenopenID

    获取用户信息,前提是用户必须已经关注该公众号)

    参数说明

    参数

    描述

    access_token

    网页授权接口调用凭证,注意:此access_token与基础支持的

    access_token不同

    openid

    用户的唯一标识

    lang

    返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

    正确时返回的JSON数据包如下:

    {

       "openid":" OPENID",

       " nickname": NICKNAME,

       "sex":"1",

       "province":"PROVINCE"

       "city":"CITY",

       "country":"COUNTRY",

        "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",

         "privilege":[

         "PRIVILEGE1"

         "PRIVILEGE2"

        ],

        "unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"

    }

     

    参数

    描述

    openid

    用户的唯一标识

    nickname

    用户昵称

    sex

    用户的性别,值为1时是男性,值为2时是女性,值为0时是未知

    province

    用户个人资料填写的省份

    city

    普通用户个人资料填写的城市

    country

    国家,如中国为CN

    headimgurl

    用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。

    若用户更换头像,原有头像URL将失效。

    privilege

    用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

    unionid

    只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。详见:获取用户个人信息(UnionID机制)

     

    错误时微信会返回JSON数据包如下(示例为openid无效):

    {"errcode":40003,"errmsg":"invalid openid "}

    展开全文
  • 最近在开发一个微信项目,在网页中要获得微信用户的基本信息,
  • 微信Oauth2.0

    2019-02-28 11:30:58
    用koa实现后端代码,用了koa-router, co-wechat-oauth包 // 处理oauth var OAuth = require('co-wechat-oauth'); var client = new OAuth('wx4dc6ee8fc9974472', '85c3c90464c3a33b5a41a21b8cdcadfd'); oauth.get('...
  • 微信网页授权:网页版(一)

    万次阅读 2018-09-12 16:45:24
    1、OAuth2.0  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。  允许用户提供一个令牌,...
  • 1、OAuth2.0简介  OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。  允许用户提供一个...
  • 微信OAuth2网页授权登陆接口,微信OAuth2网页授权登陆接口,在你的网站上放上可以扫码登陆,会不会吸引更多用户去注册,现在你只需要简单的配制一下就可以轻松实现,还不快点拿走,微信扫码登陆接口... 使用方法 1...
  • 企业微信OAuth2登录认证–ASP NetCore 企业微信OAUTH2登录认证–-ASP NetCore 中间件设计与使用 阿里钉钉OAuth2登录认证–中间件设计与使用
  • 微信Oauth2.0授权流程

    千次阅读 2018-02-01 14:57:12
    授权时序图: ...1. 用户在微信客户端访问H5页面,我们需要知道该用户是谁,就需要进行微信oauth2.0授权。我们拼接一个授权地址,返回给前端,前端浏览器进行重定向到该链接。参考链接如下: https://open.
  • 基于ThinkPHP3.2.3的微信OAuth2.0微信网页授权
  • 最近遇到一个问题,一个微信公众号,需要在多个域名上使用OAuth2.0网页授权,但微信OAuth2.0网页授权回调域名只能设置一个。 解决办法: 通过多一次的跳转,解决了微信限制回调域名只能设置一个的问题。 新建一个...
  • https://github.com/HADB/GetWeixinCodeGetWeixinCode解决微信OAuth2.0网页授权只能设置一个回调域名的问题使用方法部署get-weixin-code.html至你的微信授权回调域名的目录下使用方式类似于直接通过微信回调的方式,...
  • 微信OAuth2网页授权登陆接口,微信登陆获取头像,获取openid,独立代码编程一幕了然,会点php代码就能看懂!
  • 运行在微信端的项目,很重要的环节是oauth认证;那在vue项目中,在何时何地调用oauth认证最合适呢? 经过观察,在项目启动过程中,会执行main.js文件;所以我将认证放在main.js中操作; 当oauth认证完成后,再启动...
  • 微信OAuth2.0网页授权接口

    千次阅读 2014-11-18 17:01:38
    通过OAuth2.0受权的网页将会获取到打开者的微信信息,甚至包括微信昵称、头像等有用的数据,开发者们可以凭此设计出更多更丰富的页面应用,比如最近一直很火爆的红包类活动。除此之外还有个额外的好处,就是可以控制...
  •  * 微信OAuth2.0受权分为snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能...
  • 1. 到微信开放平台 ,先注册一个...2. 审核通过后,可以访问这个链接获取到微信登录的二维码: https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https%3A%2F%2Fpassport.yhd.
  • 微信Oauth2授权机制

    2018-03-14 09:50:33
    当时设计的授权操作比较僵硬,代码耦合度过高,导致平台用户非微信登录不可。在学习了解了几个第三方的开发模式后,借此机会 重新梳理附上做的流程图流程图链接 点击打开链接几点说明:1.这个流程里使用的是静默...
1 2 3 4 5 ... 20
收藏数 14,788
精华内容 5,915
关键字:

微信oauth