public async Task <IActionResult> OnPostAjaxAsync([FromBody] MpAccountDto mpAccountDto) { MpAccount mpAccount = null; if (mpAccountDto.Id > 0) { mpAccount = await _mpAccountService.GetObjectAsync(z => z.Id == mpAccountDto.Id); if (mpAccount == null) { return(RenderError("公众号信息不存在!")); } mpAccountDto.AddTime = mpAccount.AddTime; _mpAccountService.Mapper.Map(mpAccountDto, mpAccount); mpAccount.LastUpdateTime = DateTime.Now; } else { mpAccount = new MpAccount(mpAccountDto); } await _mpAccountService.SaveObjectAsync(mpAccount); //重新进行公众号注册 await AccessTokenContainer.RegisterAsync(mpAccount.AppId, mpAccount.AppSecret, $"{mpAccount.Name}-{mpAccount.Id}"); //立即获取 AccessToken await AccessTokenContainer.GetAccessTokenAsync(mpAccount.AppId, true); //return RedirectToPage("./Edit", new { id = mpAccount.Id, uid = Uid }); return(Ok(new { id = mpAccount.Id, uid = Uid })); }
public async Task <IActionResult> OnPostAsync(int id = 0) { IsEdit = id > 0; MpAccount mpAccount = null; if (IsEdit) { mpAccount = await _mpAccountService.GetObjectAsync(z => z.Id == id); if (mpAccount == null) { return(RenderError("公众号信息不存在!")); } _mpAccountService.Mapper.Map(MpAccountDto, mpAccount); } else { mpAccount = new MpAccount(MpAccountDto); } await _mpAccountService.SaveObjectAsync(mpAccount); //重新进行公众号注册 await AccessTokenContainer.RegisterAsync(mpAccount.AppId, mpAccount.AppSecret, $"{mpAccount.Name}-{mpAccount.Id}"); //立即获取 AccessToken await AccessTokenContainer.GetAccessTokenAsync(mpAccount.AppId, true); //return RedirectToPage("./Edit", new { id = mpAccount.Id, uid = Uid }); return(Ok(new { id = mpAccount.Id, uid = Uid })); }
public void ContainerAsyncTest() { //注册 AccessTokenContainer.Register(base._appId, base._appSecret); //获取Token完整结果(包括当前过期秒数) DateTime dt1 = DateTime.Now; var tokenResult = AccessTokenContainer.GetAccessTokenResultAsync(base._appId).Result; DateTime dt2 = DateTime.Now; Assert.IsNotNull(tokenResult); Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); //只获取Token字符串 dt1 = DateTime.Now; var token = AccessTokenContainer.GetAccessTokenAsync(base._appId).Result; dt2 = DateTime.Now; Assert.AreEqual(tokenResult.access_token, token); Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); //getNewToken { dt1 = DateTime.Now; token = AccessTokenContainer.TryGetAccessTokenAsync(base._appId, base._appSecret, false).Result; dt2 = DateTime.Now; Assert.AreEqual(tokenResult.access_token, token); Console.WriteLine(tokenResult.access_token); Console.WriteLine("强制重新获取AccessToken"); dt1 = DateTime.Now; token = AccessTokenContainer.TryGetAccessTokenAsync(base._appId, base._appSecret, true).Result; dt2 = DateTime.Now; Assert.AreNotEqual(tokenResult.access_token, token);//如果微信服务器缓存,此处会相同 Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); } { tokenResult = AccessTokenContainer.GetAccessTokenResultAsync(base._appId).Result; Console.WriteLine("HashCode:{0}", tokenResult.GetHashCode()); dt1 = DateTime.Now; var allItems = AccessTokenContainer.GetAllItems(); dt2 = DateTime.Now; Assert.IsTrue(allItems.Count > 0); Assert.AreSame(tokenResult, allItems[0].AccessTokenResult);//证明缓存成功 Console.WriteLine("All Items:{0}", allItems.Count); Console.WriteLine("HashCode:{0}", allItems[0].AccessTokenResult.GetHashCode()); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); } }
public async Task <ActionResult> ChangeAccessToken(string openId = "oxRg0uLsnpHjb8o93uVnwMK_WAVw") { return(await Task.Factory.StartNew(async() => { for (int i = 0; i < 4; i++) { var accessToken = await AccessTokenContainer.GetAccessTokenAsync(Config.AppId, true); var result = await Senparc.Weixin.MP.AdvancedAPIs.CustomApi.SendTextAsync(accessToken, openId, "【异步方法】从服务器发来的客服消息。时间:{0},编号:{1}\r\n\r\n新AccessToken:{2}".FormatWith(DateTime.Now.ToString("HH:mm:ss.ffff"), i + 1, accessToken)); } return Content("消息发送完毕!"); }).Result); }
/// <summary> /// 【异步方法】订单查询 /// </summary> /// <param name="appId">公众平台账户的AppId</param> /// <param name="package">查询订单的关键信息数据</param> /// <param name="timesTamp">linux 时间戳</param> /// <param name="app_Signature">签名</param> /// <param name="sign_Method">签名方法</param> public static async Task <OrderqueryResult> OrderqueryAsync(string appId, string package, string timesTamp, string app_Signature, string sign_Method) { var accessToken = await AccessTokenContainer.GetAccessTokenAsync(appId); var urlFormat = "https://api.weixin.qq.com/pay/orderquery?access_token={0}"; //组装发送消息 var data = new { appid = appId, package, timestamp = timesTamp, app_signature = app_Signature, sign_method = sign_Method }; return(await Core.CommonAPIs.CommonJsonSend.SendAsync <OrderqueryResult>(accessToken, urlFormat, data)); }
/// <summary> /// 【异步方法】发货通知 /// </summary> /// <param name="appId">公众平台账户的AppId</param> /// <param name="openId">购买用户的OpenId</param> /// <param name="transId">交易单号</param> /// <param name="out_Trade_No">第三方订单号</param> /// <param name="deliver_TimesTamp">发货时间戳</param> /// <param name="deliver_Status">发货状态,1 表明成功,0 表明失败,失败时需要在deliver_msg 填上失败原因</param> /// <param name="deliver_Msg">发货状态信息,失败时可以填上UTF8 编码的错误提示信息,比如“该商品已退款</param> /// <param name="app_Signature">签名</param> /// <param name="sign_Method">签名方法</param> public static async Task <WxJsonResult> DelivernotifyAsync(string appId, string openId, string transId, string out_Trade_No, string deliver_TimesTamp, string deliver_Status, string deliver_Msg, string app_Signature, string sign_Method = "sha1") { var accessToken = await AccessTokenContainer.GetAccessTokenAsync(appId); var urlFormat = "https://api.weixin.qq.com/pay/delivernotify?access_token={0}"; //组装发送消息 var data = new { appid = appId, openid = openId, transid = transId, out_trade_no = out_Trade_No, deliver_timestamp = deliver_TimesTamp, deliver_status = deliver_Status, deliver_msg = deliver_Msg, app_signature = app_Signature, sign_method = sign_Method }; return(await Core.CommonAPIs.CommonJsonSend.SendAsync <WxJsonResult>(accessToken, urlFormat, data)); }
public void ContainerAsyncTest() { bool useRedis = true; if (useRedis) { var redisConfiguration = "localhost:6379"; RedisManager.ConfigurationOption = redisConfiguration; CacheStrategyFactory.RegisterObjectCacheStrategy(() => RedisObjectCacheStrategy.Instance);//Redis } //注册 AccessTokenContainer.Register(base._appId, base._appSecret); //获取Token完整结果(包括当前过期秒数) var dt1 = SystemTime.Now; var tokenResult = AccessTokenContainer.GetAccessTokenResultAsync(base._appId).Result; var dt2 = SystemTime.Now; Assert.IsNotNull(tokenResult); Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); //只获取Token字符串 dt1 = SystemTime.Now; var token = AccessTokenContainer.GetAccessTokenAsync(base._appId).Result; dt2 = SystemTime.Now; Assert.AreEqual(tokenResult.access_token, token); Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); //getNewToken { dt1 = SystemTime.Now; token = AccessTokenContainer.TryGetAccessTokenAsync(base._appId, base._appSecret, false).Result; dt2 = SystemTime.Now; Assert.AreEqual(tokenResult.access_token, token); Console.WriteLine(tokenResult.access_token); Console.WriteLine("强制重新获取AccessToken"); dt1 = SystemTime.Now; token = AccessTokenContainer.TryGetAccessTokenAsync(base._appId, base._appSecret, true).Result; dt2 = SystemTime.Now; Assert.AreNotEqual(tokenResult.access_token, token);//如果微信服务器缓存,此处会相同 Console.WriteLine(tokenResult.access_token); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); } { tokenResult = AccessTokenContainer.GetAccessTokenResultAsync(base._appId).Result; Console.WriteLine("HashCode:{0}", tokenResult.GetHashCode()); dt1 = SystemTime.Now; var allItems = AccessTokenContainer.GetAllItems(); dt2 = SystemTime.Now; Assert.IsTrue(allItems.Count > 0); Assert.AreSame(tokenResult, allItems[0].AccessTokenResult);//证明缓存成功 Console.WriteLine("All Items:{0}", allItems.Count); Console.WriteLine("HashCode:{0}", allItems[0].AccessTokenResult.GetHashCode()); Console.WriteLine("耗时:{0}毫秒", (dt2 - dt1).TotalMilliseconds); } }
public async Task <IActionResult> ChangeAccessToken() { var accessToken = await AccessTokenContainer.GetAccessTokenAsync(AppId); return(Content(accessToken)); }
/// <summary> /// 获取AccessToken(异步) /// </summary> /// <param name="appId">公众号AppId</param> /// <param name="getNewToken">是否强制重新获取新的Token</param> /// <returns></returns> public static async Task <string> GetAccessTokenAsync(string appId, bool getNewToken = false) { return(await AccessTokenContainer.GetAccessTokenAsync(appId, getNewToken)); }