コード例 #1
0
        /// <summary>
        /// 用openid换取用户信息
        /// </summary>
        /// <param name="openid">微信标识id</param>
        /// <returns></returns>
        public Dictionary <string, object> GetUserList(string openid)
        {
            JavaScriptSerializer Jss = new JavaScriptSerializer();
            string access_token      = wxAccess_token.IsExistAccess_Token(); //获取access_token
            string url    = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", access_token, openid);
            string wxpost = WxRequest.GetPage(url, "");
            Dictionary <string, object> respDic = (Dictionary <string, object>)Jss.DeserializeObject(wxpost);

            return(respDic);
        }
コード例 #2
0
ファイル: WXRequestCommandBLL.cs プロジェクト: soon14/vzan
        /// <summary>
        /// 全网发布时处理文本发送
        /// </summary>
        /// <param name="requestMessage"></param>
        /// <returns></returns>
        public static string OnTextRequest(RequestMessageText requestMessage, PostModel postModel)
        {
            if (requestMessage.Content == "TESTCOMPONENT_MSG_TYPE_TEXT")
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("<xml>");
                sb.Append($"<ToUserName><![CDATA[{requestMessage.FromUserName}]]></ToUserName>");
                sb.Append($"<FromUserName><![CDATA[{requestMessage.ToUserName}]]></FromUserName>");
                sb.Append($"<CreateTime>{DateTimeHelper.GetTimeStamp(true)}</CreateTime>");
                sb.Append($"<MsgType><![CDATA[text]]></MsgType>");
                sb.Append($"<Content><![CDATA[TESTCOMPONENT_MSG_TYPE_TEXT_callback]]></Content>");
                sb.Append("</xml>");

                var timeStamp = DateTime.Now.Ticks.ToString();
                var nonce = DateTime.Now.Ticks.ToString();

                //必须要加密
                WXBizMsgCrypt msgCrype = new WXBizMsgCrypt(postModel.Token, postModel.EncodingAESKey, postModel.AppId);
                string finalResponseXml = null;
                msgCrype.EncryptMsg(sb.ToString().Replace("\r\n", "\n")/* 替换\r\n是为了处理iphone设备上换行bug */, timeStamp, nonce, ref finalResponseXml);//TODO:这里官方的方法已经把EncryptResponseMessage对应的XML输出出来了

                return finalResponseXml;
            }

            if (requestMessage.Content.StartsWith("QUERY_AUTH_CODE:"))
            {
                string openTicket = OpenPlatConfigBLL.SingleModel.GetComponentVerifyTicket();
                string query_auth_code = requestMessage.Content.Replace("QUERY_AUTH_CODE:", "");
                try
                {
                    OpenPlatConfig currentmodel = OpenPlatConfigBLL.SingleModel.getCurrentModel();
                    QueryAuthResult oauthResult = WxRequest.QueryAuth(currentmodel.component_access_token, currentmodel.component_Appid, query_auth_code);

                    //调用客服接口
                    string content = query_auth_code + "_from_api";

                    //Task.Run(() => {
                    //    Thread.Sleep(1000);
                    //    WxRequest.SendText(oauthResult.authorization_info.authorizer_access_token, requestMessage.FromUserName, content);
                    //});

                    WxRequest.SendText(oauthResult.authorization_info.authorizer_access_token, requestMessage.FromUserName, content);
                    return "";
                }
                catch (Exception ex)
                {
                    log4net.LogHelper.WriteError(typeof(WXRequestCommandBLL), ex);
                }
            }
            return "success";
        }
コード例 #3
0
        public static void LoadData(this WxRequest request, XmlElement rootElement)
        {
            var type       = request.GetType();
            var properties = type.GetProperties();

            foreach (var p in properties)
            {
                var node = rootElement.SelectSingleNode(p.Name);
                if (node == null)
                {
                    continue;
                }
                p.SetValue(request, Convert.ChangeType(node.InnerText, p.PropertyType), null);
            }
        }
