.net mvc (三)微信开放平台授权回调

微信开放平台授权回调,保存授权信息:

 /// <summary>
        /// 微信开放平台授权回调
        /// </summary>
        public ActionResult AuthCallBack()
        {
            try
            {
                string authorizationCode = StringHelper.ToString(Request["auth_code"]);//接收授权码
                int userId = StringHelper.ToInt(Request["uId"]);
                int channelCompanyId = StringHelper.ToInt(Request["channelCompanyId"]);

                Addlog("微信开放平台授权回调", "方法AuthCallBack,信息1:channelCompanyId:" + channelCompanyId + ",userId:" + userId + ",authorizationCode:" + authorizationCode);

                if (!String.IsNullOrEmpty(authorizationCode))
                {
                    _wechatOpenService.HandleAuth(channelCompanyId, userId, authorizationCode);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("WxController.AuthCallBack发生异常", ex);
            }
            return Redirect("");//授权完跳转
        }
 /// <summary>
        /// 授权回调处理逻辑
        /// </summary>
        /// <param name="channelCompanyId"></param>
        /// <param name="userId"></param>
        /// <param name="authorizationCode"></param>
        public void HandleAuth(int channelCompanyId, int userId, string authorizationCode)
        {
            try
            {
                if (String.IsNullOrEmpty(authorizationCode))
                {
                    LogHelper.Error("WechatOpenService.HandleAuth.authorizationCode为空");
                    return;
                }

                WechatPlatForm oFormInfo = _wechatPlatFormService.GetModel();
                if (oFormInfo != null && !String.IsNullOrEmpty(oFormInfo.PlatFormAppId))
                {
                    string componentAccessToken = GetComponentAccessToken();

                    if (!String.IsNullOrEmpty(componentAccessToken))
                    {
                        //调用微信开放平台接口获取授权信息
                        QueryAuthResult queryAuthInfo = GetAuthInfo(componentAccessToken, oFormInfo.PlatFormAppId, authorizationCode);
                        LogHelper.Debug("WechatOpenService.HandleAuth.queryAuthInfo:" + JsonConvert.SerializeObject(queryAuthInfo));

                        if (queryAuthInfo.errcode == 0)
                        {
                            string authorizerAppid = queryAuthInfo.authorization_info.authorizer_appid;
                            string authorizerAccessToken = queryAuthInfo.authorization_info.authorizer_access_token;
                            string authorizerRefreshToken = queryAuthInfo.authorization_info.authorizer_refresh_token;
                            string funcInfo = StringHelper.ToString(GetAuthorizedFuncIds(queryAuthInfo.authorization_info.func_info));//授权给开发者的权限集列表
                            LogHelper.Debug("WechatOpenService.HandleAuth.funcInfo:" + funcInfo);

                            #region 保存授权信息

                            if (string.IsNullOrEmpty(authorizerAppid) || string.IsNullOrEmpty(authorizerAccessToken) || string.IsNullOrEmpty(authorizerRefreshToken))
                            {
                                LogHelper.Error("WechatOpenService.HandleAuth  authorizerAppid或authorizerAccessToken或authorizerRefreshToken为空");
                                return;
                            }

                            WechatApp oWeChatApp = new WechatApp();
                            oWeChatApp.ChannelCompanyId = channelCompanyId;
                            oWeChatApp.AdminsId = userId;
                            oWeChatApp.WechatAppId = authorizerAppid;
                            oWeChatApp.AccessToken = authorizerAccessToken;
                            oWeChatApp.RefreshToken = authorizerRefreshToken;
                            oWeChatApp.AuthorizationCode = authorizationCode;
                            oWeChatApp.Status = 1;
                            oWeChatApp.FuncInfo = funcInfo;

                            #region 获取授权方基本信息
                            //调用微信开放平台接口获取授权方的基本信息
                            GetAuthorizerInfoResult authInfoResult = GetAuthorizerInfo(componentAccessToken, oFormInfo.PlatFormAppId, authorizerAppid);
                            LogHelper.Debug("WechatOpenService.HandleAuth.authInfoResult:" + JsonConvert.SerializeObject(authInfoResult));

                            if (authInfoResult.errcode == 0)
                            {
                                AuthorizerInfo authorizerInfo = authInfoResult.authorizer_info;
                                if (authorizerInfo != null && !String.IsNullOrEmpty(authorizerInfo.nick_name))
                                {
                                    oWeChatApp.NickName = authInfoResult.authorizer_info.nick_name;
                                    oWeChatApp.HeadImg = authInfoResult.authorizer_info.head_img;

                                    string jsonServiceTypeInfo = JsonConvert.SerializeObject(authInfoResult.authorizer_info.service_type_info);
                                    JObject jarryServiceTypeInfo = (JObject)JsonConvert.DeserializeObject(jsonServiceTypeInfo);
                                    if (jarryServiceTypeInfo != null && jarryServiceTypeInfo.Count > 0)
                                    {
                                        oWeChatApp.ServiceTypeInfo = StringHelper.ToInt(jarryServiceTypeInfo["id"]);
                                    }

                                    string jsonVerifyTypeInfo = JsonConvert.SerializeObject(authInfoResult.authorizer_info.verify_type_info);
                                    JObject jarryVerifyTypeInfo = (JObject)JsonConvert.DeserializeObject(jsonVerifyTypeInfo);
                                    if (jarryVerifyTypeInfo != null && jarryVerifyTypeInfo.Count > 0)
                                    {
                                        oWeChatApp.VerifyTypeInfo = StringHelper.ToInt(jarryVerifyTypeInfo["id"]);
                                    }

                                    oWeChatApp.WechatOriginalId = authInfoResult.authorizer_info.user_name;
                                    oWeChatApp.Alias = authInfoResult.authorizer_info.alias;
                                    oWeChatApp.HeadImg = authInfoResult.authorizer_info.head_img;
                                    oWeChatApp.QrcodeUrl = authInfoResult.authorizer_info.qrcode_url;
                                    oWeChatApp.IsMiniProgram = 0;
                                    oWeChatApp.PrincipalName = authInfoResult.authorizer_info.principal_name;

                                    BusinessInfo businessInfo = authInfoResult.authorizer_info.business_info;
                                    oWeChatApp.OpenCard = StringHelper.ToInt(businessInfo.open_card);
                                    oWeChatApp.OpenPay = StringHelper.ToInt(businessInfo.open_pay);
                                    oWeChatApp.OpenScan = StringHelper.ToInt(businessInfo.open_scan);
                                    oWeChatApp.OpenShake = StringHelper.ToInt(businessInfo.open_shake);
                                    oWeChatApp.OpenStore = StringHelper.ToInt(businessInfo.open_store);
                                }
                                else
                                {
                                    LogHelper.Error("WechatOpenService.HandleAuth.authorizerInfo信息为空,授权方基本信息:" + JsonConvert.SerializeObject(authInfoResult));
                                }
                            }
                            else
                            {
                                LogHelper.Error("WechatOpenService.HandleAuth.authInfoResult.errcode != 0");
                            }

                            #endregion 获取授权方基本信息

                            _wechatAppService.InsertOrUpdate(oWeChatApp);

                            #endregion 保存授权信息
                        }
                        else
                        {
                            LogHelper.Error("WechatOpenService.HandleAuth.queryAuthInfo.errcode != 0");
                        }
                    }
                    else
                    {
                        LogHelper.Error("WechatOpenService.HandleAuth.componentAccessToken为空");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("WechatOpenService.HandleAuth发生异常", ex);
                if (ex.ToString().Contains("42001") || ex.ToString().Contains("40014") && !CacheInstance.Instance.Get<bool>(BasicCacheKeys.HasUpdateInvalidComponentAccessTokenCacheKey))
                {
                    _wechatPlatFormService.UpdateInvalidComponentAccessToken();
                    CacheInstance.Instance.SetCache<bool>(BasicCacheKeys.HasUpdateInvalidComponentAccessTokenCacheKey, true);
                    HandleAuth(channelCompanyId, userId, authorizationCode);
                }
            }
        }
 /// <summary>
        ///  获取授权给开发者的权限集Id (以英文逗号分隔多个Id)
        /// </summary>
        /// <param name="listFuncInfo"></param>
        /// <returns></returns>
        public string GetAuthorizedFuncIds(List<FuncscopeCategoryItem> listFuncInfo)
        {
            string funcInfo = string.Empty;

            try
            {
                if (listFuncInfo != null && listFuncInfo.Count > 0)
                {
                    JArray jarryFuncInfo = (JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(listFuncInfo));
                    if (jarryFuncInfo != null && jarryFuncInfo.Count > 0)
                    {
                        for (int i = 0; i < jarryFuncInfo.Count; i++)
                        {
                            JObject objFunc = (JObject)jarryFuncInfo[i];
                            int id = StringHelper.ToInt(objFunc["funcscope_category"]["id"]);
                            funcInfo += id + ",";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("GetAuthorizedFuncIds发生异常", ex);
            }

            return funcInfo;
        }
保存授权公众号的信息。



猜你喜欢

转载自blog.csdn.net/qq736150416/article/details/81019623
今日推荐