微信扫一扫,扫条形码/二维码后台(C#,NetCore)


        [HttpGet]
        //微信扫一扫获取密钥
        public async Task<Hashtable> GetQRCodeSignPackage()
        {
            string Jsapi_Ticket = await GetWeiXinJsapi_Ticket();
            JObject Jsapi_TicketJo = (JObject)JsonConvert.DeserializeObject(Jsapi_Ticket);
            string jsapi_ticket = Jsapi_TicketJo["ticket"].ToString();          
            string url = "https://xxxxxxxxxxxxxxxxxxxxx/qrcode.html";
            string timestamp = Convert.ToString(ConvertDateTimeInt(DateTime.Now));
            string nonceStr = createNonceStr();
            string rawstring = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url + "";
            string signature = Sha1Sign(rawstring);

            Hashtable signPackage = new Hashtable();
            signPackage.Add("appId", "xxxxxxxxxxxxxxxx");//xx智能
            signPackage.Add("nonceStr", nonceStr);
            signPackage.Add("timestamp", timestamp);
            signPackage.Add("url", url);
            signPackage.Add("signature", signature);
            signPackage.Add("rawString", rawstring);
            signPackage.Add("JSTicketTicket", jsapi_ticket);

            return signPackage;

        }
        [HttpGet]
        private async Task<string> GetWeiXinJsapi_Ticket()
        {

            var access1 = await GetAccessToken();
            string tokenUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type={1}", access1, "jsapi");
            var wc = new WebClient();
            var strReturn = wc.DownloadString(tokenUrl); //取得微信返回的json数据  return strReturn;



            return strReturn;

        }

 // 3.noncestr 生成签名的随机串
        ///
        /// 创建随机字符串
        /// </summary>
        /// <returns></returns>
        public static string createNonceStr()
        {
            int length = 16;
            string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            string str = "";
            Random rad = new Random();
            for (int i = 0; i < length; i++)
            {
                str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
            }
            return str;
        }

        [HttpGet]
        /// <summary>
        /// Sha1加密签名
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public string Sha1Sign(string str)
        {
            SHA1 sha1 = new SHA1CryptoServiceProvider();
            byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str);
            byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
            string signature = BitConverter.ToString(bytes_sha1_out);
            signature = signature.Replace("-", "").ToLower();
            return signature;
        }

        //1. 获取access token

        [HttpPost("GetAccessToken")]
        /// <summary>
        /// 获取微信AccessToken
        /// </summary>
        /// <returns>Dictionary</returns>
        public async Task<string> GetAccessToken()
        {
            try
            {

                var httpClient = new HttpClient();

                var oldtk = await RedisHelper.Instance.GetAsync($"AccessToken");

                //检查 token 是否失效
                if (!oldtk.IsNullOrWhiteSpace())
                {
                    //尝试获取微信IP 校验token 
                    string chkurl = $"https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token={oldtk}";
                    HttpResponseMessage resp = await httpClient.GetAsync(chkurl);
                    if (resp.IsSuccessStatusCode)
                    {
                        var resstr = await resp.Content.ReadAsStringAsync();

                        //正确返回则表示token有效
                        if (resstr.Contains("ip_list"))
                        {
                            return oldtk;
                        }
                    }
                }

                //string token = "42_yS3zlEcbhM8cmTo95oBTKCXrnCB0RNHBhAnnTXxazkbUY7O5ZgzWuD8ydiaAQhoYKFmBCv0V2i0EIXy4Uw3YVqI6IRhYgUub7Fvlda7yJyBmfj-Cz2c-rJ33QNVjZwizshJxI0smUCmXCSZOHWDiAFAKZG";
                //获得配置信息
                string send_url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={weixinMp.AppId}&secret={weixinMp.Secret}";


                HttpResponseMessage response = await httpClient.GetAsync(send_url);

                string result = string.Empty;

                if (response.IsSuccessStatusCode)
                {
                    result = await response.Content.ReadAsStringAsync();
                }

                //反序列化JSON
                Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(result);

                if (!dic.ContainsKey("access_token"))
                {
                    throw new IOException($"获取Token失败!没有返回值: {result}");
                }
                string accToken = dic["access_token"].ToString();
                await RedisHelper.Instance.SetAsync($"AccessToken", accToken, 3600);
                await CreateMenu(accToken);
                return accToken;
            }
            catch (Exception ex)
            {
                //LoggerHelper.Error(ex, $"获取AccessToken出错");
                throw ex;
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值