Exemple #1
0
        /// <summary>
        /// 微信访问入口页,获取用户UnionID和OpenID
        /// </summary>
        /// <param name="intVisit">访问:1首页;2定制;3我的;4管家主页;5商家主页</param>
        /// <param name="strTargetID">目标编码:4管家编码;5商家编码</param>
        /// <returns></returns>
        public ActionResult Index(int intVisit = 0, string strTargetID = "")
        {
            ViewBag.UnionID      = "";
            ViewBag.OpenID       = "";
            ViewBag.Visit        = intVisit;
            ViewBag.TargetID     = strTargetID;
            ViewBag.ErrorMessage = "";
            string strWxCode = "", strVisitResult = "", strAccessToken = "";
            Dictionary <string, object> dicResult = null;

            try
            {
                if (string.IsNullOrEmpty(Request.QueryString["code"]))
                {
                    #region 获取Code
                    string strMyUrl = "http://" + Request.Url.Host + Request.Path + "?intVisit=" + intVisit + "&strTargetID=" + strTargetID;
                    WxData wxdCode  = new WxData();
                    wxdCode.SetValue("appid", WxConfig.AppID);
                    wxdCode.SetValue("redirect_uri", HttpUtility.UrlEncode(strMyUrl));
                    wxdCode.SetValue("response_type", "code");
                    //wxdAuthorize.SetValue("scope", "snsapi_base");
                    wxdCode.SetValue("scope", "snsapi_userinfo");
                    wxdCode.SetValue("state", "STATE" + "#wechat_redirect");
                    Response.Redirect(WxConfig.AuthorizeUrl + wxdCode.ToUrl());
                    #endregion 获取Code
                }
                else
                {
                    strWxCode = Request.QueryString["code"].Trim();
                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    #region 获取OpenID
                    WxData wxdOpen = new WxData();
                    wxdOpen.SetValue("appid", WxConfig.AppID);
                    wxdOpen.SetValue("secret", WxConfig.AppSecret);
                    wxdOpen.SetValue("code", strWxCode);
                    wxdOpen.SetValue("grant_type", "authorization_code");
                    strVisitResult = WxHttp.Get(WxConfig.AccessTokenUrl + wxdOpen.ToUrl());
                    dicResult      = (Dictionary <string, object>)jss.Deserialize(strVisitResult, typeof(Dictionary <string, object>));
                    if (dicResult.ContainsKey("errcode"))
                    {
                        throw new Exception("获取网页用户授权出错:" + dicResult["errmsg"].ToString());
                    }
                    strAccessToken = dicResult["access_token"].ToString();
                    ViewBag.OpenID = dicResult["openid"].ToString();
                    #endregion 获取OpenID

                    #region 获取UnionID
                    strVisitResult = WxHttp.Get(WxConfig.UserUrl + "access_token=" + strAccessToken + "&openid=" + ViewBag.OpenID + "&lang=zh_CN");
                    dicResult      = (Dictionary <string, object>)jss.Deserialize(strVisitResult, typeof(Dictionary <string, object>));
                    if (dicResult.ContainsKey("errcode"))
                    {
                        throw new Exception("获取用户信息出错:" + dicResult["errmsg"].ToString());
                    }
                    ViewBag.UnionID = dicResult["unionid"].ToString();
                    #endregion 获取UnionID
                }
            }
            catch (Exception ex)
            {
                WriteLog("Weixin", "Index", "Exception:" + ex.Message.ToString());
                ViewBag.ErrorMessage = ex.Message.ToString();
            }
            return(View());
        }
