示例#1
0
        public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, EnumOAuthScope scope, string responseType = "code", string componentAppId = "")
        {
            StringBuilder redirectUrlBuilder = new StringBuilder("https://");

            redirectUrlBuilder.Append($"open.weixin.qq.com/connect/oauth2/authorize?appid={appId}&redirect_uri={redirectUrl}&response_type={responseType}&scope={scope}&state={state}&connect_redirect=1");

            if (string.IsNullOrWhiteSpace(componentAppId))
            {
                redirectUrlBuilder.Append($"&component_appid={componentAppId}");
            }
            redirectUrlBuilder.Append("#wechat_redirect");
            return(redirectUrlBuilder.ToString());
        }
示例#2
0
        /// <summary>
        /// 获取验证地址
        /// </summary>
        /// <param name="appId">公众号的唯一标识</param>
        /// <param name="redirectUrl">授权后重定向的回调链接地址,请使用urlencode对链接进行处理</param>
        /// <param name="state">重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节</param>
        /// <param name="scope">应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)</param>
        /// <param name="responseType">返回类型,请填写code(或保留默认)</param>
        /// <param name="addConnectRedirect">加上后可以解决40029-invalid code的问题(测试中)</param>
        /// <returns></returns>
        public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, EnumOAuthScope scope, string responseType = "code", bool addConnectRedirect = true)
        {
            var url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type={2}&scope={3}&state={4}{5}#wechat_redirect",
                                    Uri.EscapeDataString(appId), Uri.EscapeDataString(redirectUrl), Uri.EscapeDataString(responseType), Uri.EscapeDataString(scope.ToString("g")), Uri.EscapeDataString(state),
                                    addConnectRedirect ? "&connect_redirect=1" : "");

            /* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。
             * 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)
             * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
             */
            return(url);
        }