예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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();
                }
            }
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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);
        }