微信开放平台授权回调,保存授权信息:
/// <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;
}
保存授权公众号的信息。