/// <summary> /// /// </summary> /// <returns></returns> public static ReceiveMsg ParseReceiveMsg() { var request = HttpContext.Current.Request; var sr = new StreamReader(request.InputStream); LogHelper.Debug("开始sr.ReadToEnd()", "微信CallBack_"); var text = sr.ReadToEnd(); LogHelper.Debug("text:" + text, "微信CallBack_"); if (WeChatConfig.IsEncrypt()) { var appId = WeChatConfig.GetOpenAppId(); var token = WeChatConfig.GetOpenToken(); var encodingAesKey = WeChatConfig.GetOpenDesKey(); var sMsg = "";//解密后的内容 var msg = new WXBizMsgCrypt(token, encodingAesKey, appId); var ret = msg.DecryptMsg(request.QueryString["msg_signature"], request.QueryString["timestamp"], request.QueryString["nonce"], text, ref sMsg); LogHelper.Debug(string.Format("结果代码:{0}\r\n解密前内容:{1}\r\n解密后内容:{2}\r\nmsg_signature:{3}\r\ntimestamp:{4}\r\nnonce:{5}", ret, text, sMsg, request.QueryString["msg_signature"], request.QueryString["timestamp"], request.QueryString["nonce"]), "微信CallBack_"); text = sMsg; } var result = Parse(text); return(result); }
/// <summary> /// 将响应写入响应流。 /// </summary> public void Response(bool end = true) { var response = HttpContext.Current.Response; var request = HttpContext.Current.Request; if (response.IsClientConnected) { var text = ToXml(); if (WeChatConfig.IsEncrypt()) { var appId = WeChatConfig.GetOpenAppId(); var token = WeChatConfig.GetOpenToken(); var encodingAesKey = WeChatConfig.GetOpenDesKey(); var sMsg = "";//加密后的内容 var msg = new WXBizMsgCrypt(token, encodingAesKey, appId); var ret = msg.EncryptMsg(text, request.QueryString["timestamp"], request.QueryString["nonce"], ref sMsg); //var ret = msg.DecryptMsg(request.QueryString["msg_signature"], request.QueryString["timestamp"], request.QueryString["nonce"], text, ref sMsg); LogHelper.Debug(string.Format("结果代码:{0}\r\n加密前内容:{1}\r\n加密后内容:{2}\r\nmsg_signature:{3}\r\ntimestamp:{4}\r\nnonce:{5}", ret, text, sMsg, request.QueryString["msg_signature"], request.QueryString["timestamp"], request.QueryString["nonce"]), "微信CallBack_"); text = sMsg; } response.Write(text); if (end) { response.Flush(); response.Close(); } } }
/// <summary> /// 获取授权公众号的接口调用凭据(令牌)。传入:authorizer_appid(授权方appid)、authorizer_refresh_token(授权方的刷新令牌)、component_verify_ticket(微信后台推送的ticket,此ticket会定时推送) /// </summary> /// <param name="param"></param> /// <returns></returns> public static AuthorizerTokenResult GetAuthorizerAccessToken(WeChatParam param) { if (string.IsNullOrWhiteSpace(param.AuthorizerAppid)) { return(null); } var token = CacheHelper.Get("AuthorizerAccessToken" + param.AuthorizerAppid) as AuthorizerTokenResult; if (token != null && !string.IsNullOrWhiteSpace(token.AuthorizerAccessToken)) { return(token); } var componentAccessToken = Open.GetComponentToken(new WeChatParam() { ComponentVerifyTicket = param.ComponentVerifyTicket }); if (!componentAccessToken.IsSuccess) { return(new AuthorizerTokenResult() { IsSuccess = false, ErrMsg = componentAccessToken.ErrMsg }); } var result = HttpHelper.Post <AuthorizerTokenResult>(new HttpParam() { Url = ApiList.ApiAuthorizerToken, PostParam = new { component_appid = WeChatConfig.GetOpenAppId(), authorizer_appid = param.AuthorizerAppid, authorizer_refresh_token = param.AuthorizerRefreshToken }, GetParam = new { component_access_token = componentAccessToken.ComponentAccessToken } }); if (result.IsSuccess && !string.IsNullOrWhiteSpace(result.AuthorizerAccessToken)) { CacheHelper.Set("AuthorizerAccessToken" + param.AuthorizerAppid, result, result.ExpiresIn - 60); } else { LogHelper.Debug("GetAuthorizerAccessToken失败!" + result.ErrMsg, "微信_Fail_"); } return(result); }
/// <summary> /// 使用授权码换取公众号的接口调用凭据和授权信息 /// <para>传入:AuthorizationCode(授权code)、ComponentVerifyTicket(微信后台推送的ticket,此ticket会定时推送)</para> /// </summary> /// <param name="param"></param> public static QueryAuthResult QueryAuth(WeChatParam param) { var result = CacheHelper.Get("QueryAuth") as QueryAuthResult; if (result == null || string.IsNullOrWhiteSpace(result.AuthorizationInfo.AuthorizerAccessToken)) { var token = GetComponentToken(new WeChatParam() { ComponentVerifyTicket = param.ComponentVerifyTicket }); if (!token.IsSuccess) { return(new QueryAuthResult() { IsSuccess = false, ErrMsg = token.ErrMsg }); } result = HttpHelper.Post <QueryAuthResult>(new HttpParam() { Url = ApiList.ApiQueryAuth, PostParam = new { component_appid = WeChatConfig.GetOpenAppId(), authorization_code = param.AuthorizationCode }, GetParam = new { component_access_token = token.ComponentAccessToken } }); if (result.AuthorizationInfo != null) { CacheHelper.Set("QueryAuth", result, result.AuthorizationInfo.ExpiresIn - 60); } else { LogHelper.Debug("QueryAuth失败!" + result.ErrMsg, "微信_Fail_"); } } return(result); }
/// <summary> /// 获取预授权码.该API用于获取预授权码。预授权码用于公众号授权时的第三方平台方安全验证。 /// <para>传入:ComponentVerifyTicket(微信后台推送的ticket,此ticket会定时推送)</para> /// </summary> /// <param name="param"></param> /// <returns>返回:pre_auth_code(预授权码)、expires_in(有效期,为20分钟)</returns> public static CreatePreauthcodeResult GetCreatePreAuthCode(WeChatParam param) { var result = CacheHelper.Get("PreAuthCode") as CreatePreauthcodeResult; if (result == null || string.IsNullOrWhiteSpace(result.PreAuthCode)) { var token = GetComponentToken(new WeChatParam() { ComponentVerifyTicket = param.ComponentVerifyTicket }); if (!token.IsSuccess) { return(new CreatePreauthcodeResult() { IsSuccess = false, ErrMsg = token.ErrMsg }); } result = HttpHelper.Post <CreatePreauthcodeResult>(new HttpParam() { Url = ApiList.ApiCreatePreauthcode, PostParam = new { component_appid = WeChatConfig.GetOpenAppId() }, GetParam = new { component_access_token = token.ComponentAccessToken } }); if (!string.IsNullOrWhiteSpace(result.PreAuthCode)) { CacheHelper.Set("PreAuthCode", result, result.ExpiresIn); } else { LogHelper.Debug("GetCreatePreAuthCode失败!" + result.ErrMsg, "微信_Fail_"); } } return(result); }
/// <summary> /// 获取第三方平台access_token。该API用于获取第三方平台令牌(component_access_token) /// <para>传入:ComponentVerifyTicket(微信后台推送的ticket,此ticket会定时推送)</para> /// </summary> /// <param name="param"></param> /// <returns>返回ComponentAccessToken(第三方平台access_token)</returns> public static ComponentTokenResult GetComponentToken(WeChatParam param) { var result = CacheHelper.Get("ComponentToken") as ComponentTokenResult; if (result == null || string.IsNullOrWhiteSpace(result.ComponentAccessToken)) { result = HttpHelper.Post <ComponentTokenResult>(ApiList.ApiComponentToken, new { component_appid = WeChatConfig.GetOpenAppId(), component_appsecret = WeChatConfig.GetOpenAppSecret(), component_verify_ticket = param.ComponentVerifyTicket }); if (!string.IsNullOrWhiteSpace(result.ComponentAccessToken)) { CacheHelper.Set("ComponentToken", result, result.ExpiresIn - 60); } else { LogHelper.Debug("GetComponentToken失败!" + result.ErrMsg, "微信_Fail_"); } } return(result); }
/// <summary> /// 获取授权方的公众号帐号基本信息。该API用于获取授权方的公众号基本信息,包括头像、昵称、帐号类型、认证类型、微信号、原始ID和二维码图片URL。 /// <para>传入:AuthorizerAppid(授权方appid)、ComponentVerifyTicket(微信后台推送的ticket,此ticket会定时推送)</para> /// </summary> /// <param name="param"></param> public static GetAuthorizerInfoResult GetAuthorizerInfo(WeChatParam param) { var token = GetComponentToken(new WeChatParam() { ComponentVerifyTicket = param.ComponentVerifyTicket }); if (!token.IsSuccess) { return(new GetAuthorizerInfoResult() { IsSuccess = false, ErrMsg = token.ErrMsg }); } var str = HttpHelper.Post(new HttpParam() { Url = ApiList.ApiGetAuthorizerInfo, PostParam = new { component_appid = WeChatConfig.GetOpenAppId(), authorizer_appid = param.AuthorizerAppid }, GetParam = new { component_access_token = token.ComponentAccessToken } }); var result = JSON.ToObject <GetAuthorizerInfoResult>(str); if (!result.IsSuccess) { LogHelper.Debug("GetAuthorizerInfo失败!" + result.ErrMsg, "微信_Fail_"); } return(result); }