/// <summary> /// GET方式请求URL,并返回T类型 /// </summary> /// <typeparam name="T">接收JSON的数据类型</typeparam> /// <param name="sm"></param> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="maxJsonLength">允许最大JSON长度</param> /// <returns></returns> public T GetJson <T>(Stream sm, string url, Encoding encoding = null, int?maxJsonLength = null) { using (WebClient client = new WebClient()) { client.Encoding = Encoding.UTF8; string returnText = client.DownloadString(url); JavaScriptSerializer js = new JavaScriptSerializer(); if (maxJsonLength.HasValue) { js.MaxJsonLength = maxJsonLength.Value; } if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { var str = string.Format("\r\n微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg, null, errorResult, url); //发生错误 byte[] aa = Encoding.Default.GetBytes(str); sm.Write(aa, 0, aa.Length); } } T result = js.Deserialize <T>(returnText); return(result); } }
/// <summary> /// 动态点赞通知 /// </summary> /// <param name="userId">接收者(用户)的 userId</param> /// <param name="date">点赞时间,4小时制时间格式(支持+年月日) 例如:15:01,或:2019年10月1日 15:01</param> /// <param name="page"></param> public static CommonResult SendGoodNotice(string userId, string date, string page) { CommonResult result = new CommonResult(); User user = new UserApp().GetUserById(userId); if (user != null && !string.IsNullOrEmpty(date)) { MessageTemplates template = messageTemplatesService.GetByMessageType("RemarkNotice"); if (!string.IsNullOrEmpty(template.WxAppletSubscribeTemplateId) && template.UseInWxApplet) { MemberSubscribeMsg memberSubscribeMsg = memberSubscribeMsgService.GetByMessageTemplateIdAndUser(template.Id, userId, "WxApplet"); if (memberSubscribeMsg.SubscribeStatus == "accept") { UserOpenIds userOpenIds = new UserApp().GetUserOpenIdById(userId, "yuebon.openid.wxapplet"); if (userOpenIds != null) { WxJsonResult wxJsonResult = WxAppletSubscribeMessage.SendGoodNotice(userOpenIds.OpenId, template.WxAppletTemplateId, user.NickName, date, page); result.ErrCode = wxJsonResult.errcode.ToString(); result.ErrMsg = wxJsonResult.errmsg; } } } else { result.Success = true; result.ErrCode = "用户拒绝或未订阅"; } } return(result); }
private async Task <WxJsonResult> UpdateFileToWx(MpMediaArticleDto article, int mpid, string mediaID) { if (article == null) { return new WxJsonResult { errcode = Senparc.Weixin.ReturnCode.POST的数据包为空, errmsg = "实体对象不存在", P2PData = null } } ; var account = _accountRepository.FirstOrDefault(m => m.Id == mpid); //var access_token = Senparc.Weixin.MP.Containers.AccessTokenContainer.TryGetAccessToken(account.AppId, account.AppSecret); var access_token = _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret).Result; var news = new NewsModel() { title = article.Title, author = article.Author, digest = article.Description, content = article.WxContent, content_source_url = article.AUrl, show_cover_pic = article.ShowPic, thumb_media_id = article.PicMediaID, need_open_comment = article.EnableComment, only_fans_can_comment = article.OnlyFansComment }; WxJsonResult result = null; return(result = await MediaApi.UpdateForeverNewsAsync(access_token, mediaID, 0, news, Senparc.Weixin.Config.TIME_OUT)); }
public override JsonResult Delete(string sIds) { if (!string.IsNullOrEmpty(sIds)) { try { string[] arrID = sIds.Split(','); foreach (string strID in arrID) { if (string.IsNullOrEmpty(strID)) { continue; } MailListApi.DeleteDepartment(GetToken(), strID); } } catch (ErrorJsonResultException ex) { WxJsonResult jsResult = ex.JsonResult; string errorMsg = ((ReturnCode_QY)jsResult.errcode).ToString(); return(ErrorNotification(errorMsg)); } } else { //_BaseService.Delete(objModal); } _cacheManager.Remove("DepartmentList"); return(Json(doJson(null), JsonRequestBehavior.AllowGet)); }
/// <summary> /// 异步GetJsonA /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="maxJsonLength">允许最大JSON长度</param> /// <typeparam name="T"></typeparam> /// <returns></returns> /// <exception cref="ErrorJsonResultException"></exception> public static async Task <T> GetJsonAsync <T>(string url, Encoding encoding = null, int?maxJsonLength = null) { string returnText = await GetAsync(url, encoding); JavaScriptSerializer js = new JavaScriptSerializer(); if (maxJsonLength.HasValue) { js.MaxJsonLength = maxJsonLength.Value; } if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new Exception(string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg)); } } T result = js.Deserialize <T>(returnText); return(result); }
public IActionResult ImgSecCheck(string filePath) { CommonResult result = new CommonResult(); try { var fileDic = new Dictionary <string, string>(); WxJsonResult res = WxAppApi.ImgSecCheck(WxOpenAppId, filePath); if (res.errcode == ReturnCode.请求成功) { result.ErrCode = ErrCode.successCode; result.Success = true; result.ResData = res; } else { result.ErrCode = ErrCode.failCode; result.ErrMsg = "图片含有违法违规内容,请更换图片"; result.ResData = res; } } catch (Exception ex) { Log4NetHelper.Error("代码生成异常", ex); result.ErrMsg = "代码生成异常:" + ex.Message; result.ErrCode = ErrCode.failCode; } return(ToJsonContent(result)); }
public JsonResult PostDept(DepartmentList objModal, int?Id) { //验证错误 if (!BeforeAddOrUpdate(objModal, Id)) { return(Json(GetErrorJson(), JsonRequestBehavior.AllowGet)); } //objModal.id = int.Parse(Request["deptid"]); try { if (Id.HasValue && Id.Value > 0) { MailListApi.UpdateDepartment(GetToken(), objModal); } else { MailListApi.CreateDepartment(GetToken(), objModal); } } catch (ErrorJsonResultException ex) { WxJsonResult jsResult = ex.JsonResult; string errorMsg = ((ReturnCode_QY)jsResult.errcode).ToString(); return(ErrorNotification(errorMsg)); } _cacheManager.Remove("DepartmentList"); return(Json(doJson(null), JsonRequestBehavior.AllowGet)); }
/// <summary> /// GET方式请求URL,并返回T类型 /// </summary> /// <typeparam name="T">接收JSON的数据类型</typeparam> /// <param name="url"></param> /// <param name="encoding"></param> /// <returns></returns> public static T GetJson <T>(string url, Encoding encoding = null) { // Log4NetLog.Logger.DebugFormat("GetJson:{0}", url); string returnText = RequestUtility.HttpGet(url, encoding); Log4NetLog.Logger.DebugFormat("GetJson url:{0} Result:{1}", url, returnText); // WeixinTrace.SendLog(url, returnText); JavaScriptSerializer js = new JavaScriptSerializer(); if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { Log4NetLog.Logger.ErrorFormat("{2}\r\n微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg, url); //发生错误 throw new ErrorJsonResultException( string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult, url); } } T result = js.Deserialize <T>(returnText); return(result); }
/// <summary> /// 异步GetJsonA /// </summary> /// <param name="url"></param> /// <param name="encoding"></param> /// <typeparam name="T"></typeparam> /// <returns></returns> /// <exception cref="ErrorJsonResultException"></exception> public static async Task <T> GetJsonAsync <T>(string url, Encoding encoding = null) { string returnText = await RequestUtility.HttpGetAsync(url, encoding); Log4NetLog.Logger.DebugFormat("GetJson url:{0} Result:{1}", url, returnText); JavaScriptSerializer js = new JavaScriptSerializer(); if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult, url); } } T result = js.Deserialize <T>(returnText); return(result); }
/// <summary> /// 删除素材 /// </summary> /// <param name="mediaid"></param> /// <returns></returns> public JsonResult DeleteMedia(string mediaid) { if (string.IsNullOrWhiteSpace(this._iSiteSettingService.GetSiteSettings().WeixinAppId)) { throw new HimallException("未配置微信公众号"); } if (string.IsNullOrEmpty(mediaid)) { throw new HimallException("素材ID不能为空"); } WxJsonResult wxJsonResult = this._iWXMsgTemplateService.DeleteMedia(mediaid, this.CurrentSiteSetting.WeixinAppId, this.CurrentSiteSetting.WeixinAppSecret); if (string.IsNullOrEmpty(wxJsonResult.errmsg)) { return(this.Json((object)new { success = false, msg = wxJsonResult.errmsg })); } return(this.Json((object)new { success = true })); }
/// <summary> /// 获取API返回结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="returnText"></param> /// <returns></returns> public static T GetResult <T>(string returnText) { //JavaScriptSerializer js = new JavaScriptSerializer(); if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = JsonConvert.DeserializeObject <WxJsonResult>(returnText); //WxJsonResult errorResult = js.Deserialize<WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信Post请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult); //LogHelper.PayWeiXinLogInfos(string.Format("微信Post请求发生错误!错误代码:{0},说明:{1}", // (int)errorResult.errcode, // errorResult.errmsg)); } } T result = JsonConvert.DeserializeObject <T>(returnText); return(result); }
public void EditStock(int num, string cardid) { WXCardLogInfo wXCardLogInfo = context.WXCardLogInfo.FirstOrDefault((WXCardLogInfo d) => d.CardId == cardid); if (wXCardLogInfo != null) { string accessToken = GetAccessToken(wXCardLogInfo.AppId, wXCardLogInfo.AppSecret); if (!string.IsNullOrWhiteSpace(accessToken)) { CardDetailGetResultJson cardDetailGetResultJson = CardApi.CardDetailGet(accessToken, wXCardLogInfo.CardId, 10000); if (cardDetailGetResultJson != null) { int num1 = num - cardDetailGetResultJson.card.general_coupon.base_info.sku.quantity; if (num1 != 0) { WxJsonResult wxJsonResult = CardApi.ModifyStock(accessToken, wXCardLogInfo.CardId, (num1 > 0 ? num1 : 0), (num1 < 0 ? Math.Abs(num1) : 0), 10000); if (wxJsonResult.errcode != ReturnCode.请求成功) { int num2 = (int)wxJsonResult.errcode; Log.Error("微信同步修改卡券库存失败", new Exception(num2.ToString())); } } } } } }
/// <summary> /// 向需要AccessToken的API发送消息的公共方法 /// </summary> /// <param name="accessToken">这里的AccessToken是通用接口的AccessToken,非OAuth的。如果不需要,可以为null,此时urlFormat不要提供{0}参数</param> /// <param name="urlFormat"></param> /// <param name="data">如果是Get方式,可以为null</param> /// <param name="sendType"></param> /// <param name="timeOut">代理请求超时时间(毫秒)</param> /// <param name="checkValidationResult"></param> /// <param name="jsonSetting"></param> /// <returns></returns> //[Obsolete("此方法已过期,请使用Senparc.Weixin.CommonAPIs.CommonJsonSend.Send()方法")] public static WxJsonResult Send(string accessToken, string urlFormat, object data, CommonJsonSendType sendType = CommonJsonSendType.POST, int timeOut = Config.TIME_OUT, bool checkValidationResult = false, JsonSetting jsonSetting = null/*, int retry40001ErrorTimes = 0*/) { WxJsonResult result = null; try { result = Senparc.Weixin.CommonAPIs.CommonJsonSend.Send(accessToken, urlFormat, data, sendType, timeOut, checkValidationResult, jsonSetting); } //catch (ErrorJsonResultException ex) //{ // if (ex.JsonResult.errcode == ReturnCode.获取access_token时AppSecret错误或者access_token无效 /*40001*/) // { // if (retry40001ErrorTimes == 0) // { // result = Send(accessToken, urlFormat, data, sendType, timeOut, checkValidationResult, // jsonSetting, retry40001ErrorTimes + 1); // } // else if (retry40001ErrorTimes == 1) // { // } // } //} catch { throw; } return result; }
/// <summary> /// GET方式请求URL,并返回T类型 /// </summary> /// <typeparam name="T">接收JSON的数据类型</typeparam> /// <param name="url"></param> /// <param name="encoding"></param> /// <param name="maxJsonLength">允许最大JSON长度</param> /// <returns></returns> public static T GetJson <T>(string url, Encoding encoding = null, int?maxJsonLength = null) { string returnText = RequestUtility.HttpGet(url, encoding); WeixinTrace.SendLog(url, returnText); JavaScriptSerializer js = new JavaScriptSerializer(); if (maxJsonLength.HasValue) { js.MaxJsonLength = maxJsonLength.Value; } if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult, url); } } T result = js.Deserialize <T>(returnText); return(result); }
public static T GetJson <T>(string url, Encoding encoding = null) { string returnText = HttpUtility.RequestUtility.HttpGet(url, encoding); JavaScriptSerializer js = new JavaScriptSerializer(); if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult); } } T result = js.Deserialize <T>(returnText); return(result); }
public ActionResult CreateMenuFromJson(string token, string fullJson) { //TODO:根据"conditionalmenu"判断自定义菜单 var apiName = "使用JSON更新"; try { GetMenuResultFull resultFull = Newtonsoft.Json.JsonConvert.DeserializeObject <GetMenuResultFull>(fullJson); //重新整理按钮信息 WxJsonResult result = null; IButtonGroupBase buttonGroup = null; buttonGroup = CommonAPIs.CommonApi.GetMenuFromJsonResult(resultFull, new ButtonGroup()).menu; result = CommonAPIs.CommonApi.CreateMenu(token, buttonGroup); var json = new { Success = result.errmsg == "ok", Message = "菜单更新成功。" + apiName }; return(Json(json)); } catch (Exception ex) { var json = new { Success = false, Message = string.Format("更新失败:{0}。{1}", ex.Message, apiName) }; return(Json(json)); } }
public async Task <APIResultDto> CreateMenu(GetMenuResultFull fullJson) { try { //GetMenuResultFull resultFull = Newtonsoft.Json.JsonConvert.DeserializeObject<GetMenuResultFull>(fullJson); //重新整理按钮信息 WxJsonResult result = null; IButtonGroupBase buttonGroup = null; buttonGroup = CommonApi.GetMenuFromJsonResult(fullJson, new ButtonGroup()).menu; var accessToken = await AccessTokenContainer.TryGetAccessTokenAsync(AppId, AppSecret); result = CommonApi.CreateMenu(accessToken, buttonGroup); return(new APIResultDto() { Code = 0, Msg = "上传菜单成功", Data = result }); } catch (Exception ex) { return(new APIResultDto() { Code = 901, Msg = "更新菜单失败", Data = ex.Message }); } }
public void AsyncSendTemplateMessageTestForBookOptmize() { WxJsonResult finalResult = null; Task.Factory.StartNew(async() => { var openId = "olPjZjsXuQPJoV0HlruZkNzKc91E";//消息目标用户的OpenId //实际生产环境中,用户信息应该从数据库或缓存中读取 var userInfo = await UserApi.InfoAsync(_appId, openId); var data = new TemplateMessage_PaySuccessNotice( "您的订单已经支付", userInfo.nickname, "1234567890", 88.ToString("c"), "模板消息测试商品", "更详细信息,请到Senparc.Weixin SDK官方网站(http://zs.sasu.edu.cn)查看!\r\n这条消息使用的是优化过的方法,且不带Url参数。使用异步方法。"); var result = await TemplateApi.SendTemplateMessageAsync(_appId, openId, data); //调用客服接口显示msgId finalResult = await CustomApi.SendTextAsync(_appId, openId, "上一条模板消息的MsgID:" + result.msgid); Assert.AreEqual(ReturnCode.请求成功, result.errcode); }); while (finalResult == null) { } }
/// <summary> /// 发送消息 /// </summary> /// <param name="OpenId">OpenId</param> /// <param name="content">发送的内容</param> /// <param name="token">不填则自动获取</param> /// <returns></returns> public bool SendMessage(string OpenId, string content, string token = "") { if (string.IsNullOrEmpty(token)) { token = GetAccessToken(); } if (!string.IsNullOrEmpty(token)) { try { WxJsonResult errorResult = Custom.SendText(token, OpenId, content); if (errorResult.errcode != ReturnCode.请求成功) { return(false); } } catch (Exception e) { Log4NetImpl.Write("SendMessage:失败" + e.Message); return(false); } return(true); } return(false); }
/// <summary> /// 获取Post结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="returnText"></param> /// <returns></returns> public static T GetResult <T>(string returnText) { #if NET35 || NET40 || NET45 JavaScriptSerializer js = new JavaScriptSerializer(); #endif if (returnText.Contains("errcode")) { //可能发生错误 #if NET35 || NET40 || NET45 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); #else WxJsonResult errorResult = Newtonsoft.Json.JsonConvert.DeserializeObject <WxJsonResult>(returnText); #endif if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信Post请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult); } } #if NET35 || NET40 || NET45 T result = js.Deserialize <T>(returnText); #else T result = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(returnText); #endif //TODO:加入特殊情况下的回调处理 return(result); }
public void GetJsonTest() { return; //已经通过,但需要连接远程测试,太耗时,常规测试时暂时忽略。 TODO:迁移到 CO2NET { var url = "http://apistore.baidu.com/microservice/cityinfo?cityname=苏州"; var result = Senparc.CO2NET.HttpUtility.Get.GetJson <dynamic>(url); Assert.IsNotNull(result); Assert.AreEqual(0, result["errNum"]); Assert.AreEqual("苏州", result["retData"]["cityName"]); Console.WriteLine(result.GetType()); } { var url = Config.ApiMpHost + "/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; try { //这里因为参数错误,系统会返回错误信息 WxJsonResult resultFail = Senparc.CO2NET.HttpUtility.Get.GetJson <WxJsonResult>(url); Assert.Fail(); //上一步就应该已经抛出异常 } catch (ErrorJsonResultException ex) { //实际返回的信息(错误信息) Assert.AreEqual(ex.JsonResult.errcode, ReturnCode.合法的APPID); } } }
/// <summary> /// 获取Post结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="returnText"></param> /// <returns></returns> public static T GetResult <T>(string returnText) { JavaScriptSerializer js = new JavaScriptSerializer(); if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = js.Deserialize <WxJsonResult>(returnText); if (errorResult.errcode != ReturnCode.请求成功) { //发生错误 throw new ErrorJsonResultException( string.Format("微信Post请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult); } } T result = js.Deserialize <T>(returnText); //TODO:加入特殊情况下的回调处理 return(result); }
private bool DoEdit( ) { bool result = false; int id = MyCommFun.Str2Int(hidId.Value); string name = txtTitle.Text.Trim(); Model.wx_userweixin weixin = GetWeiXinCode(); WeiXinCRMComm wcr = new WeiXinCRMComm(); string err = ""; string accessToken = wcr.getAccessToken(weixin.id, out err); if (err.Trim() != "") { JscriptMsg(err, "", "Error"); return(false); } WxJsonResult wjr = Groups.Update(accessToken, id, name); if (wjr.errmsg == "ok") { result = true; } if (result) { BLL.wx_crm_group gBll = new BLL.wx_crm_group(); Model.wx_crm_group group = gBll.GetModel(id); group.name = name; gBll.Update(group); } return(result); }
public virtual async Task UploadKfHeading(int mpid, string fileUrl, string kfAccount) { var account = await _mpAccountAppService.Get(new Abp.Application.Services.Dto.EntityDto <int> { Id = mpid }); var access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret); WxJsonResult responseModel = null; var fileName = fileUrl.Substring(fileUrl.LastIndexOf("/") + 1); try { Logger.Info($"客服头像文件名称{fileName}"); responseModel = JsonConvert.DeserializeObject <WxJsonResult>(await HttpHelper.HttpPost($"https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token={access_token}&kf_account={kfAccount}", fileUrl, fileName)); } catch { access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret, true); try { responseModel = JsonConvert.DeserializeObject <WxJsonResult>(await HttpHelper.HttpPost($"https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token={access_token}&kf_account={kfAccount}", fileUrl, fileName)); } catch (Exception e) { throw new UserFriendlyException(e.Message); } } }
private bool DoAdd() { bool result = false; string name = txtTitle.Text.Trim(); Model.wx_userweixin weixin = GetWeiXinCode(); WeiXinCRMComm wcr = new WeiXinCRMComm(); string err = ""; string accessToken = wcr.getAccessToken(weixin.id, out err); if (err.Trim() != "") { JscriptMsg(err, "", "Error"); return(false); } WxJsonResult wjr = Groups.Create(accessToken, name); if (wjr.errcode.ToString() == "请求成功") { result = true; } if (result) { BLL.wx_crm_group gBll = new BLL.wx_crm_group(); Model.wx_crm_group group = new Model.wx_crm_group(); group.wid = weixin.id; group.id = ((Senparc.Weixin.MP.AdvancedAPIs.CreateGroupResult)(wjr)).group.id; group.name = name; group.count = 0; gBll.Add(group); } return(result); }
public void Unavailable(string cardid, string code) { WXCardCodeLogInfo nullable = context.WXCardCodeLogInfo.FirstOrDefault((WXCardCodeLogInfo d) => (d.CardId == cardid) && (d.Code == code)); if (nullable != null) { WXCardLogInfo wXCardLogInfo = context.WXCardLogInfo.FirstOrDefault((WXCardLogInfo d) => d.Id == nullable.CardLogId.Value); if (wXCardLogInfo != null) { string accessToken = GetAccessToken(wXCardLogInfo.AppId, wXCardLogInfo.AppSecret); if (!string.IsNullOrWhiteSpace(accessToken)) { WxJsonResult wxJsonResult = CardApi.CardUnavailable(accessToken, nullable.Code, nullable.CardId, 10000); if (wxJsonResult.errcode != ReturnCode.请求成功) { int num = (int)wxJsonResult.errcode; Log.Error("微信同步修改卡券库存失败", new Exception(string.Concat(num.ToString(), ":", wxJsonResult.errmsg))); } } } nullable.CodeStatus = -1; nullable.UsedTime = new DateTime?(DateTime.Now); context.SaveChanges(); } }
/// <summary> /// send image to openid /// </summary> /// <param name="openid"></param> /// <param name="fileByte"></param> /// <returns></returns> public static async Task <bool> SendMessageAsync(string openid, string message, int maxAttamptTime = 3) { try { WxJsonResult sendRst = null; for (int i = 0; i < maxAttamptTime; i++) { sendRst = await CustomApi.SendTextAsync(_appId, openid, message); if (sendRst != null && sendRst.errcode == 0) { break; } } if (sendRst == null || sendRst.errcode != 0) { StallApplication.SysError($"[MSG]failed sending to wechat {openid}:{sendRst.errcode},{sendRst.errmsg}"); return(false); } return(true); } catch (Exception ex) { StallApplication.SysError($"[MSG]failed sending to wechat {openid}:", ex); return(false); } }
/// <summary> /// 获取Post结果 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="returnText"></param> /// <returns></returns> public static T GetResult <T>(string returnText) { if (returnText.Contains("errcode")) { //可能发生错误 WxJsonResult errorResult = SerializerHelper.GetObject <WxJsonResult>(returnText); ErrorJsonResultException ex = null; if (errorResult.errcode != ReturnCode.请求成功) { //发生错误,记录异常 ex = new ErrorJsonResultException( string.Format("微信Post请求发生错误!错误代码:{0},说明:{1}", (int)errorResult.errcode, errorResult.errmsg), null, errorResult); } if (Config.ThrownWhenJsonResultFaild && ex != null) { throw ex;//抛出异常 } } T result = SerializerHelper.GetObject <T>(returnText); //TODO:加入特殊情况下的回调处理 return(result); }
public void SubmitForm(string menuData) { string appId = WxOperatorProvider.Provider.GetCurrent().AppId; var specification = new Specification <WxMenu>(obj => obj.AppId == appId); WxMenu wxMenu = wxMenuRepository.Find(specification); if (wxMenu == null) { wxMenu = new WxMenu(); wxMenu.Id = IdWorkerHelper.GenId64(); wxMenu.AppId = appId; wxMenu.MenuData = menuData; wxMenu.CreationTime = System.DateTime.Now; wxMenu.DeletedMark = false; wxMenuRepository.Add(wxMenu); } else { wxMenu.MenuData = menuData; wxMenu.LastModificationTime = System.DateTime.Now; wxMenuRepository.Update(wxMenu); } JObject jo = (JObject)JsonConvert.DeserializeObject(menuData); JObject menu = (JObject)jo["menu"]; JArray button = (JArray)menu["button"]; Debug.WriteLine(menu.ToString()); AccessTokenResult accessTokenResult = AccessTokenContainer.GetAccessTokenResult(appId); WxJsonResult wxJsonResult = CommonApi.CreateMenu(accessTokenResult.access_token, menu); }
public async Task <WxJsonResult> DeleteCustom(int mpId, string kfAccount) { var account = await _mpAccountAppService.Get(new Abp.Application.Services.Dto.EntityDto <int> { Id = mpId }); var access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret); WxJsonResult result = null; try { result = await CustomServiceApi.DeleteCustomAsync(access_token, kfAccount); } catch { access_token = await _accessTokenContainer.TryGetAccessTokenAsync(account.AppId, account.AppSecret, true); try { result = await CustomServiceApi.DeleteCustomAsync(access_token, kfAccount); } catch (Exception e) { throw new UserFriendlyException(e.Message); } } return(result); }
public ErrorJsonResultException(string message, Exception inner, WxJsonResult jsonResult) : base(message, inner) { JsonResult = jsonResult; }