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 }));
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        /// <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));
        }
Exemplo n.º 6
0
        /// <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));
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        public async Task <IActionResult> ChangeAccessToken()
        {
            var accessToken = await AccessTokenContainer.GetAccessTokenAsync(AppId);

            return(Content(accessToken));
        }
Exemplo n.º 9
0
 /// <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));
 }