Ejemplo n.º 1
0
        public WxConfigModel WxConfig(ISettingService _settingService, ICacheManager _cacheManager, string url)
        {
            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            var token   = GetAccessToken(_cacheManager, appId, appSecret);
            var tickent = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token.access_token);

            JSApiTicketModel apiTicker = HttpUtility.Get <JSApiTicketModel>(tickent);

            var nonceStr  = CommonHelper.GenerateNonceStr();
            var timestamp = CommonHelper.GetTimeStamp();

            var urlPath   = "jsapi_ticket=" + apiTicker.ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=http://" + url;
            var signature = CommonHelper.EncryptToSHA1(urlPath);

            var jsonData = new WxConfigModel
            {
                appId     = appId,
                timestamp = timestamp,
                noncestr  = nonceStr,
                signature = signature,
                ticket    = apiTicker.ticket,
                value     = signature,
                urlPath   = urlPath
            };

            return(jsonData);
        }
Ejemplo n.º 2
0
        public ActionResult JsApi_Ticket()
        {
            var appId     = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppId);
            var appSecret = _settingService.GetSettingByKey <string>(WeChatSettingNames.AppSecret);

            var token   = _cacheManager.GetCache(ArtSolutionConsts.CACHE_ACCESS_TOKEN).Get(ArtSolutionConsts.CACHE_ACCESS_TOKEN, () => GetAccessToken(appId, appSecret));
            var tickent = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", token.access_token);

            JSApiTicketModel oauthToken = HttpUtility.Get <JSApiTicketModel>(tickent);

            if (oauthToken == null)
            {
                Logger.Debug("oauthToken为NULL");
            }
            var nonceStr  = CommonHelper.GenerateNonceStr();
            var timestamp = CommonHelper.GetTimeStamp();

            var url       = this.Request.Url.Host + this.Request.Url.PathAndQuery;
            var urlPath   = "jsapi_ticket=" + oauthToken.ticket + "&noncestr" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;
            var signature = CommonHelper.EncryptToSHA1(urlPath);
            var jsonData  = new
            {
                appId     = appId,
                timestamp = CommonHelper.GetTimeStamp(),
                nonceStr  = CommonHelper.GenerateNonceStr(),
                signature = signature
            };

            return(AbpJson(data: jsonData, behavior: JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 3
0
        private static JSApiTicketModel GetJSApiTicketFromWeChat(string AppId, string access_token)
        {
            if (string.IsNullOrWhiteSpace(access_token))
            {
                throw new ArgumentNullException(nameof(access_token));
            }

            string errorInfo = (string)CacheHelper.GetCache(keyState(AppId));

            if (!string.IsNullOrWhiteSpace(errorInfo) && errorInfo.Contains(Common.error))
            {
                throw new AggregateException(errorInfo + " 如果确认故障已解除,请回收应用程序池后再试");
            }

            if (GlobalFlag.Instance.wxJSApiTicket_IsBusy)
            {
                throw new ApplicationException("已经有一个请求正在进行,请稍后再试");
            }

            //获取新票据
            string url = Common.ApiUrl + string.Format("ticket/getticket?access_token={0}&type=jsapi", access_token);

            try
            {
                GlobalFlag.Instance.wxJSApiTicket_IsBusy = true;
                string           result = HttpRequestHelper.Request(url);
                JSApiTicketModel model  = JsonHelper.DeSerialize <JSApiTicketModel>(result);
                if (null != model && !string.IsNullOrWhiteSpace(model.ticket) && model.expires_in > 0)
                {
                    GlobalFlag.Instance.wxJSApiTicket_IsBusy = false;
                    return(model);
                }
                else
                {
                    CacheHelper.SetCache(keyState(AppId), string.Concat("Request API Ticket ", Common.error));
                    throw new AggregateException("获取Ticket票据失败,url=" + url + ",result=" + result);
                }
            }
            catch (Exception Ex)
            {
                GlobalFlag.Instance.wxJSApiTicket_IsBusy = false;
                LogHelper.Save(Ex);
                CacheHelper.SetCache(keyState(AppId), string.Concat("Request API Ticket ", Common.error));
                throw Ex;
            }
        }