コード例 #4
0
 public JsonResult DeleteCustomMenu()
 {
     try
     {
         string access_token = wxAccess_token.IsExistAccess_Token(); //获取access_token
         string wxpost       = WxRequest.GetPage("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + access_token, "");
         var    msg          = new { state = true, msg = "删除菜单结果:" + wxpost };
         return(Json(msg));
     }
     catch (Exception ex)
     {
         var msg = new { state = false, msg = ex.Message };
         return(Json(msg));
     }
 }
コード例 #5
0
 public JsonResult getServerIP()
 {
     try
     {
         string access_token = wxAccess_token.IsExistAccess_Token(); //获取access_token
         string wxpost       = WxRequest.GetPage("https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=" + access_token, "");
         var    msg          = new { state = true, msg = wxpost };
         return(Json(msg));
     }
     catch (Exception ex)
     {
         var msg = new { state = false, msg = ex.Message };
         return(Json(msg));
     }
 }
コード例 #6
0
 public JsonResult get_current_autoreply()
 {
     try
     {
         string access_token = wxAccess_token.IsExistAccess_Token(); //获取access_token
         string wxpost       = WxRequest.GetPage("https://api.weixin.qq.com/cgi-bin/get_current_autoreply_info?access_token=" + access_token, "");
         var    msg          = new { state = true, msg = "自动回复规则结果:" + wxpost };
         return(Json(msg));
     }
     catch (Exception ex)
     {
         var msg = new { state = false, msg = ex.Message };
         return(Json(msg));
     }
 }
コード例 #7
0
        public static WxRequest DeserializeMessage(string rawXml)
        {
            var doc = new XmlDocument();

            doc.LoadXml(rawXml);
            var       rootElement = doc.DocumentElement;
            var       msgType     = rootElement.SelectSingleNode("MsgType");
            var       messageType = msgType.InnerText.ToLower();
            WxRequest request     = null;

            switch (messageType)
            {
            case "text":
                request = new TextWxRequest();
                break;

            case "image":
                request = new ImageWxRequest();
                break;

            case "voice":
                request = new VoiceWxRequest();
                break;

            case "video":
                request = new VideoWxRequest();
                break;

            case "location":
                request = new LocationWxRequest();
                break;

            case "link":
                request = new LinkWxRequest();
                break;

            case "event":
                request = new EventWxRequest();
                break;

            default:
                request = new WxRequest();
                break;
            }
            request.LoadData(rootElement);
            return(request);
        }
コード例 #8
0
ファイル: WxCloudService.cs プロジェクト: uvaa/ytjkb
        public async Task <WxResponse <T> > QueryAsync <T>(WxRequest <T> req)
        {
            var result = new WxResponse <T>();

            var req_content = JsonConvert.SerializeObject(req, jss);

            var req_data = new
            {
                authen_info = new
                {
                    a = new
                    {
                        authen_type = 1,
                        authen_code = SHA256(req_content, req.AuthenKey)
                    }
                },
                request_content = req_content
            };

            var client = factory.CreateClient();
            var data   = new StringContent(JsonConvert.SerializeObject(req_data, jss), Encoding.UTF8, "application/json");
            var msg    = await client.PostAsync($"{domain}{req.ApiName}", data);

            var json = await msg.Content.ReadAsStringAsync();

            var res = JObject.Parse(json);

            if (res["response_content"] == null)
            {
                result.Status      = -1;
                result.Description = "请求结果为空";
                return(result);
            }

            var res_content = JObject.Parse(res["response_content"].ToString());

            if ((int)res_content["status"] == 0)
            {
                result.Data = JsonConvert.DeserializeObject <T>(res_content[req.DataName].ToString(), jss);
            }

            result.Status      = (int)res_content["status"];
            result.Description = res_content["description"].ToString();

            return(result);
        }
コード例 #9
0
        /// <summary>
        /// 发起授权页的体验URL
        /// </summary>
        /// <returns></returns>
        public ActionResult OAuth()
        {
            OpenPlatConfig currentmodel           = OpenPlatConfigBLL.SingleModel.getCurrentModel();
            string         component_access_token = currentmodel.component_access_token;
            //获取预授权码
            var preAuthCode = WxRequest.GetPreAuthCode(currentmodel.component_Appid, component_access_token);

            if (preAuthCode == null)
            {
                return(Content("获取预授权码失败"));
            }

            string callbackUrl = $"{WxRequest._component_Host}/OpenOAuth/OpenOAuthCallback";//成功回调地址
            string url         = WxRequest.ReturnUrl(currentmodel.component_Appid, preAuthCode.pre_auth_code, callbackUrl);

            return(Redirect(url));
        }
コード例 #10
0
ファイル: WXRequestCommandBLL.cs プロジェクト: soon14/vzan
        /// <summary>
        /// 处理小程序代码审核回调
        /// </summary>
        public static void CommandXCXPublish(string returntype, XDocument postDataDocument)
        {
            string username = postDataDocument.Root.Element("ToUserName").Value;
            string reason = string.Empty;

            //小程序代码审核成功回调
            OpenAuthorizerInfo amodel = OpenAuthorizerInfoBLL.SingleModel.getCurrentModel(username);
            if (amodel == null)
            {
                log4net.LogHelper.WriteInfo(typeof(WXRequestCommandBLL), "【" + returntype + "】" + username + "微信回调:找不到授权记录");
                return;
            }

            //小程序上传代码记录
            UserXcxTemplate userxcxtemplate = UserXcxTemplateBLL.SingleModel.GetModelByUserName(username);
            if (userxcxtemplate == null)
            {
                log4net.LogHelper.WriteInfo(typeof(WXRequestCommandBLL), "【" + returntype + "】" + username + "微信回调:找不到小程序上传代码记录");
                return;
            }

            //代码审核通过
            if (returntype == "weapp_audit_success")
            {
                //发布审核通过的小程序代码
                var cresult = WxRequest.Release(amodel.authorizer_access_token);

                userxcxtemplate.PreAuditId = userxcxtemplate.Auditid;
                //更改上传记录信息
                userxcxtemplate.State = cresult.errcode == 0 ? 3 : 4;
                userxcxtemplate.UpdateTime = DateTime.Now;
                userxcxtemplate.Reason = cresult.errcode == 0 ? "发布成功" : "发布失败" + cresult.errcode.ToString();
            }
            else
            {
                //更改上传记录信息
                userxcxtemplate.State = 1;
                userxcxtemplate.UpdateTime = DateTime.Now;
                userxcxtemplate.Reason = "审核不通过," + postDataDocument.Root.Element("Reason").Value;
            }

            UserXcxTemplateBLL.SingleModel.Update(userxcxtemplate, "Reason,UpdateTime,State,PreAuditId");
        }
コード例 #11
0
        public JsonResult CreateCustomMenu()
        {
            try
            {
                //FileStream fs = new FileStream(Server.MapPath(".") + "\\Files\\WXFiles\\menu.txt", FileMode.Open);
                FileStream   fs   = new FileStream(Server.MapPath("\\Files\\WXFiles\\menu.txt"), FileMode.Open);
                StreamReader sr   = new StreamReader(fs, Encoding.GetEncoding("GBK"));
                string       menu = sr.ReadToEnd();
                sr.Close();
                fs.Close();
                sr.Dispose();
                fs.Dispose();

                string access_token = wxAccess_token.IsExistAccess_Token(); //获取access_token
                string wxpost       = WxRequest.GetPage("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + access_token, menu);
                var    msg          = new { state = true, msg = "创建菜单结果:" + wxpost };
                return(Json(msg));
            }
            catch (Exception ex)
            {
                var msg = new { state = false, msg = ex.Message };
                return(Json(msg));
            }
        }
コード例 #12
0
ファイル: OpenPlatConfigBLL.cs プロジェクト: soon14/vzan
        public OpenPlatConfig getCurrentModel(string appid = "", bool isreflsh = false, bool isqiangzhi = false)
        {
            if (string.IsNullOrEmpty(appid))
            {
                appid = ConfigurationManager.AppSettings["Component_Appid"];
            }

            OpenPlatConfig model = RedisUtil.Get <OpenPlatConfig>(string.Format(key, appid));

            if (model != null)
            {
                if (!((model.token_time.AddMinutes(minutes) < DateTime.Now)))
                {
                    return(model);
                }
            }


            lock (_objlock)
            {
                model = RedisUtil.Get <OpenPlatConfig>(string.Format(key, appid));
                if (model != null)
                {
                    if (!((model.token_time.AddMinutes(minutes) < DateTime.Now)))
                    {
                        return(model);
                    }
                }

                model = GetModel(string.Format("component_Appid='{0}'", appid));
                if (model == null)
                {
                    throw new Exception("没有设置第三方平台信息");
                }

                if ((model.token_time.AddMinutes(minutes) < DateTime.Now) || string.IsNullOrEmpty(model.component_access_token))//刷新token
                {
                    try
                    {
                        string tiket = GetComponentVerifyTicket(model.component_Appid);
                        ComponentAccessTokenResult token = WxRequest.GetComonentToken(model.component_Appid, model.component_AppSecret, tiket);

                        if (token != null && token.component_access_token != null && token.component_access_token.Length > 0)
                        {
                            model.component_access_token = token.component_access_token;
                            model.token_time             = DateTime.Now;

                            bool result = Update(model, "component_access_token,token_time");
                            if (!result)
                            {
                                log4net.LogHelper.WriteInfo(this.GetType(), "保存刷新平台后Token失败");
                            }
                        }
                        else
                        {
                            log4net.LogHelper.WriteInfo(this.GetType(), "第三方平台刷新token失败1:" + Utility.SerializeHelper.SerToJson(token));
                        }
                    }
                    catch (Exception ex)
                    {
                        log4net.LogHelper.WriteError(this.GetType(), ex);
                    }
                }

                RedisUtil.Set <OpenPlatConfig>(string.Format(key, appid), model, TimeSpan.FromMinutes(minutes));
            }

            return(model);
        }
コード例 #13
0
        public OpenAuthorizerInfo getCurrentModel(string user_name, bool isreflsh = false)
        {
            string             cachekey = string.Format(accestoenkey, user_name);
            OpenAuthorizerInfo model    = RedisUtil.Get <OpenAuthorizerInfo>(cachekey);

            if (model != null)
            {
                if (!(isreflsh || model.refreshtime.AddMinutes(_minutes) < DateTime.Now || string.IsNullOrEmpty(model.authorizer_access_token)))
                {
                    return(model);
                }
            }
            model = GetModel(string.Format("user_name='{0}'", user_name));
            if (model == null)
            {
                throw new Exception("没有第三方授权信息:username="******"user_name='{0}'", user_name));
                if (model == null)
                {
                    throw new Exception("没有第三方授权信息:username="******"{user_name}授权公众号刷新token失败:{token.errcode.ToString()}");
                        }
                    }
                    catch (Exception ex)
                    {
                        log4net.LogHelper.WriteError(this.GetType(), ex);
                    }
                }
                RedisUtil.Set <OpenAuthorizerInfo>(cachekey, model, TimeSpan.FromMinutes(_minutes));
            }

            return(model);
        }