public static string WXTemplateMsgSend(object[] infoValue) { string strRecode = "微信模板消息发送失败!-原因:{0}-当前医生:{1}"; try { if (string.IsNullOrEmpty(infoValue[0].ToString())) //参数缺少医生编号 { LogHelper.Log.Error(string.Format(strRecode, "err_wx_002(参数中未找到医生编号)", "null")); return("err_wx_002"); } string doc_code = infoValue[0].ToString(); //取得参数中的值 string openid = infoValue[1].ToString(); string template_id = infoValue[2].ToString(); string url = infoValue[3].ToString(); string topcolor = infoValue[4].ToString(); string data = infoValue[5].ToString(); data = TmoCommon.JsonHelper.XMLToJSON(data); data = data.TrimStart('{').Remove(data.Length - 2); #region 发送命令 send: string AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, true); if (string.IsNullOrEmpty(AccessToken) || AccessToken.StartsWith("err")) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_accessToken(获取accessToken失败:(" + AccessToken + "))", doc_code)); return("err_wx_accessToken"); } string uri = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + AccessToken; string postdata = "{\"touser\":\"" + openid + "\",\"template_id\":\"" + template_id + "\",\"url\":\"" + url + "\",\"topcolor\":\"" + topcolor + "\"," + data + "}"; WebRequest request = WebRequest.Create(uri); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; Stream writer = request.GetRequestStream(); byte[] pdarry = Encoding.UTF8.GetBytes(postdata); writer.Write(pdarry, 0, pdarry.Length); writer.Close(); #endregion #region 取得命令返回值 WebResponse response = request.GetResponse(); Stream rpReader = response.GetResponseStream(); StreamReader reader = new StreamReader(rpReader, Encoding.UTF8); string rtStr = reader.ReadToEnd(); reader.Close(); rpReader.Close(); response.Close(); rtStr = rtStr.Replace("<", "<").Replace(">", ">"); #endregion #region 结果处理 if (string.IsNullOrEmpty(rtStr)) { return("err_wx_003"); } var jsNodes = TmoCommon.JsonHelper.GetJsonValues(rtStr); if (jsNodes == null || jsNodes.Count == 0) { return("err_json_converter"); } if (jsNodes.ContainsKey("errcode")) { string errcode = jsNodes["errcode"].Value.Trim(); if (errcode == "0") { //if (!AddWeiXinPushHistory(openid, data)) //{ // LogHelper.Log.Error("WeiXin", "创建微信模板消息历史记录失败"); // return "err_success_创建微信模板消息历史记录失败"; //} if (jsNodes.ContainsKey("msgid")) { return("success_" + jsNodes["msgid"].Value.Trim()); //成功 } else { return("err_success"); } } else if (errcode == "40001" || errcode == "40002") //access_token问题 { AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, false); goto send; } else { return("err_" + errcode + "_" + jsNodes["errmsg"].Value); } } else { return("err_errcode_null"); } #endregion } catch (Exception e) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_001(未知异常失败)", infoValue[0]), e); return("err_wx_001"); } }
/// <summary> ///设置模板消息所属行业(每月仅可修改1次) /// </summary> /// <param name="infoValue">0-医生编号 1-主行业 2-副行业</param> /// <returns></returns> public static string WXTemplateSetIndustry(object[] infoValue) { string strRecode = "设置微信模板消息所属行业失败!-原因:{0}-当前医生:{1}"; try { if (string.IsNullOrEmpty(infoValue[0].ToString())) //参数缺少医生编号 { LogHelper.Log.Error(string.Format(strRecode, "err_wx_002(参数中未找到医生编号)", "null")); return("err_wx_002"); } string doc_code = infoValue[0].ToString(); //取得参数中的值 string industry_id1 = infoValue[1].ToString(); string industry_id2 = infoValue[2].ToString(); #region 行业代码查询 /* * 主行业 副行业 代码 * IT科技 互联网/电子商务 1 * IT科技 IT软件与服务 2 * IT科技 IT硬件与设备 3 * IT科技 电子技术 4 * IT科技 通信与运营商 5 * IT科技 网络游戏 6 * 金融业 银行 7 * 金融业 基金|理财|信托 8 * 金融业 保险 9 * 餐饮 餐饮 10 * 酒店旅游 酒店 11 * 酒店旅游 旅游 12 * 运输与仓储 快递 13 * 运输与仓储 物流 14 * 运输与仓储 仓储 15 * 教育 培训 16 * 教育 院校 17 * 政府与公共事业 学术科研 18 * 政府与公共事业 交警 19 * 政府与公共事业 博物馆 20 * 政府与公共事业 公共事业|非盈利机构 21 * 医药护理 医药医疗 22 * 医药护理 护理美容 23 * 医药护理 保健与卫生 24 * 交通工具 汽车相关 25 * 交通工具 摩托车相关 26 * 交通工具 火车相关 27 * 交通工具 飞机相关 28 * 房地产 建筑 29 * 房地产 物业 30 * 消费品 消费品 31 * 商业服务 法律 32 * 商业服务 会展 33 * 商业服务 中介服务 34 * 商业服务 认证 35 * 商业服务 审计 36 * 文体娱乐 传媒 37 * 文体娱乐 体育 38 * 文体娱乐 娱乐休闲 39 * 印刷 印刷 40 * 其它 其它 41 */ #endregion #region 发送命令 send: string AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, true); if (string.IsNullOrEmpty(AccessToken) || AccessToken.StartsWith("err")) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_accessToken(获取accessToken失败:(" + AccessToken + "))", doc_code)); return("err_wx_accessToken"); } string url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=" + AccessToken; string postdata = "{\"industry_id1\":\"" + industry_id1 + "\",\"industry_id2\":\"" + industry_id2 + "\"}"; WebRequest request = WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; Stream writer = request.GetRequestStream(); byte[] pdarry = Encoding.UTF8.GetBytes(postdata); writer.Write(pdarry, 0, pdarry.Length); writer.Close(); #endregion #region 取得命令返回值 WebResponse response = request.GetResponse(); Stream rpReader = response.GetResponseStream(); StreamReader reader = new StreamReader(rpReader, Encoding.UTF8); string rtStr = reader.ReadToEnd(); reader.Close(); rpReader.Close(); response.Close(); rtStr = rtStr.Replace("<", "<").Replace(">", ">"); #endregion #region 结果处理 if (string.IsNullOrEmpty(rtStr)) { return("err_wx_003"); } var jsNodes = TmoCommon.JsonHelper.GetJsonValues(rtStr); if (jsNodes == null || jsNodes.Count == 0) { return("err_json_converter"); } if (jsNodes.ContainsKey("errcode")) { string errcode = jsNodes["errcode"].Value.Trim(); if (errcode == "0") { return("success"); //成功 } else if (errcode == "40001" || errcode == "40002") //access_token问题 { AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, false); goto send; } else { return("err_" + errcode + "_" + jsNodes["errmsg"].Value); } } else { return("err_errcode_null"); } #endregion } catch (Exception e) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_001(未知异常失败)", infoValue[0]), e); return("err_wx_001"); } }
/// <summary> ///获得模板ID /// </summary> /// <param name="infoValue">0-医生编号 1-模板库中的短ID</param> /// <returns></returns> public static string WXGetTemplateSetID(object[] infoValue) { string strRecode = "获得微信模板ID失败!-原因:{0}-当前医生:{1}"; try { if (string.IsNullOrEmpty(infoValue[0].ToString())) //参数缺少医生编号 { LogHelper.Log.Error(string.Format(strRecode, "err_wx_002(参数中未找到医生编号)", "null")); return("err_wx_002"); } string doc_code = infoValue[0].ToString(); //取得参数中的值 string template_id_short = infoValue[1].ToString(); #region 发送命令 send: string AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, true); if (string.IsNullOrEmpty(AccessToken) || AccessToken.StartsWith("err")) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_accessToken(获取accessToken失败:(" + AccessToken + "))", doc_code)); return("err_wx_accessToken"); } string url = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=" + AccessToken; string postdata = "{\"template_id_short\":\"" + template_id_short + "\"}"; WebRequest request = WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; Stream writer = request.GetRequestStream(); byte[] pdarry = Encoding.UTF8.GetBytes(postdata); writer.Write(pdarry, 0, pdarry.Length); writer.Close(); #endregion #region 取得命令返回值 WebResponse response = request.GetResponse(); Stream rpReader = response.GetResponseStream(); StreamReader reader = new StreamReader(rpReader, Encoding.UTF8); string rtStr = reader.ReadToEnd(); reader.Close(); rpReader.Close(); response.Close(); rtStr = rtStr.Replace("<", "<").Replace(">", ">"); #endregion #region 结果处理 if (string.IsNullOrEmpty(rtStr)) { return("err_wx_003"); } var nodes = TmoCommon.JsonHelper.JSONToObject <Dictionary <string, string> >(rtStr); if (nodes == null || nodes.Count == 0) { return("err_json_converter"); } if (nodes.ContainsKey("errcode")) { string errcode = nodes["errcode"].Trim(); if (errcode == "0") { if (nodes.ContainsKey("template_id")) { string template_id = nodes["template_id"].Trim(); WxTemplateID template = null; BinaryFormatter bf = new BinaryFormatter(); string configValue = ConfigHelper.GetConfigString("wx_templateid"); if (!string.IsNullOrEmpty(configValue)) { MemoryStream msr = new MemoryStream(Encoding.UTF8.GetBytes(configValue)); template = (WxTemplateID)bf.Deserialize(msr); msr.Close(); } if (template == null) { template = new WxTemplateID(TmoShare.WX_APP_ID); } template.AddTemplate(template_id_short, template_id); byte[] tmp = new byte[1024]; MemoryStream msw = new MemoryStream(tmp); bf.Serialize(msw, template); msw.Close(); configValue = Encoding.UTF8.GetString(tmp); if (!ConfigHelper.UpdateConfig("wx_templateid", configValue, true)) { ConfigHelper.GetConfigString("wx_templateid", configValue, true); } return(template_id); //成功 } else { return("err_success"); } } else if (errcode == "40001" || errcode == "40002") //access_token问题 { AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, false); goto send; } else { return("err_" + errcode + "_" + nodes["errmsg"]); } } else { return("err_errcode_null"); } #endregion } catch (Exception e) { LogHelper.Log.Error(string.Format(strRecode, "err_wx_001(未知异常失败)", infoValue[0]), e); return("err_wx_001"); } }
/// <summary> /// 发送微信消息 /// </summary> /// <param name="infoValue"> /// doc_code /// openID /// msgType /// msgContent /// </param> /// <returns></returns> public static string WXMsgSend(object[] infoValue) { string strRecode = ""; try { if (infoValue[0].ToString() != "") { string doc_code = infoValue[0].ToString(); string openID = infoValue[1].ToString(); string msgType = infoValue[2].ToString(); string msgContent = infoValue[3].ToString(); string AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, true); string url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + AccessToken; string postDataStr = "{\"touser\":\"" + openID + "\",\"msgtype\":\"text\",\"" + msgType + "\":{\"content\":\"" + msgContent + "\"}}"; System.Net.HttpWebRequest request; request = (System.Net.HttpWebRequest)WebRequest.Create(url); //Post请求方式 request.Method = "POST"; // 内容类型 request.ContentType = "application/x-www-form-urlencoded"; // 参数经过URL编码 //string paraUrlCoded = "";// System.Web.HttpUtility.UrlEncode("keyword"); //paraUrlCoded = System.Web.HttpUtility.UrlEncode(postDataStr); byte[] payload; //将URL编码后的字符串转化为字节 payload = System.Text.Encoding.UTF8.GetBytes(postDataStr); //设置请求的 ContentLength request.ContentLength = payload.Length; //获得请 求流 Stream writer = request.GetRequestStream(); //将请求参数写入流 writer.Write(payload, 0, payload.Length); // 关闭请求流 writer.Close(); System.Net.HttpWebResponse response; // 获得响应流 response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.Stream data; data = response.GetResponseStream(); string strValue = ""; using (StreamReader reader = new StreamReader(data, Encoding.Default)) { strValue = reader.ReadToEnd().Trim(); data.Close(); reader.Close(); } strValue = strValue.Replace("<", "<"); strValue = strValue.Replace(">", ">"); string retString = strValue; #region 结果处理 if (string.IsNullOrEmpty(retString)) { return("err_wx_003"); } Dictionary <string, TmoCommon.JsonHelper.JsonNode> jsNodes = TmoCommon.JsonHelper.GetJsonValues(retString); if (jsNodes != null || jsNodes.Count > 0) { if (jsNodes.ContainsKey("errcode")) { #region 返回参数解析格式 // 全局返回码说明如下: //返回码 说明 //-1 系统繁忙 //0 请求成功 //40001 获取access_token时AppSecret错误,或者access_token无效 //40002 不合法的凭证类型 //40003 不合法的OpenID //40004 不合法的媒体文件类型 //40005 不合法的文件类型 //40006 不合法的文件大小 //40007 不合法的媒体文件id //40008 不合法的消息类型 //40009 不合法的图片文件大小 //40010 不合法的语音文件大小 //40011 不合法的视频文件大小 //40012 不合法的缩略图文件大小 //40013 不合法的APPID //40014 不合法的access_token //40015 不合法的菜单类型 //40016 不合法的按钮个数 //40017 不合法的按钮个数 //40018 不合法的按钮名字长度 //40019 不合法的按钮KEY长度 //40020 不合法的按钮URL长度 //40021 不合法的菜单版本号 //40022 不合法的子菜单级数 //40023 不合法的子菜单按钮个数 //40024 不合法的子菜单按钮类型 //40025 不合法的子菜单按钮名字长度 //40026 不合法的子菜单按钮KEY长度 //40027 不合法的子菜单按钮URL长度 //40028 不合法的自定义菜单使用用户 //40029 不合法的oauth_code //40030 不合法的refresh_token //40031 不合法的openid列表 //40032 不合法的openid列表长度 //40033 不合法的请求字符,不能包含\uxxxx格式的字符 //40035 不合法的参数 //40038 不合法的请求格式 //40039 不合法的URL长度 //40050 不合法的分组id //40051 分组名字不合法 //41001 缺少access_token参数 //41002 缺少appid参数 //41003 缺少refresh_token参数 //41004 缺少secret参数 //41005 缺少多媒体文件数据 //41006 缺少media_id参数 //41007 缺少子菜单数据 //41008 缺少oauth code //41009 缺少openid //42001 access_token超时 //42002 refresh_token超时 //42003 oauth_code超时 //43001 需要GET请求 //43002 需要POST请求 //43003 需要HTTPS请求 //43004 需要接收者关注 //43005 需要好友关系 //44001 多媒体文件为空 //44002 POST的数据包为空 //44003 图文消息内容为空 //44004 文本消息内容为空 //45001 多媒体文件大小超过限制 //45002 消息内容超过限制 //45003 标题字段超过限制 //45004 描述字段超过限制 //45005 链接字段超过限制 //45006 图片链接字段超过限制 //45007 语音播放时间超过限制 //45008 图文消息超过限制 //45009 接口调用超过限制 //45010 创建菜单个数超过限制 //45015 回复时间超过限制 //45016 系统分组,不允许修改 //45017 分组名字过长 //45018 分组数量超过上限 //46001 不存在媒体数据 //46002 不存在的菜单版本 //46003 不存在的菜单数据 //46004 不存在的用户 //47001 解析JSON/XML内容错误 //48001 api功能未授权 //50001 用户未授权该api #endregion if (jsNodes["errcode"].Value.Trim() == "0") { return("success"); } else if (jsNodes["errcode"].Value.Trim() == "40001" || jsNodes["errcode"].Value.Trim() == "40002") { AccessToken = WeChatHelper.WXGetAccessToken(new object[] { "admin" }, false); if (AccessToken.StartsWith("err") || AccessToken == "") { return("err_access_token_creat"); } } else if (jsNodes["errcode"].Value == "45015") //用户一定时间内没有和公众号沟通 回复受限 { return("err_wx_time_limit"); } else { strRecode = "err_" + jsNodes["errcode"].Value + "_" + jsNodes["errmsg"].Value; } } else { strRecode = "err_errcode_null"; } } else { strRecode = "err_json_converter"; } #endregion } else { strRecode = "未传入医生编码!"; LogHelper.Log.Error(strRecode); return("err_wx_002"); } } catch (Exception e) { strRecode = "当前医生" + infoValue[0] + "获取列表失败! 原因:err_wx_001(未知异常失败)"; LogHelper.Log.Error(strRecode, e); return("err_wx_001"); } return(""); }