Example #1
0
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new WeixinException("尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId))
            {
                if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                {
                    throw new WeixinException("此appId尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                //accessToken
                accessToken = accessTokenOrAppId;
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = AccessTokenContainer.GetTokenResult(appId, false);
                    accessToken = accessTokenResult.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (!retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                {
                    //尝试重新验证
                    var accessTokenResult = AccessTokenContainer.GetTokenResult(appId, true);
                    accessToken = accessTokenResult.access_token;
                    result      = TryCommonApi(fun, appId, false);
                }
                else
                {
                    result         = Activator.CreateInstance <T>();
                    result.errcode = ex.JsonResult.errcode;
                    result.errmsg  = ex.JsonResult.errmsg;
                }
            }
            return(result);
        }
        public void SendWorkOrderTemplateMessage(long memberId, string billCode, string title, string progress, string person)
        {
            var memberInfo = _memberRepository.FirstOrDefault(t => t.Id == memberId);

            if (memberInfo == null)
            {
                throw new UserFriendlyException("会员信息不存在!");
            }
            if (string.IsNullOrEmpty(memberInfo.Openid))
            {
                throw new UserFriendlyException("会员未绑定微信!");
            }
            string openid = memberInfo.Openid;
            var    host   = _settingManager.GetSettingValue(AppSettings.Wuye.Host);
            string url    = host.TrimEnd('/') + "/weixin/linkbill/view?EType=2&EDType=3&BillCode=" + billCode;

            try
            {
                var appid               = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
                var appsecret           = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
                var workOrderTemplateId = GetTemplateMessageId(_settingManager.GetSettingValue(AppSettings.TemplateKey.WorkOrder));
                if (!AccessTokenContainer.CheckRegistered(appid))
                {
                    AccessTokenContainer.Register(appid, appsecret);
                }

                var result = TemplateApi.SendTemplateMessage(appid, openid, new TemplateMessage_WorkOrderNotice(title, billCode, progress, person, "点击查看详情", workOrderTemplateId, url));
            }
            catch (Exception ex)
            {
                _logger.Error("发送模板消息", ex);
                throw new UserFriendlyException(ex.Message, ex);
            }
        }
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppKey">AccessToken或AppKey。如果为null,则自动取已经注册的第一个corpId/corpSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi<T>(Func<string, T> fun, string accessTokenOrAppKey, bool retryIfFaild = true) where T : WorkJsonResult
        {
            Func<string> accessTokenContainer_GetFirstOrDefaultAppIdFunc =
                () => AccessTokenContainer.GetFirstOrDefaultAppId();

            Func<string, bool> accessTokenContainer_CheckRegisteredFunc =
                appKey =>
                {
                    /*
                     * 对于企业微信来说,AppId = key = CorpId+'@'+CorpSecret
                     */
                    return AccessTokenContainer.CheckRegistered(appKey);
                };

            Func<string, bool, IAccessTokenResult> accessTokenContainer_GetAccessTokenResultFunc =
                (appKey, getNewToken) =>
                {
                    /*
                     * 对于企业微信来说,AppId = key = CorpId+'@'+CorpSecret
                     */
                    return AccessTokenContainer.GetTokenResult(appKey, getNewToken);
                };

            int invalidCredentialValue = (int)ReturnCode_Work.获取access_token时Secret错误_或者access_token无效;

            var result = ApiHandlerWapperBase.
                TryCommonApiBase(
                    PlatformType.Work,
                    accessTokenContainer_GetFirstOrDefaultAppIdFunc,
                    accessTokenContainer_CheckRegisteredFunc,
                    accessTokenContainer_GetAccessTokenResultFunc,
                    invalidCredentialValue,
                    fun, accessTokenOrAppKey, retryIfFaild);
            return result;
        }
Example #4
0
        public string GetNickname(string openid, string defaultName = "□□□")
        {
            var appid     = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
            var appsecret = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);

            if (!AccessTokenContainer.CheckRegistered(appid))
            {
                AccessTokenContainer.Register(appid, appsecret);
            }
            var userInfo = UserApi.Info(appid, openid);

            if (userInfo == null)
            {
                throw new UserFriendlyException("获取微信昵称失败!");
            }

            Regex regEx = new Regex(@"\p{Cs}");

            string nickname = regEx.Replace(userInfo.nickname, "").Trim();

            if (string.IsNullOrEmpty(nickname))
            {
                return(defaultName);
            }
            return(nickname);
        }
 private static void Register()
 {
     if (!AccessTokenContainer.CheckRegistered(appId))
     {
         AccessTokenContainer.Register(appId, secret);
     }
 }
        public void SendVoteTemplateMessage(long memberId, string title, string name, string content, string range, string beginTime, string endTime, string url)
        {
            var memberInfo = _memberRepository.FirstOrDefault(t => t.Id == memberId);

            if (memberInfo == null)
            {
                throw new UserFriendlyException("会员信息不存在!");
            }
            if (string.IsNullOrEmpty(memberInfo.Openid))
            {
                throw new UserFriendlyException("会员未绑定微信!");
            }
            string openid = memberInfo.Openid;

            try
            {
                var appid            = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
                var appsecret        = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
                var noticeTemplateId = GetTemplateMessageId(_settingManager.GetSettingValue(AppSettings.TemplateKey.Vote));
                if (!AccessTokenContainer.CheckRegistered(appid))
                {
                    AccessTokenContainer.Register(appid, appsecret);
                }

                var result = TemplateApi.SendTemplateMessage(appid, openid, new TemplateMessage_VoteNotice(title, name, content, range, beginTime, endTime, "点击查看详情", noticeTemplateId, url));
            }
            catch (Exception ex)
            {
                _logger.Error("发送模板消息", ex);
                throw new UserFriendlyException(ex.Message, ex);
            }
        }
        public void SendRefundOrderAcceptMessage(long memberId, long orderId, string amount, string productName, string orderNo)
        {
            var memberInfo = _memberRepository.FirstOrDefault(t => t.Id == memberId);

            if (memberInfo == null)
            {
                throw new UserFriendlyException("会员信息不存在!");
            }

            if (string.IsNullOrEmpty(memberInfo.Openid))
            {
                throw new UserFriendlyException("会员未绑定微信!");
            }

            string openid = memberInfo.Openid;

            try
            {
                var appid            = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
                var appsecret        = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
                var host             = _settingManager.GetSettingValue(AppSettings.Wuye.Host);
                var noticeTemplateId = GetTemplateMessageId(_settingManager.GetSettingValue(AppSettings.TemplateKey.RefundOrderAccept));
                if (!AccessTokenContainer.CheckRegistered(appid))
                {
                    AccessTokenContainer.Register(appid, appsecret);
                }
                string url    = host + "/weixin/mall/refund/view?id=" + orderId;
                var    result = TemplateApi.SendTemplateMessage(appid, openid, new TemplateMessage_RefundOrderAccept(productName, amount, noticeTemplateId, url));
            }
            catch (Exception ex)
            {
                _logger.Error("发送模板消息", ex);
            }
        }
 private static void Register()
 {
     if (!AccessTokenContainer.CheckRegistered(CorpID))
     {
         AccessTokenContainer.Register(CorpID, Secret);
     }
 }
        public void SendJoinGrouponMessage(long memberId, long grouponOrderId, string productName, decimal price, string leader, int memberCount, DateTime expireTime)
        {
            var memberInfo = _memberRepository.FirstOrDefault(t => t.Id == memberId);

            if (memberInfo == null)
            {
                throw new UserFriendlyException("会员信息不存在!");
            }

            if (string.IsNullOrEmpty(memberInfo.Openid))
            {
                throw new UserFriendlyException("会员未绑定微信!");
            }

            string openid = memberInfo.Openid;

            try
            {
                var appid            = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
                var appsecret        = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
                var host             = _settingManager.GetSettingValue(AppSettings.Wuye.Host);
                var noticeTemplateId = GetTemplateMessageId(_settingManager.GetSettingValue(AppSettings.TemplateKey.JoinGroupon));
                if (!AccessTokenContainer.CheckRegistered(appid))
                {
                    AccessTokenContainer.Register(appid, appsecret);
                }
                string url    = host + "/weixin/mall/groupon/order?id=" + grouponOrderId;
                var    result = TemplateApi.SendTemplateMessage(appid, openid, new TemplateMessage_JoinGroupon(productName, price, leader, memberCount, expireTime, noticeTemplateId, url));
            }
            catch (Exception ex)
            {
                _logger.Error("发送模板消息", ex);
            }
        }
Example #10
0
 /// <summary>
 /// 发送信息
 /// </summary>
 public bool Send(string open_id, string template_id, string link_url, object data)
 {
     try
     {
         if (!AccessTokenContainer.CheckRegistered(appId))                                    //检查是否已经注册
         {
             AccessTokenContainer.Register(appId, appSecret);                                 //如果没有注册则进行注册
         }
         string access_token = AccessTokenContainer.GetAccessTokenResult(appId).access_token; //AccessToken
         SendTemplateMessageResult sendResult = TemplateApi.SendTemplateMessage(access_token, open_id, template_id, link_url, data);
         //发送成功
         if (sendResult.errcode.ToString() == "请求成功")
         {
             LogHelper.WriteDebugLog("[wx push msg]:" + open_id + " send success");
             return(true);
         }
         else
         {
             LogHelper.WriteDebugLog("[wx push msg]:" + open_id + " send failed");
             return(false);
         }
     }
     catch (Exception ex)
     {
         LogHelper.WriteDebugLog("[wx push msg]:" + ex.Message);
         return(false);
     }
 }
Example #11
0
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_appId, _appSecret);或JsApiTicketContainer.Register(_appId, _appSecret);方法对账号信息进行过注册,否则会出错。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="accessTokenOrAppId">AccessToken或AppId。如果为null,则自动取已经注册的第一个appId/appSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi <T>(Func <string, T> fun, string accessTokenOrAppId = null, bool retryIfFaild = true) where T : WxJsonResult
        {
            string appId       = null;
            string accessToken = null;

            if (accessTokenOrAppId == null)
            {
                appId = AccessTokenContainer.GetFirstOrDefaultAppId();
                if (appId == null)
                {
                    throw new UnRegisterAppIdException(null,
                                                       "尚无已经注册的AppId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else if (ApiUtility.IsAppId(accessTokenOrAppId))
            {
                if (!AccessTokenContainer.CheckRegistered(accessTokenOrAppId))
                {
                    throw new UnRegisterAppIdException(accessTokenOrAppId, string.Format("此appId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", accessTokenOrAppId));
                }

                appId = accessTokenOrAppId;
            }
            else
            {
                accessToken = accessTokenOrAppId;//accessToken
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, false);
                    accessToken = accessTokenResult.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    appId != null &&
                    ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效)
                {
                    //尝试重新验证
                    var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId, true);//强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.access_token;
                    result      = TryCommonApi(fun, appId, false);
                }
                else
                {
                    throw;
                }
            }

            return(result);
        }
Example #12
0
        private static string _JsCorpSecret = Util.Config.GetValue("JsCorpSecret"); //管理员组ID

        public static string GetToken()
        {
            if (!AccessTokenContainer.CheckRegistered(CORPID))
            {
                AccessTokenContainer.Register(CORPID, _CorpSecret);
            }
            return(AccessTokenContainer.GetToken(CORPID, _CorpSecret));
        }
Example #13
0
 public static string GetAccessToken(AccountInfo accountInfo)
 {
     if (AccessTokenContainer.CheckRegistered(accountInfo.AppID) == false)
     {
         AccessTokenContainer.Register(accountInfo.AppID, accountInfo.AppSecret);
     }
     return(AccessTokenContainer.GetToken(accountInfo.AppID));
 }
Example #14
0
 private void init()
 {
     //注册appid和appsecret
     if (!AccessTokenContainer.CheckRegistered(Variables.AppId))
     {
         AccessTokenContainer.Register(Variables.AppId, Variables.AppSecret);
     }
 }
Example #15
0
        /// <summary>
        /// 异步方法】使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_clientId, _clientSecret);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="requestPolicy"></param>
        /// <param name="retryIfFaild"></param>
        /// <returns></returns>
        public static async Task <T> TryCommonApiAsync <T>(
            Func <Com.Alibaba.Entities.Request.RequestPolicy, Task <T> > fun,
            Com.Alibaba.Entities.Request.RequestPolicy requestPolicy,
            bool retryIfFaild = true) where T : AliJsonResult
        {
            if (string.IsNullOrEmpty(requestPolicy.ClientId))
            {
                requestPolicy.ClientId = AccessTokenContainer.GetFirstOrDefaultClientId();
                if (string.IsNullOrEmpty(requestPolicy.ClientId))
                {
                    throw new UnRegisterClientIdException(null, "尚无已经注册的ClientId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else
            {
                if (!AccessTokenContainer.CheckRegistered(requestPolicy.ClientId))
                {
                    throw new UnRegisterClientIdException(requestPolicy.ClientId,
                                                          string.Format("此clientId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!",
                                                                        requestPolicy.ClientId));
                }
            }



            Task <T> result = null;

            try
            {
                if (string.IsNullOrEmpty(requestPolicy.AccessToken))
                {
                    var accessTokenResult = await AccessTokenContainer.GetAccessTokenResultAsync(requestPolicy.ClientId, false, requestPolicy.SessionType, requestPolicy.RequestSchema);

                    requestPolicy.AccessToken = accessTokenResult.access_token;
                }
                result = fun(requestPolicy);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    !string.IsNullOrEmpty(requestPolicy.ClientId) &&
                    (ex.JsonResult.code > 0 || !string.IsNullOrEmpty(ex.JsonResult.errorCode)))
                {
                    //尝试重新验证
                    //var accessTokenResult = AccessTokenContainer.GetAccessTokenResultAsync(clientId, true, sessionType);
                    var accessTokenResult = AccessTokenContainer.RefreshAccessTokenResultAsync(requestPolicy.ClientId, requestPolicy.SessionType, requestPolicy.RequestSchema);
                    //强制获取并刷新最新的AccessToken
                    requestPolicy.AccessToken = accessTokenResult.Result.access_token;
                    result = TryCommonApiAsync(fun, requestPolicy, false);
                }
                else
                {
                    throw;
                }
            }

            return(await result);
        }
Example #16
0
        /// <summary>
        /// 使用AccessToken进行操作时,如果遇到AccessToken错误的情况,重新获取AccessToken一次,并重试。
        /// 使用此方法之前必须使用AccessTokenContainer.Register(_clientId, _clientSecret);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="fun"></param>
        /// <param name="clientId"></param>
        /// <param name="accessToken">AccessToken 如果为null,则自动取已经注册的第一个clientId/appSecret来信息获取AccessToken。</param>
        /// <param name="retryIfFaild">请保留默认值true,不用输入。</param>
        /// <returns></returns>
        public static T TryCommonApi <T>(Func <string, T> fun, string clientId = null, string accessToken = null, SessionType sessionType = SessionType.Prod, bool retryIfFaild = true) where T : WishJsonResult
        {
            if (clientId == null)
            {
                clientId = AccessTokenContainer.GetFirstOrDefaultClientId();
                if (clientId == null)
                {
                    throw new UnRegisterClientIdException(null,
                                                          "尚无已经注册的ClientId,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!");
                }
            }
            else
            {
                if (!AccessTokenContainer.CheckRegistered(clientId))
                {
                    throw new UnRegisterClientIdException(clientId, string.Format("此clientId({0})尚未注册,请先使用AccessTokenContainer.Register完成注册(全局执行一次即可)!", clientId));
                }
            }


            T result = null;

            try
            {
                if (accessToken == null)
                {
                    var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(clientId, false, sessionType);
                    accessToken = accessTokenResult.data.access_token;
                }
                result = fun(accessToken);
            }
            catch (ErrorJsonResultException ex)
            {
                if (retryIfFaild &&
                    clientId != null &&
                    ex.JsonResult.code > 0)
                {
                    //尝试重新验证
                    //var accessTokenResult = AccessTokenContainer.GetAccessTokenResult(clientId, true);
                    var accessTokenResult = AccessTokenContainer.RefreshAccessTokenResult(clientId, sessionType);
                    //强制获取并刷新最新的AccessToken
                    accessToken = accessTokenResult.data.access_token;
                    result      = TryCommonApi(fun, clientId, accessToken, sessionType, false);
                }
                else
                {
                    ex.ClientId = clientId;
                    throw;
                }
            }
            catch (WishException ex)
            {
                ex.ClientId = clientId;
                throw;
            }

            return(result);
        }
Example #17
0
 public void AccessTokenCon()
 {
     if (!AccessTokenContainer.CheckRegistered("wx38d036665a0652d8"))              //检查是否已经注册
     {
         AccessTokenContainer.Register("wx38d036665a0652d8", "");                  //如果没有注册则进行注册
     }
     var result = AccessTokenContainer.GetAccessTokenResult("wx38d036665a0652d8"); //获取AccessToken结果
     var xx     = "";
 }
        public static string GetToken()
        {
            if (!AccessTokenContainer.CheckRegistered(GetAppSettings.AppID))                   //检查是否已经注册
            {
                AccessTokenContainer.Register(GetAppSettings.AppID, GetAppSettings.AppSecret); //如果没有注册则进行注册
            }
            var result = AccessTokenContainer.GetAccessTokenResult(GetAppSettings.AppID);      //获取AccessToken结果

            return(result.access_token);
        }
Example #19
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            var options = app.ApplicationServices.GetService <IOptions <WechatTemplateSendOptions> >()
                          .Value;

            if (!AccessTokenContainer.CheckRegistered(options.AppId))//检查是否已经注册
            {
                AccessTokenContainer.Register(options.AppId, options.AppSecret);
            }
        }
Example #20
0
        public bool WeixinSendMsg(int userId, string content, string url, ref ErrorInfo err)
        {
            string openId = "";

            using (DBEntities db = new DBEntities())
            {
                var entList = db.YL_WEIXIN_USER.Where(x => x.USER_ID == userId).OrderByDescending(x => x.TAKE_TIME).ToList();
                if (entList.Count() == 0)
                {
                    return(false);
                }
                var ent = entList[0];
                if (ent == null || string.IsNullOrEmpty(ent.OPENID))
                {
                    err.IsError = true;
                    err.Message = "该用户不是微信用户";
                    return(false);
                }
                openId = ent.OPENID;
            }
            string EncodingAESKey = WebConfigurationManager.AppSettings["WeixinEncodingAESKey"]; //与微信公众账号后台的EncodingAESKey设置保持一致,区分大小写。
            string AppId          = WebConfigurationManager.AppSettings["WeixinAppId"];          //与微信公众账号后台的AppId设置保持一致,区分大小写。
            string AppSecret      = WebConfigurationManager.AppSettings["WeixinAppSecret"];      //与微信公众账号后台的AppId设置保持一致,区分大小写。

            if (!AccessTokenContainer.CheckRegistered(AppId))
            {
                AccessTokenContainer.Register(AppId, AppSecret);
            }
            var result = AccessTokenContainer.GetAccessTokenResult(AppId); //CommonAPIs.CommonApi.GetToken(appId, appSecret);

            try
            {
                var allAtricle = new List <Senparc.Weixin.MP.Entities.Article>();
                allAtricle.Add(new Senparc.Weixin.MP.Entities.Article()
                {
                    Title = content,
                    Url   = string.Format(url, "?code=" + openId)
                });
                var wxJsonResult = Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendNews(result.access_token, openId, allAtricle);
                if (wxJsonResult.errcode != 0)
                {
                    err.IsError = true;
                    err.Message = wxJsonResult.errmsg;
                }
                else
                {
                    err.IsError = false;
                }
            }
            catch (Exception e) {
                err.IsError = true;
                err.Message = e.Message;
            }
            return(!err.IsError);
        }
Example #21
0
        private string GetToken()
        {
            if (!AccessTokenContainer.CheckRegistered(base.AppId))
            {
                AccessTokenContainer.Register(AppId, AppSecret);
            }

            var result = AccessTokenContainer.TryGetAccessToken(base.AppId, base.AppSecret);

            return(result.ToString());
        }
Example #22
0
        public ActionResult WxSignature(string url)
        {
            try
            {
                if (!AccessTokenContainer.CheckRegistered(appid)) //检查是否已经注册
                {
                    AccessTokenContainer.Register(appid, secret); //如果没有注册则进行注册
                }

                var tokenResult = HttpRuntimeCache.GetCache("LocalAccessToken") as LocalAccessToken;
                var useCache    = true;
                if (tokenResult == null || string.IsNullOrWhiteSpace(tokenResult?.access_token) || tokenResult.ExpiresTime == null || System.DateTime.Now > tokenResult.ExpiresTime) //过期
                {
                    useCache = false;
                    var result = AccessTokenContainer.GetAccessTokenResult(appid, true);
                    if (!string.IsNullOrWhiteSpace(result?.errmsg))
                    {
                        return(Json(new { ErrMsg = JsonConvert.SerializeObject(result) }, JsonRequestBehavior.AllowGet));
                        //return Json(new { data = JsonConvert.SerializeObject(new { appid, secret }), ErrMsg = JsonConvert.SerializeObject(tokenResult) }, JsonRequestBehavior.AllowGet);
                    }

                    tokenResult = new LocalAccessToken(result)
                    {
                    };

                    HttpRuntimeCache.SetCache("LocalAccessToken", tokenResult, 7260);
                }


                var ticket = JsApiTicketContainer.GetJsApiTicket(appid);

                var model = new WXShare()
                {
                    appId     = appid,
                    timestamp = JSSDKHelper.GetTimestamp(),
                    nonce     = JSSDKHelper.GetNoncestr(),
                    url       = Server.UrlDecode(url),
                    ticket    = ticket,
                    //result = JsonConvert.SerializeObject(tokenResult),
                    useCache = useCache
                };

                model.signature = JSSDKHelper.GetSignature(ticket, model.nonce, model.timestamp, model.url);
                return(Json(model, JsonRequestBehavior.AllowGet));
            }
            catch (System.Exception ex)
            {
                return(Json(new { ErrMsg = ex.Message, StackTrace = JsonConvert.SerializeObject(ex.StackTrace) }, JsonRequestBehavior.AllowGet));
            }
        }
        public ActionResult TestA()
        {
            string appId     = "wx965f031c1746f165";
            string appSecret = "daa338083c32106a72c62d439129c478";

            if (!AccessTokenContainer.CheckRegistered(appId))                   //检查是否已经注册
            {
                AccessTokenContainer.Register(appId, appSecret);                //如果没有注册则进行注册
            }
            var AccessToken = AccessTokenContainer.GetAccessTokenResult(appId); //获取AccessToken结果

            return(Content(AccessToken.access_token));
            //  return Content(result);
        }
Example #24
0
        /// <summary>
        /// 获取AccessToken
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="appSecret"></param>
        /// <param name="getNewToken">是否刷新缓存</param>
        /// <returns></returns>
        public string TryGetToken(string appId, string appSecret, bool getNewToken = false)
        {
            //AccessTokenContainer的TryGetToken有问题,所以自己实现一遍
            if (!AccessTokenContainer.CheckRegistered(appId))
            {
                lock (_locker)
                    if (!AccessTokenContainer.CheckRegistered(appId))
                    {
                        AccessTokenContainer.Register(appId, appSecret);
                    }
            }

            return(AccessTokenContainer.GetToken(appId, getNewToken));
        }
Example #25
0
        /// <summary>
        /// 获取token(无缓存)
        /// </summary>
        /// <returns></returns>
        public string GetAccessToken(string appid = "")
        {
            if (appid == "")
            {
                appid = _senparcWeixinSetting.WeixinAppId;
            }

            //根据appId判断获取
            if (!AccessTokenContainer.CheckRegistered(_senparcWeixinSetting.WeixinAppId))    //检查是否已经注册
            {
                //如果没有注册则进行注册
                AccessTokenContainer.RegisterAsync(_senparcWeixinSetting.WeixinAppId, _senparcWeixinSetting.WeixinAppSecret);
            }

            return(AccessTokenContainer.GetAccessToken(appid));
        }
 public ActionResult GetToken(string appId, string appSecret)
 {
     try
     {
         if (!AccessTokenContainer.CheckRegistered(appId))
         {
             AccessTokenContainer.Register(appId, appSecret);
         }
         var result = AccessTokenContainer.GetTokenResult(appId); //CommonAPIs.CommonApi.GetToken(appId, appSecret);
         return(Json(result, JsonRequestBehavior.AllowGet));
     }
     catch (Exception)
     {
         //TODO:为简化代码,这里不处理异常(如Token过期)
         return(Json(new { error = "执行过程发生错误!" }, JsonRequestBehavior.AllowGet));
     }
 }
Example #27
0
        public ActionResult GetToken(string appId, string appSecret)
        {
            try
            {
                if (!AccessTokenContainer.CheckRegistered(appId))
                {
                    AccessTokenContainer.Register(appId, appSecret);
                }
                var result = AccessTokenContainer.GetTokenResult(appId);

                return(Json(result, JsonRequestBehavior.AllowGet));
            }
            catch (Exception)
            {
                return(Json(new { error = "执行过程发生错误!" }, JsonRequestBehavior.AllowGet));
            }
        }
Example #28
0
 public OAuthUserInfo GetAuthInfo(OAuthAccessTokenResult token)
 {
     try
     {
         var appid     = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
         var appsecret = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
         if (!AccessTokenContainer.CheckRegistered(appid))
         {
             AccessTokenContainer.Register(appid, appsecret);
         }
         var ret = Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetUserInfo(token.access_token, token.openid);
         return(ret);
     }
     catch (Exception ex)
     {
         _logger.Error("获取微信授权信息", ex);
         return(null);
     }
 }
Example #29
0
 public string GetAuthorizeUrl(string redirect)
 {
     try
     {
         var appid     = _settingManager.GetSettingValue(AppSettings.Weixin.AppId);
         var appsecret = _settingManager.GetSettingValue(AppSettings.Weixin.AppSecret);
         if (!AccessTokenContainer.CheckRegistered(appid))
         {
             AccessTokenContainer.Register(appid, appsecret);
         }
         var ret = Senparc.Weixin.MP.AdvancedAPIs.OAuthApi.GetAuthorizeUrl(appid, redirect, "0", OAuthScope.snsapi_userinfo);
         return(ret);
     }
     catch (Exception ex)
     {
         _logger.Error("获取微信授权地址", ex);
         return("");
     }
 }
Example #30
0
        static void Main(string[] args)
        {
            //微信查询用户信息
            string appId     = "";
            string appSecret = "";
            string openId    = "";

            //检查是否已经注册
            if (!AccessTokenContainer.CheckRegistered(appId))
            {
                //如果没有注册则进行注册,2小时token过期
                AccessTokenContainer.Register(appId, appSecret);
            }
            string token = AccessTokenContainer.GetAccessToken(appId);
            //如果appId,appSecret和openId不配套,报错:微信请求发生错误!错误代码:40003,说明:invalid openid hint: [2BZbQA00621527]
            var info = UserApi.Info(token, openId);

            info = UserApi.Info(appId, openId);
        }