Exemple #2
0
        public ActionResult WxJsapiAuthorize()
        {
            string     strUrl          = "";
            string     strGet          = "";
            string     strAccessToken  = "";          //令牌
            string     strJsapiTicket  = "";          //票据
            DateTime   dtmTicketExpire = DefaultTime; //票据到期时间
            string     strResult       = "";
            JsonData   jsdResult;
            JsonResult jsrReturn    = new JsonResult();
            string     strNonce     = "";
            string     strTimestamp = "";
            string     strSignature = "";

            try
            {
                if (string.IsNullOrEmpty(Request.Form["strUrl"]))
                {
                    throw new Exception("strUrl为空!");
                }
                strUrl = Request.Form["strUrl"].Trim();
                WriteLog("Weixin", "WxJsapiAuthorize", "strUrl:" + strUrl);
                Dictionary <string, object> dicTicket = new Dictionary <string, object>();
                dicTicket = GetJsapiTicket(strUrl);
                if (dicTicket.Count <= 0)
                {
                    #region 获得微信JS接口的临时票据
                    strGet         = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WxConfig.AppID + "&secret=" + WxConfig.AppSecret;
                    strResult      = WxHttp.Get(strGet);
                    jsdResult      = JsonMapper.ToObject(strResult);
                    strAccessToken = (string)jsdResult["access_token"];
                    WriteLog("Weixin", "WxJsapiAuthorize", "strAccessToken:" + strAccessToken);
                    strGet          = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + strAccessToken + "&type=jsapi";
                    dtmTicketExpire = DateTime.Now;
                    strResult       = WxHttp.Get(strGet);
                    jsdResult       = JsonMapper.ToObject(strResult);
                    strJsapiTicket  = (string)jsdResult["ticket"];
                    WriteLog("Weixin", "WxJsapiAuthorize", "strJsapiTicket:" + strJsapiTicket);
                    dtmTicketExpire = dtmTicketExpire.AddMinutes(110);
                    dicTicket       = new Dictionary <string, object>();
                    dicTicket.Add("Ticket", strJsapiTicket);
                    dicTicket.Add("Expire", dtmTicketExpire);
                    SetJsapiTicket(strUrl, dicTicket);
                    #endregion 获得微信JS接口的临时票据
                }
                else
                {
                    if (dicTicket.ContainsKey("Ticket"))
                    {
                        strJsapiTicket = (string)dicTicket["Ticket"];
                    }
                    if (dicTicket.ContainsKey("Expire"))
                    {
                        dtmTicketExpire = (DateTime)dicTicket["Expire"];
                    }
                    if (dtmTicketExpire <= DateTime.Now || strJsapiTicket == "")
                    {
                        #region 获得微信JS接口的临时票据
                        strGet         = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WxConfig.AppID + "&secret=" + WxConfig.AppSecret;
                        strResult      = WxHttp.Get(strGet);
                        jsdResult      = JsonMapper.ToObject(strResult);
                        strAccessToken = (string)jsdResult["access_token"];
                        WriteLog("Weixin", "WxJsapiAuthorize", "strAccessToken:" + strAccessToken);
                        strGet          = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + strAccessToken + "&type=jsapi";
                        dtmTicketExpire = DateTime.Now;
                        strResult       = WxHttp.Get(strGet);
                        jsdResult       = JsonMapper.ToObject(strResult);
                        strJsapiTicket  = (string)jsdResult["ticket"];
                        WriteLog("Weixin", "WxJsapiAuthorize", "strJsapiTicket:" + strJsapiTicket);
                        dtmTicketExpire = dtmTicketExpire.AddMinutes(110);
                        dicTicket       = new Dictionary <string, object>();
                        dicTicket.Add("Ticket", strJsapiTicket);
                        dicTicket.Add("Expire", dtmTicketExpire);
                        SetJsapiTicket(strUrl, dicTicket);
                        #endregion 获得微信JS接口的临时票据
                    }
                }
                WxData wxdTicket = new WxData();
                strNonce = WxApi.GenerateNonceStr();
                wxdTicket.SetValue("noncestr", strNonce);
                wxdTicket.SetValue("jsapi_ticket", strJsapiTicket);
                strTimestamp = WxApi.GenerateTimeStamp();
                wxdTicket.SetValue("timestamp", strTimestamp);
                wxdTicket.SetValue("url", strUrl);
                string strParam = wxdTicket.ToUrl();
                WriteLog("Weixin", "WxJsapiAuthorize", "strParam:" + strParam);
                strSignature = GetSwcSH1(strParam);// FormsAuthentication.HashPasswordForStoringInConfigFile(strParam, "SHA1");
                WriteLog("Weixin", "WxJsapiAuthorize", "strSignature:" + strSignature);
                jsrReturn.Data = new { Result = 1, AppID = WxConfig.AppID, Timestamp = strTimestamp, Noncestr = strNonce, Signature = strSignature };
            }
            catch (Exception ex)
            {
                WriteLog("Weixin", "WxJsapiAuthorize", "Exception:" + ex.Message.ToString());
                jsrReturn.Data = new { Result = -99, Message = ex.Message.ToString() };
            }
            return(jsrReturn);
        }