/// <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); }
/// <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"; }
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); } }
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)); } }
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)); } }
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)); } }
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); }
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); }
/// <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)); }
/// <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"); }
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)); } }
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); }
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); }