public void UploadTemporaryNewsTest() { var accessToken = AccessTokenContainer.GetToken(_appId); var file = @"E:\1.jpg"; var mediaId = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.thumb, file).thumb_media_id; Assert.IsNotNull(mediaId); var new1 = new NewsModel() { author = "test", content = "test", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var new2 = new NewsModel() { author = "test", content = "test111", content_source_url = "http://qy.weiweihi.com/Content/Images/app/qyhelper.png", digest = "test", show_cover_pic = "1", thumb_media_id = mediaId, title = "test" }; var result = MediaApi.UploadTemporaryNews(accessToken, 10000, new1, new2); Assert.IsNotNull(result.media_id); }
/// <summary> /// 处理语音请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { var responseMessage = CreateResponseMessage <ResponseMessageMusic>(); //上传缩略图 //var accessToken = Containers.AccessTokenContainer.TryGetAccessToken(appId, appSecret); var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image, ServerUtility.ContentRootMapPath("~/Images/Logo.jpg")); //设置音乐信息 responseMessage.Music.Title = "天籁之音"; responseMessage.Music.Description = "播放您上传的语音"; responseMessage.Music.MusicUrl = "https://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.HQMusicUrl = "https://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.ThumbMediaId = uploadResult.media_id; //推送一条客服消息 try { CustomApi.SendText(appId, OpenId, "本次上传的音频MediaId:" + requestMessage.MediaId); } catch { } return(responseMessage); }
// /// <summary> // /// 取得用户组 // /// </summary> // /// <returns></returns> // public JsonResult GetGroupList() // { // Log.Info("≤============", null, null); // string accessToken = string.Empty; // try // { // accessToken = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); // Log.Info("取得用户组", accessToken, null); // } // catch (Exception ex) // { // Log.Info("Execute:执行微信处理过程", ex.Message, "Exception"); // } // finally // { // Log.Info("============≥", null, null); // } // GroupsJson groupJson = GroupsApi.Get(accessToken); // return Json(groupJson.groups, JsonRequestBehavior.AllowGet); // } #endregion #region MyRegion 取得所有微信关注的粉丝 // /// <summary> // /// 取得所有微信关注的粉丝 // /// </summary> // /// <returns></returns> // public JsonResult GetUserList() // { // // var accessToken = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); // OpenIdResultJson openIdResultJson = null; // string nextOpenid = string.Empty; // List<UserInfoJson> list = new List<UserInfoJson>(); // // do // { // openIdResultJson = UserApi.Get(accessToken, nextOpenid); // // nextOpenid = openIdResultJson.next_openid; // // if (openIdResultJson.data != null) // { // foreach (string openid in openIdResultJson.data.openid) // { // UserInfoJson userJson = UserApi.Info(accessToken, openid); // list.Add(userJson); // } // } // // } while (openIdResultJson != null && !string.IsNullOrEmpty(openIdResultJson.next_openid)); // // return Json(list, JsonRequestBehavior.AllowGet); // } #endregion #region 材 /// <summary> /// 上传临时素材-上传一张图片为例 /// </summary> /// <returns></returns> public UploadTemporaryMediaResult UploadTemporaryMedia() { var accessToken = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); string imgUrl = Server.MapPath("~/logo.png"); UploadTemporaryMediaResult mediaResult = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, imgUrl); return(mediaResult); }
public void UploadForeverVideoTest() { var accessToken = AccessTokenContainer.GetToken(_appId); var file = @"E:\Test.mp4"; var result = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.video, file); Assert.IsNotNull(result.media_id); mediaId = result.media_id; }
public void SendImageByGroupIdTest() { string file = ""; //文件路径,以下以图片为例 string groupId = ""; //分组Id var accessToken = AccessTokenContainer.GetAccessToken(_appId); var mediaId = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, file).media_id; var result = GroupMessageApi.SendGroupMessageByGroupId(accessToken, groupId, mediaId, GroupMessageType.image, false); Assert.IsTrue(result.msg_id.Length > 0); }
public void UploadTemporaryMediaTest() { var accessToken = AccessTokenContainer.GetToken(_appId); var type = UploadMediaFileType.image; var file = @"E:\1.jpg"; var result = MediaApi.UploadTemporaryMedia(accessToken, type, file); Assert.AreEqual(type, result.type); Assert.IsNotNull(result.media_id); mediaId = result.media_id; }
//[TestMethod] public string SendImageByOpenIdTest() { string file = "";//文件路径,以下以图片为例 string[] openIds = new string[] { _testOpenId }; var accessToken = AccessTokenContainer.GetAccessToken(_appId); var mediaId = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, file).media_id; var result = GroupMessageApi.SendGroupMessageByOpenId(accessToken, GroupMessageType.image, mediaId, Config.TIME_OUT, openIds); Assert.IsTrue(result.msg_id.Length > 0); return(result.msg_id); }
//[TestMethod] public string SendImageByOpenIdTest() { string file = "C:\\Users\\roman\\Pictures\\捕获.PNG";//文件路径,以下以图片为例 string[] openIds = new string[] { _testOpenId, "oIskUw5ONFqLqb4XUyLHQ7Lu5t64" }; var accessToken = AccessTokenContainer.GetAccessToken(_appId); var mediaId = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, file).media_id; var clientMsgId = DateTime.Now.Ticks.ToString(); var result = GroupMessageApi.SendGroupMessageByOpenId(accessToken, GroupMessageType.text, "你好lizejia", clientMsgId, Config.TIME_OUT, openIds); Assert.IsTrue(result.msg_id.Length > 0); return(result.msg_id); }
/// <summary> /// 处理语音请求 /// </summary> /// <param name="requestMessage"></param> /// <returns></returns> public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { var responseMessage = CreateResponseMessage <ResponseMessageMusic>(); //上传缩略图 var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret); var uploadResult = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, Server.GetMapPath("~/Images/Logo.jpg")); //设置音乐信息 responseMessage.Music.Title = "天籁之音"; responseMessage.Music.Description = "播放您上传的语音"; responseMessage.Music.MusicUrl = "http://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.HQMusicUrl = "http://sdk.weixin.senparc.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.ThumbMediaId = uploadResult.media_id; return(responseMessage); }
public void UploadTemporaryMediaTest() { var accessToken = AccessTokenContainer.GetAccessToken(_appId); var type = UploadMediaFileType.image; #if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\qr.jpg"); #else var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\qr.jpg"); #endif var result = MediaApi.UploadTemporaryMedia(accessToken, type, file); Assert.AreEqual(type, result.type); Assert.IsNotNull(result.media_id); mediaId = result.media_id; }
/// <summary> /// 群发消息 /// </summary> /// <param name="type"> /// 群发类型Text = 0, /// News = 1, /// Music = 2, /// Image = 3, /// Voice = 4, /// Video = 5 /// <param name="groupId">要发送的用户分组ID 发给所有的时候可以不输入</param> /// <returns>返回消息ID</returns> public string SendGroupMessageAll(int type, int groupId = -1) { var accessToken = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret); SendResult result = null; bool isToAll = (groupId == -1); string imgFilePath = Server.MapPath("~/logo.png"); switch ((ResponseMsgType)type) { case ResponseMsgType.Text: result = GroupMessageApi.SendGroupMessageByGroupId(accessToken, groupId.ToString(), "测试的群发文本内容---来自北盟网校", GroupMessageType.text, isToAll); break; case ResponseMsgType.Image: UploadTemporaryMediaResult mediaImage = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, imgFilePath); result = GroupMessageApi.SendGroupMessageByGroupId(accessToken, groupId.ToString(), mediaImage.media_id, GroupMessageType.image, isToAll); break; case ResponseMsgType.News: UploadTemporaryMediaResult mediaResultImage = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, imgFilePath); NewsModel[] newsModels = new NewsModel[5]; for (int i = 0; i < 5; i++) { newsModels[i] = new NewsModel(); newsModels[i].title = "标题" + i; newsModels[i].author = "作者"; newsModels[i].thumb_media_id = mediaResultImage.media_id; newsModels[i].show_cover_pic = "http://weixin.bamn.cn/logo.png"; newsModels[i].content = "内容"; newsModels[i].content_source_url = "http://www.bamn.cn"; newsModels[i].digest = "描述"; } var mediaResultNews = MediaApi.UploadTemporaryNews(accessToken, 10000, newsModels); result = GroupMessageApi.SendGroupMessageByGroupId(accessToken, groupId.ToString(), mediaResultNews.media_id, GroupMessageType.mpnews, isToAll); break; } return(result.errcode + "-" + result.errmsg); }
public void DownloadToDirTest() { ////下载图片 //var file = string.Format("qr-{0}.jpg", SystemTime.Now.Ticks); //using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)) //{ // Get.Download(url, fs);//下载 // fs.Flush();//直接保存,无需处理指针 //} #if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_1 var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\qr.jpg"); #else var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\qr.jpg"); #endif //上传素材 var result = MediaApi.UploadTemporaryMedia(base._appId, UploadMediaFileType.image, fileName); Console.WriteLine("MediaId:" + result.media_id); //下载 var url = "https://sdk.weixin.senparc.com/images/v2/ewm_01.png"; #if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_1 var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\..\\"); #else var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\"); #endif var downloadResult = Senparc.CO2NET.HttpUtility.Get.Download(CommonDI.CommonSP, url, filePath); Console.WriteLine(downloadResult); Assert.IsTrue(File.Exists(downloadResult)); //完成之后通常需要强制修改文件名 #if NETSTANDARD2_0 || NETCOREAPP2_0 || NETCOREAPP2_1 || NETCOREAPP2_2 || NETCOREAPP3_1 File.Move(downloadResult, downloadResult + "core20.renamed.jpg"); #else File.Move(downloadResult, downloadResult + ".net45.renamed.jpg"); #endif }
public VideoMediaIdResult GetVideoMediaIdResultTest() { var videoFilePath = ServerUtility.ContentRootMapPath("video-test.mp4"); Console.WriteLine("Video Path:" + videoFilePath); //上传视频 var uploadResult = MediaApi.UploadTemporaryMedia(_appId, UploadMediaFileType.video, videoFilePath); Console.WriteLine("Video Upload Result:" + uploadResult); string mediaId = uploadResult.media_id;//也可以通过对公众号发送视频获得 var result = GroupMessageApi.GetVideoMediaIdResult(_appId, mediaId, "test", "test"); Assert.IsNotNull(result); Console.WriteLine("GetVideoMediaIdResult" + result.ToJson()); Assert.IsNotNull(result.media_id); Assert.IsTrue(result.media_id.Length > 0); return(result); }
public void DownloadToDirTest() { ////下载图片 //var file = string.Format("qr-{0}.jpg", DateTime.Now.Ticks); //using (FileStream fs = new FileStream(file, FileMode.OpenOrCreate)) //{ // Get.Download(url, fs);//下载 // fs.Flush();//直接保存,无需处理指针 //} var fileName = @"E:\Senparc项目\WeiXinMPSDK\src\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\qr.jpg"; //上传素材 var result = MediaApi.UploadTemporaryMedia(base._appId, UploadMediaFileType.image, fileName); Console.WriteLine("MediaId:" + result.media_id); //下载 var url = "http://sdk.weixin.senparc.com/images/v2/ewm_01.png"; var filePath = @"E:\Senparc项目\WeiXinMPSDK\src\Senparc.Weixin.MP\Senparc.Weixin.MP.Test\qr_" + DateTime.Now.ToString("HHmmss") + ".jpg"; var downloadResult = Senparc.Weixin.HttpUtility.Get.Download(url, filePath); Console.WriteLine(downloadResult); }
public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage) { var responseMessage = CreateResponseMessage <ResponseMessageMusic>(); //上传缩略图 var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image, Server.GetMapPath("~/Images/Logo.jpg")); //设置音乐信息 responseMessage.Music.Title = "天籁之音"; responseMessage.Music.Description = "播放您上传的语音"; responseMessage.Music.MusicUrl = "http://wx.wftx666.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.HQMusicUrl = "http://wx.wftx666.com/Media/GetVoice?mediaId=" + requestMessage.MediaId; responseMessage.Music.ThumbMediaId = uploadResult.media_id; //推送一条客服消息 try { CustomApi.SendText(appId, WeixinOpenId, "本次上传的音频MediaId:" + requestMessage.MediaId); } catch { } return(responseMessage); }
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { IResponseMessageBase reponseMessage = null; //菜单点击,需要跟创建菜单时的Key匹配 switch (requestMessage.EventKey) { case "OneClick": { //这个过程实际已经在OnTextOrEventRequest中完成,这里不会执行到。 var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了底部按钮。\r\n为了测试微信软件换行bug的应对措施,这里做了一个——\r\n换行"; } break; case "SubClickRoot_Text": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了子菜单按钮。"; } break; case "SubClickRoot_News": { var strongResponseMessage = CreateResponseMessage <ResponseMessageNews>(); reponseMessage = strongResponseMessage; strongResponseMessage.Articles.Add(new Article() { Title = "您点击了子菜单图文按钮", Description = "您点击了子菜单图文按钮,这是一条图文信息。", PicUrl = "http://www.w3ccloud.com/Images/qrcode.jpg", Url = "http://www.w3ccloud.com" }); } break; case "SubClickRoot_Music": { //上传缩略图 var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret); var uploadResult = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.thumb, Server.GetMapPath("~/Images/Logo.jpg")); //设置音乐信息 var strongResponseMessage = CreateResponseMessage <ResponseMessageMusic>(); reponseMessage = strongResponseMessage; strongResponseMessage.Music.Title = "天籁之音"; strongResponseMessage.Music.Description = "真的是天籁之音"; strongResponseMessage.Music.MusicUrl = "http://www.w3ccloud.com/Content/music1.mp3"; strongResponseMessage.Music.HQMusicUrl = "http://www.w3ccloud.com/Content/music1.mp3"; strongResponseMessage.Music.ThumbMediaId = uploadResult.thumb_media_id; } break; case "SubClickRoot_Image": { //上传图片 var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret); var uploadResult = MediaApi.UploadTemporaryMedia(accessToken, UploadMediaFileType.image, Server.GetMapPath("~/Images/Logo.jpg")); //设置图片信息 var strongResponseMessage = CreateResponseMessage <ResponseMessageImage>(); reponseMessage = strongResponseMessage; strongResponseMessage.Image.MediaId = uploadResult.media_id; } break; case "SubClickRoot_Agent": //代理消息 { //获取返回的XML DateTime dt1 = DateTime.Now; reponseMessage = MessageAgent.RequestResponseMessage(this, agentUrl, agentToken, RequestDocument.ToString()); //上面的方法也可以使用扩展方法:this.RequestResponseMessage(this,agentUrl, agentToken, RequestDocument.ToString()); DateTime dt2 = DateTime.Now; if (reponseMessage is ResponseMessageNews) { (reponseMessage as ResponseMessageNews) .Articles[0] .Description += string.Format("\r\n\r\n代理过程总耗时:{0}毫秒", (dt2 - dt1).Milliseconds); } } break; case "Member": //托管代理会员信息 { //原始方法为:MessageAgent.RequestXml(this,agentUrl, agentToken, RequestDocument.ToString());//获取返回的XML reponseMessage = this.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString()); } break; case "OAuth": //OAuth授权测试 { var strongResponseMessage = CreateResponseMessage <ResponseMessageNews>(); strongResponseMessage.Articles.Add(new Article() { Title = "OAuth2.0测试", Description = "点击【查看全文】进入授权页面。\r\n注意:此页面仅供测试(是专门的一个临时测试账号的授权,并非Senparc.Weixin.MP SDK官方账号,所以如果授权后出现错误页面数正常情况),测试号随时可能过期。请将此DEMO部署到您自己的服务器上,并使用自己的appid和secret。", Url = "http://www.w3ccloud.com/oauth2", PicUrl = "http://www.w3ccloud.com/Images/qrcode.jpg" }); reponseMessage = strongResponseMessage; } break; case "Description": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = GetWelcomeInfo(); reponseMessage = strongResponseMessage; } break; case "SubClickRoot_PicPhotoOrAlbum": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了【微信拍照】按钮。系统将会弹出拍照或者相册发图。"; } break; case "SubClickRoot_ScancodePush": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了【微信扫码】按钮。"; } break; default: { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您点击了按钮,EventKey:" + requestMessage.EventKey; reponseMessage = strongResponseMessage; } break; } return(reponseMessage); }
/// <summary> /// 点击事件 /// </summary> /// <param name="requestMessage">请求消息</param> /// <returns></returns> public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { IResponseMessageBase reponseMessage = null; //菜单点击,需要跟创建菜单时的Key匹配 switch (requestMessage.EventKey) { case "OneClick": { //这个过程实际已经在OnTextOrEventRequest中命中“OneClick”关键字,并完成回复,这里不会执行到。 var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了底部按钮。\r\n为了测试微信软件换行bug的应对措施,这里做了一个——\r\n换行"; } break; case "SubClickRoot_Text": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了子菜单按钮。"; } break; case "SubClickRoot_News": { var strongResponseMessage = CreateResponseMessage <ResponseMessageNews>(); reponseMessage = strongResponseMessage; strongResponseMessage.Articles.Add(new Article() { Title = "您点击了子菜单图文按钮", Description = "您点击了子菜单图文按钮,这是一条图文信息。这个区域是Description内容\r\n可以使用\\r\\n进行换行。", PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg", Url = "https://sdk.weixin.senparc.com" }); //随机添加一条图文,或只输出一条图文信息 if (SystemTime.Now.Second % 2 == 0) { strongResponseMessage.Articles.Add(new Article() { Title = "这是随机产生的第二条图文信息,用于测试多条图文的样式", Description = "这是随机产生的第二条图文信息,用于测试多条图文的样式", PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg", Url = "https://sdk.weixin.senparc.com" }); } } break; case "SubClickRoot_Music": { //上传缩略图 #if NET45 var filePath = "~/Images/Logo.thumb.jpg"; #else var filePath = "~/wwwroot/Images/Logo.thumb.jpg"; #endif var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.thumb, ServerUtility.ContentRootMapPath(filePath)); //PS:缩略图官方没有特别提示文件大小限制,实际测试哪怕114K也会返回文件过大的错误,因此尽量控制在小一点(当前图片39K) //设置音乐信息 var strongResponseMessage = CreateResponseMessage <ResponseMessageMusic>(); reponseMessage = strongResponseMessage; strongResponseMessage.Music.Title = "天籁之音"; strongResponseMessage.Music.Description = "真的是天籁之音"; strongResponseMessage.Music.MusicUrl = "https://sdk.weixin.senparc.com/Content/music1.mp3"; strongResponseMessage.Music.HQMusicUrl = "https://sdk.weixin.senparc.com/Content/music1.mp3"; strongResponseMessage.Music.ThumbMediaId = uploadResult.thumb_media_id; } break; case "SubClickRoot_Image": { //上传图片 var filePath = "~/Images/Logo.jpg"; var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image, ServerUtility.ContentRootMapPath(filePath)); //设置图片信息 var strongResponseMessage = CreateResponseMessage <ResponseMessageImage>(); reponseMessage = strongResponseMessage; strongResponseMessage.Image.MediaId = uploadResult.media_id; } break; case "SendMenu": //菜单消息 { //注意: //1、此接口可以在任意地方调用(包括后台线程),此处演示为通过 //2、一下"s:"前缀只是 Senparc.Weixin 的内部约定,可以使用 OnTextRequest事件中的 requestHandler.SelectMenuKeyword() 方法自动匹配到后缀(如101) var menuContentList = new List <SendMenuContent>() { new SendMenuContent("101", "满意"), new SendMenuContent("102", "一般"), new SendMenuContent("103", "不满意") }; //使用异步接口 CustomApi.SendMenuAsync(appId, OpenId, "请对 Senparc.Weixin SDK 给出您的评价", menuContentList, "感谢您的参与!"); reponseMessage = new ResponseMessageNoResponse(); //不返回任何消息 } break; case "SubClickRoot_Agent": //代理消息 { //获取返回的XML var dt1 = SystemTime.Now; reponseMessage = MessageAgent.RequestResponseMessage(this, agentUrl, agentToken, RequestDocument.ToString()); //上面的方法也可以使用扩展方法:this.RequestResponseMessage(this,agentUrl, agentToken, RequestDocument.ToString()); var dt2 = SystemTime.Now; if (reponseMessage is ResponseMessageNews) { (reponseMessage as ResponseMessageNews) .Articles[0] .Description += string.Format("\r\n\r\n代理过程总耗时:{0}毫秒", (dt2 - dt1).Milliseconds); } } break; case "Member": //托管代理会员信息 { //原始方法为:MessageAgent.RequestXml(this,agentUrl, agentToken, RequestDocument.ToString());//获取返回的XML reponseMessage = this.RequestResponseMessage(agentUrl, agentToken, RequestDocument.ToString()); } break; case "OAuth": //OAuth授权测试 { var strongResponseMessage = CreateResponseMessage <ResponseMessageNews>(); strongResponseMessage.Articles.Add(new Article() { Title = "OAuth2.0测试", Description = "选择下面两种不同的方式进行测试,区别在于授权成功后,最后停留的页面。", //Url = "https://sdk.weixin.senparc.com/oauth2", //PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" }); strongResponseMessage.Articles.Add(new Article() { Title = "OAuth2.0测试(不带returnUrl),测试环境可使用", Description = "OAuth2.0测试(不带returnUrl)", Url = "https://sdk.weixin.senparc.com/oauth2", PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" }); var returnUrl = "/OAuth2/TestReturnUrl"; strongResponseMessage.Articles.Add(new Article() { Title = "OAuth2.0测试(带returnUrl),生产环境强烈推荐使用", Description = "OAuth2.0测试(带returnUrl)", Url = "https://sdk.weixin.senparc.com/oauth2?returnUrl=" + returnUrl.UrlEncode(), PicUrl = "https://sdk.weixin.senparc.com/Images/qrcode.jpg" }); reponseMessage = strongResponseMessage; } break; case "Description": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = GetWelcomeInfo(); reponseMessage = strongResponseMessage; } break; case "SubClickRoot_PicPhotoOrAlbum": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了【微信拍照】按钮。系统将会弹出拍照或者相册发图。"; } break; case "SubClickRoot_ScancodePush": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了【微信扫码】按钮。"; } break; case "ConditionalMenu_Male": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:男。"; } break; case "ConditionalMenu_Femle": { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); reponseMessage = strongResponseMessage; strongResponseMessage.Content = "您点击了个性化菜单按钮,您的微信性别设置为:女。"; } break; case "GetNewMediaId": //获取新的MediaId { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); try { var result = MediaApi.UploadForeverMedia(appId, ServerUtility.ContentRootMapPath("~/Images/logo.jpg")); strongResponseMessage.Content = result.media_id; } catch (Exception e) { strongResponseMessage.Content = "发生错误:" + e.Message; WeixinTrace.SendCustomLog("调用UploadForeverMedia()接口发生异常", e.Message); } } break; default: { var strongResponseMessage = CreateResponseMessage <ResponseMessageText>(); strongResponseMessage.Content = "您点击了按钮,EventKey:" + requestMessage.EventKey; reponseMessage = strongResponseMessage; } break; } return(reponseMessage); }
public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage) { IResponseMessageBase base2 = null; switch (requestMessage.EventKey) { case "lobby": return(this.GetUrlResponse(requestMessage.FromUserName)); case "OneClick": { ResponseMessageText text = base.CreateResponseMessage <ResponseMessageText>(); base2 = text; text.Content = "您点击了底部按钮。\r\n为了测试微信软件换行bug的应对措施,这里做了一个——\r\n换行"; return(base2); } case "SubClickRoot_Text": { ResponseMessageText text2 = base.CreateResponseMessage <ResponseMessageText>(); base2 = text2; text2.Content = "您点击了子菜单按钮。"; return(base2); } case "SubClickRoot_News": { ResponseMessageNews news = base.CreateResponseMessage <ResponseMessageNews>(); base2 = news; Article item = new Article { Title = "您点击了子菜单图文按钮", Description = "您点击了子菜单图文按钮,这是一条图文信息。", PicUrl = "http://sdk.weixin.senparc.com/Images/qrcode.jpg", Url = "http://sdk.weixin.senparc.com" }; news.Articles.Add(item); return(base2); } case "SubClickRoot_Music": { UploadTemporaryMediaResult result = MediaApi.UploadTemporaryMedia(AccessTokenContainer.TryGetAccessToken(this.appId, this.appSecret, false), UploadMediaFileType.thumb, Server.GetMapPath("~/Images/Logo.jpg"), 0x2710); ResponseMessageMusic music = base.CreateResponseMessage <ResponseMessageMusic>(); base2 = music; music.Music.Title = "天籁之音"; music.Music.Description = "真的是天籁之音"; music.Music.MusicUrl = "http://sdk.weixin.senparc.com/Content/music1.mp3"; music.Music.HQMusicUrl = "http://sdk.weixin.senparc.com/Content/music1.mp3"; music.Music.ThumbMediaId = result.thumb_media_id; return(base2); } case "SubClickRoot_Image": { UploadTemporaryMediaResult result2 = MediaApi.UploadTemporaryMedia(AccessTokenContainer.TryGetAccessToken(this.appId, this.appSecret, false), UploadMediaFileType.image, Server.GetMapPath("~/Images/Logo.jpg"), 0x2710); ResponseMessageImage image = base.CreateResponseMessage <ResponseMessageImage>(); base2 = image; image.Image.MediaId = result2.media_id; return(base2); } case "OAuth": { ResponseMessageNews news2 = base.CreateResponseMessage <ResponseMessageNews>(); Article article2 = new Article { Title = "OAuth2.0测试", Description = "选择下面两种不同的方式进行测试,区别在于授权成功后,最后停留的页面。" }; news2.Articles.Add(article2); Article article3 = new Article { Title = "OAuth2.0测试(不带returnUrl),测试环境可使用", Description = "OAuth2.0测试(不带returnUrl)", Url = "http://sdk.weixin.senparc.com/oauth2", PicUrl = "http://sdk.weixin.senparc.com/Images/qrcode.jpg" }; news2.Articles.Add(article3); string url = "/OAuth2/TestReturnUrl"; Article article4 = new Article { Title = "OAuth2.0测试(带returnUrl),生产环境强烈推荐使用", Description = "OAuth2.0测试(带returnUrl)", Url = "http://sdk.weixin.senparc.com/oauth2?returnUrl=" + url.UrlEncode(), PicUrl = "http://sdk.weixin.senparc.com/Images/qrcode.jpg" }; news2.Articles.Add(article4); return(news2); } case "Description": { ResponseMessageText text3 = base.CreateResponseMessage <ResponseMessageText>(); text3.Content = this.GetWelcomeInfo(); return(text3); } case "SubClickRoot_PicPhotoOrAlbum": { ResponseMessageText text4 = base.CreateResponseMessage <ResponseMessageText>(); base2 = text4; text4.Content = "您点击了【微信拍照】按钮。系统将会弹出拍照或者相册发图。"; return(base2); } case "SubClickRoot_ScancodePush": { ResponseMessageText text5 = base.CreateResponseMessage <ResponseMessageText>(); base2 = text5; text5.Content = "您点击了【微信扫码】按钮。"; return(base2); } case "ConditionalMenu_Male": { ResponseMessageText text6 = base.CreateResponseMessage <ResponseMessageText>(); base2 = text6; text6.Content = "您点击了个性化菜单按钮,您的微信性别设置为:男。"; return(base2); } case "ConditionalMenu_Femle": { ResponseMessageText text7 = base.CreateResponseMessage <ResponseMessageText>(); base2 = text7; text7.Content = "您点击了个性化菜单按钮,您的微信性别设置为:女。"; return(base2); } } ResponseMessageText text8 = base.CreateResponseMessage <ResponseMessageText>(); text8.Content = "您点击了按钮,EventKey:" + requestMessage.EventKey; return(text8); }
/// <summary> /// 处理文字请求 /// </summary> /// <returns></returns> public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage) { //TODO:这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs //这里可以进行数据库记录或处理 //发送一条客服消息回复用户 var contentUpper = requestMessage.Content.ToUpper(); if (contentUpper == "LINK") { //发送客服消息 Senparc.Weixin.WxOpen.AdvancedAPIs.CustomApi.SendLink(appId, OpenId, "欢迎使用 Senparc.Weixin SDK", "感谢大家的支持!\r\n\r\n盛派永远在你身边!", "https://weixin.senparc.com", "https://sdk.weixin.senparc.com/images/book-cover-front-small-3d-transparent.png"); } else if (contentUpper == "CARD") { //上传封面临时素材 var uploadResult = MediaApi.UploadTemporaryMedia(appId, UploadMediaFileType.image, ServerUtility.ContentRootMapPath("~/Images/Logo.thumb.jpg")); //发送客服消息 Senparc.Weixin.WxOpen.AdvancedAPIs.CustomApi.SendMiniProgramPage(appId, OpenId, "欢迎使用 Senparc.Weixin SDK", "pages/websocket/websocket", uploadResult.media_id); } else if (contentUpper == "客服") { Senparc.Weixin.WxOpen.AdvancedAPIs.CustomApi.SendText(appId, OpenId, "您即将进入客服"); var responseMessage = base.CreateResponseMessage <ResponseMessageTransfer_Customer_Service>(); return(responseMessage); } else { var result = new StringBuilder(); result.AppendFormat("您刚才发送了文字信息:{0}\r\n\r\n", requestMessage.Content); if (CurrentMessageContext.RequestMessages.Count > 1) { result.AppendFormat("您刚才还发送了如下消息({0}/{1}):\r\n", CurrentMessageContext.RequestMessages.Count, CurrentMessageContext.StorageData); for (int i = CurrentMessageContext.RequestMessages.Count - 2; i >= 0; i--) { var historyMessage = CurrentMessageContext.RequestMessages[i]; string content = null; if (historyMessage is RequestMessageText) { content = (historyMessage as RequestMessageText).Content; } else if (historyMessage is RequestMessageEvent_UserEnterTempSession) { content = "[进入客服]"; } else { content = string.Format("[非文字信息:{0}]", historyMessage.GetType().Name); } result.AppendFormat("{0} 【{1}】{2}\r\n", historyMessage.CreateTime.ToString("HH:mm:ss"), historyMessage.MsgType.ToString(), content ); } result.AppendLine("\r\n"); } //处理微信换行符识别问题 var msg = result.ToString().Replace("\r\n", "\n"); //发送客服消息 Senparc.Weixin.WxOpen.AdvancedAPIs.CustomApi.SendText(appId, OpenId, msg); //也可以使用微信公众号的接口,完美兼容: //Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendText(appId, WeixinOpenId, msg); } return(new SuccessResponseMessage()); //和公众号一样回复XML是无效的: // return new SuccessResponseMessage() // { // ReturnText = string.Format(@"<?xml version=""1.0"" encoding=""utf-8""?> //<xml> // <ToUserName><![CDATA[{0}]]></ToUserName> // <FromUserName><![CDATA[{1}]]></FromUserName> // <CreateTime>1357986928</CreateTime> // <MsgType><![CDATA[text]]></MsgType> // <Content><![CDATA[TNT2]]></Content> //</xml>",requestMessage.FromUserName,requestMessage.ToUserName) // }; }
/// <summary> /// 检查用户登录 /// </summary> private void CheckLogin() { var entities = FormulaHelper.GetEntities <CommonEntities>(); while (true) { try { #region 发送登录二维码给粉丝 foreach (var item in fansQueue.Where(c => c.State == 0)) { try { #region 获取图片并保存到本地 CookieContainer cc = item.Cookies; string sessionid = item.SessionID; var img = WxService.GetQRCode(ref cc, ref sessionid); item.Cookies = cc; item.SessionID = sessionid; string filename = string.Format("{0}.jpg", DateTime.Now.ToString("yyyMMddHHmmss")); img.Save(string.Format("{0}{1}", QrPhysicsPath, filename), ImageFormat.Jpeg); #endregion #region 到微信临时素材库 UploadTemporaryMediaResult wximgresult = null; try { wximgresult = MediaApi.UploadTemporaryMedia(accesstoken, UploadMediaFileType.image, string.Format("{0}{1}", QrPhysicsPath, filename)); } catch (Exception ex) { LogWriter.Error(ex, string.Format("openid为{0}的登录图片第一次上传失败", item.OpenID)); UpdateAccessToken(); try { wximgresult = MediaApi.UploadTemporaryMedia(accesstoken, UploadMediaFileType.image, string.Format("{0}{1}", QrPhysicsPath, filename)); } catch (Exception ex2) { LogWriter.Error(ex2, string.Format("openid为{0}的登录图片第二次上传失败", item.OpenID)); UpdateNewAccessToken(); try { wximgresult = MediaApi.UploadTemporaryMedia(accesstoken, UploadMediaFileType.image, string.Format("{0}{1}", QrPhysicsPath, filename)); } catch (Exception ex3) { LogWriter.Error(ex3, string.Format("openid为{0}的登录图片第三次上传失败", item.OpenID)); item.WxErrorCount++; continue; } } } #endregion #region 发送消息给用户 if (!string.IsNullOrEmpty(wximgresult.media_id)) { try { SendWxImg(item.OpenID, wximgresult.media_id); SendWxMsg(item.OpenID, LoginMessage); } catch { item.WxErrorCount++; throw; } } #endregion #region 更新用户状态 item.State = 1; item.SendQRTime = DateTime.Now; var ety = entities.Set <FansLogin>().Find(item.LoginID); if (ety != null) { ety.SessionID = sessionid; ety.IsSendQR = true; ety.SendQRTime = DateTime.Now; entities.SaveChanges(); } #endregion } catch (Exception ex) { LogWriter.Error(ex); } } #endregion #region 检查超时登录登录状态 foreach (var item in fansQueue.Where(c => (c.State == 1 || c.State == 2) && c.SendQRTime.AddMinutes(5) <= DateTime.Now)) { FinishFans(item, LoginOutTimeMessage); } lock (queuelock) { var count = fansQueue.RemoveAll(c => c.State == 5); while (fansQueue.Count < CheckFriendsMax && waitFansQueue.Any()) { var item = waitFansQueue.Peek(); fansQueue.Add(new FansData() { LoginID = item.LoginID, OpenID = item.OpenID, ApplyTime = item.ApplyTime, State = 0, Cookies = new CookieContainer(), }); LogWriter.Info(string.Format("waitadd {0}", JsonConvert.SerializeObject(new { LoginID = item.LoginID, OpenID = item.OpenID, ApplyTime = item.ApplyTime, State = 0, }))); waitFansQueue.Dequeue(); } } #endregion #region 检查登录状态 foreach (var item in fansQueue.Where(c => c.State == 1 || c.State == 2)) { CookieContainer cc = item.Cookies; string passticket = item.PassTicket; string skey = item.SKey; var login_result = WxService.LoginCheck(ref cc, item.SessionID); if (login_result is Image) { item.State = 2; } else if (login_result is string) { WxService.GetSidUid(ref cc, login_result as string, ref passticket, ref skey); item.State = 3; item.LoginTime = DateTime.Now; #region 更新用户状态 var ety = entities.Set <FansLogin>().Find(item.LoginID); if (ety != null) { ety.PassTicket = passticket; ety.Skey = skey; ety.IsLogin = true; ety.LoginTime = DateTime.Now; entities.SaveChanges(); } #endregion } item.Cookies = cc; item.PassTicket = passticket; item.SKey = skey; } foreach (var item in fansQueue.Where(c => new int[] { 1, 2, 3 }.Contains(c.State) && c.WxErrorCount > InterfaceMaxError)) { FinishFans(item, ""); } #endregion } catch (Exception ex) { LogWriter.Error(ex); } finally { Thread.Sleep(CheckLoginTime); } } }