Exemplo n.º 1
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, OAuthScope 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",
                                appId.AsUrlData(), redirectUrl.AsUrlData(), responseType.AsUrlData(), scope.ToString("g").AsUrlData(), state.AsUrlData(),
                                addConnectRedirect ? "&connect_redirect=1" : "");

            /* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。
             * 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)
             * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
             */
            return url;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取OAuth授权的Url地址。
        /// </summary>
        /// <param name="url">需要跳转的目标地址。</param>
        /// <param name="scope">OAuth域。</param>
        /// <param name="state">状态参数。</param>
        /// <returns>绝对的Url地址。</returns>
        public string GetAuthorizeUrl(string url, OAuthScope scope, string state = null)
        {
            var appId       = _accountModel.AppId;
            var redirectUrl =
                string.Format(
                    "https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state={3}",
                    appId, url, "snsapi_" + scope.ToString().ToLower(), state);

            if (_openAccountModel != null)
            {
                redirectUrl = redirectUrl + "&component_appid=" + _openAccountModel.AppId;
            }
            return(redirectUrl + "#wechat_redirect");
        }
Exemplo n.º 3
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, OAuthScope 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",
                              appId.AsUrlData(), redirectUrl.AsUrlData(), responseType.AsUrlData(), scope.ToString("g").AsUrlData(), state.AsUrlData(),
                              addConnectRedirect ? "&connect_redirect=1" : "");

            /* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。
             * 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)
             * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
             */
            return(url);
        }
Exemplo n.º 4
0
 public string BuildOAuthUrl(string redirectUrl, OAuthScope scope, string state)
 {
     return String.Format(s_weixin_oauth_format_url,
         AppID, redirectUrl, scope.ToString().ToLower(), state);
 }
Exemplo n.º 5
0
 /// <summary>
 /// 获取OAuth授权的Url地址。
 /// </summary>
 /// <param name="url">需要跳转的目标地址。</param>
 /// <param name="scope">OAuth域。</param>
 /// <param name="state">状态参数。</param>
 /// <returns>绝对的Url地址。</returns>
 public string GetAuthorizeUrl(string url, OAuthScope scope, string state = null)
 {
     var appId = _accountModel.AppId;
     var redirectUrl = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state={3}#wechat_redirect", appId, url, "snsapi_" + scope.ToString().ToLower(), state);
     return redirectUrl;
 }
Exemplo n.º 6
0
        public static string GetOAuthUrl(string appId, string redirectUriHTTPS, OAuthScope scope, string state)
        {
            string url = string.Format(OAuthUrlTemplate, appId, HttpUtility.UrlEncode(redirectUriHTTPS), scope.ToString(), state);

            WechatLib.WriteLog("OAuthUrl converted:" + url);
            return(url);
        }
Exemplo n.º 7
0
 public string BuildOAuthUrl(string redirectUrl, OAuthScope scope, string state)
 {
     return(String.Format(s_weixin_oauth_format_url,
                          AppID, redirectUrl, scope.ToString().ToLower(), state));
 }