Exemple #1
0
        /// <summary>
        /// 生成签名
        /// </summary>
        private void CreateSignature()
        {
            JsapiTicket jsapiTicket = this.CreateJsapiTicket();

            string string1 = string.Format("jsapi_ticket={0}&noncestr={1}&timestamp={2}&url={3}", jsapiTicket.ticket, this.nonceStr, this.timestamp, url);

            this.signature = FormsAuthentication.HashPasswordForStoringInConfigFile(string1, "SHA1").ToLower();
        }
Exemple #2
0
        /// <summary>
        /// 获取jsapi_ticket
        /// </summary>
        /// <returns></returns>
        public static string GetJsapiTicket()
        {
            string accessToken = GetAccessToken();
            string key         = "jsapi_ticket";

            if (CacheExtend.HasCache(key))
            {
                return(CacheExtend.GetCache <JsapiTicket>(key).ticket);
            }

            lock (_lock)
            {
                if (CacheExtend.HasCache(key))
                {
                    return(CacheExtend.GetCache <JsapiTicket>(key).ticket);
                }
                JsapiTicket ticket = null;
                try
                {
                    LogHelper.WriteLog("GetJsapiTicket-accessToken:" + accessToken);
                    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", accessToken));
                    req.Method = "GET";
                    using (WebResponse wr = req.GetResponse())
                    {
                        HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
                        StreamReader    reader     = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                        string          content    = reader.ReadToEnd();
                        LogHelper.WriteLog("content:" + content);
                        if (!string.IsNullOrEmpty(content))
                        {
                            ticket = JsonHelper.JsonToObject <JsapiTicket>(content);
                            if (ticket != null)
                            {
                                LogHelper.WriteLog("ticket:" + ticket.ticket);
                                //LogHelper.WriteLog("jsapi_ticket插入缓存,jsapi_ticket有效期为:" + (ticket.expires_in - 1800).ToString());
                                CacheExtend.CacheInsert(key, ticket, DateTime.Now.AddSeconds(ticket.expires_in - 1800));
                            }
                            else
                            {
                                LogHelper.WriteLog(ErrorManage.GetErrorInfo(ticket.errcode ?? -1));
                            }
                        }
                        else
                        {
                            LogHelper.WriteLog("jsapi_ticket 返回的值为NULL");
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.WriteLog(string.Format("{0}\n{1}\n{2}\n", ex.Message, ex.Source, ex.StackTrace));
                }
                return(ticket == null ? "" : ticket.ticket);
            }
        }
        /// <summary>
        /// 获取jsticket
        /// </summary>
        private JsapiTicket GetTicket(string AppName, string access_token)
        {
            string CACHE_KEY = "_JSAPI_TICKET-" + AppName;
            var    jsticket  = CacheManager.Instance.Get <JsapiTicket>(CACHE_KEY);

            if (jsticket == null)
            {
                jsticket = new JsapiTicket().GetTicket(access_token);
                CacheManager.Instance.Insert <JsapiTicket>(CACHE_KEY, jsticket, DateTime.Now.AddMinutes(115));
            }
            if (jsticket.IsExpires)
            {
                CacheManager.Instance.Remove(CACHE_KEY);
                jsticket = new JsapiTicket().GetTicket(access_token);
                CacheManager.Instance.Insert <JsapiTicket>(CACHE_KEY, jsticket, DateTime.Now.AddMinutes(115));
            }
            return(jsticket);
        }
Exemple #4
0
 public bool Update(JsapiTicket ticket)
 {
     return(true);
 }
Exemple #5
0
        /// <summary>
        /// 页面加载
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (AppConfig.Mode == AppConfig.CodeMode.Production)
                {
                    #region 客户版本

                    Response.AddHeader("Access-Control-Allow-Origin", AppConfig.MoblieInterfaceDomain);
                    string time = GameRequest.GetQueryString("time");
                    string sign = GameRequest.GetQueryString("sign");
                    //签名验证
                    AjaxJsonValid ajv = Fetch.VerifySignData((AppConfig.MoblieInterfaceKey + time), sign);
                    if (ajv.code == (int)ApiCode.VertySignErrorCode)
                    {
                        Response.Write(ajv.SerializeToJson());
                        return;
                    }
                    object      obj = WHCache.Default.Get <AspNetCache>(AppConfig.WxTicket);
                    TicketCache tc  = obj as TicketCache;
                    if (tc == null)
                    {
                        try
                        {
                            string url =
                                $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={WxAuthorize.Appid}&secret={WxAuthorize.Appsecret}";
                            string result           = WxHttpService.Get(url);
                            JavaScriptSerializer js = new JavaScriptSerializer();
                            AccessToken          at = js.Deserialize <AccessToken>(result);
                            if (at.errcode > 0)
                            {
                                ajv.msg = at.errmsg;
                                Response.Write(ajv.SerializeToJson());
                                return;
                            }

                            url =
                                $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={at.access_token}&type=jsapi";
                            result = WxHttpService.Get(url);
                            JsapiTicket jt = js.Deserialize <JsapiTicket>(result);
                            if (jt.errcode > 0)
                            {
                                ajv.msg = at.errmsg;
                                Response.Write(ajv.SerializeToJson());
                                return;
                            }

                            tc = new TicketCache();
                            tc.access_token = at.access_token;
                            tc.ticket       = jt.ticket;
                            int timeout = (at.expires_in / 60) - 3;
                            WHCache.Default.Save <AspNetCache>(AppConfig.WxTicket, tc, timeout);
                        }
                        catch (Exception)
                        {
                            Response.Write(ajv.SerializeToJson());
                            return;
                        }
                    }
                    ajv.SetValidDataValue(true);
                    ajv.SetDataItem("access_token", tc.access_token);
                    ajv.SetDataItem("ticket", tc.ticket);
                    Response.Write(ajv.SerializeToJson());

                    #endregion
                }
                else
                {
                    #region 演示版本

                    string time = GameRequest.GetQueryString("time");
                    string sign = GameRequest.GetQueryString("sign");
                    Response.Redirect("http://ry.foxuc.net/JJTicket.aspx?time=" + time + "&sign=" + sign);

                    #endregion
                }
            }
        }