奕玖科技 > 新闻中心 > 技术文章

C# Asp.Net 微信小程序返回二维码教程

来源: 奕玖科技 Fly | 2024/12/19 9:18:04

先说一下我们实现的结果,先是由后端获取到二维码,然后返回给前端base64图片地址,最终效果图如下

实现方法

获取AccessToken凭证

首先我们需要获取到AccessToken凭证,然后缓存7200秒也就是2个小时代码如下

       /// <summary>
       /// 获取AccessToken凭证
       /// </summary>
       /// <returns></returns>

       public AccessToken? QRCode_AccessToken()
       {
           Var s = GetCachedString() ?? AccessToken().Result;
           return My.Parse<AccessToken>(s);

       }
       
         /// <summary>
        /// 获取AccessToken
        /// </summary>
        /// <returns></returns>
        private Async Task<string> AccessToken() {

            string url = $"https://Api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&Appid={appid}&secret={secret}";
            var httpClient = http.CreateClient();
            var httpResponseMessage = Await httpClient.GetAsync(url);
            var g = "";
            if (httpResponseMessage.IsSuccessStatusCode)
            {
                 g = await httpResponseMessage.Content.ReadAsStringAsync();
                SetCachedString(g);
        
            }

            return g;
        }
       
         /// <summary>
        /// 设置缓存
        /// </summary>
        /// <param name="db"></param>
        /// <returns></returns>
        private string SetCachedString(string db)
        {
            string cacheKey = "AccessToken";
            string? cachedValue = _cache.Get<string>(cacheKey);

            // 尝试从缓存中获取值
            if (cachedValue == null)
            {
                // 如果缓存中没有,生成新的字符串
                var cachedString = db;

                // 设置缓存选项,过期时间为7200秒
                var cacheEntryOptions = new MemoryCacheEntryOptions()
                    .SetAbsoluteExpiration(TimeSpan.FromSeconds(7100)); // 设置绝对过期时间为7200秒

                // 将字符串放入缓存
                _cache.Set(cacheKey, cachedString, cacheEntryOptions);
            }
            return cachedValue??db;


        }
        /// <summary>
        /// 获得缓存
        /// </summary>
        /// <returns></returns>
        private string? GetCachedString()
        {
            return _cache.Get<string>("AccessToken");
        }

原理:先通过get方式通过API获取到数据,然后缓存起来,下次需要的就可以直接通过缓存来获取AccessToken。

获取二维码

在获得AccessToken后就可以直接通过POST参数到API获取到二维码了啊,代码如下

        /// <summary>
        /// 获取小程序特定页面二维码
        /// </summary>
        public async Task<ApiResuit> GetUnlimitedQRCode(int sid) {
            if (sid == 0)
            {
                return new ApiResuit
                {
                    State = 500,
                    Msg = "请传入商家Id"
                };

            }

            var at = QRCode_AccessToken();
            if (at == null)
            {
                return new ApiResuit
                {
                    State = 500,
                    Msg = "请求参数错误"
                };

            }
            else {

                string url = "{\"width\":630,\"page\":\"pages/index/index\",\"scene\":\"sid=" + sid+"\"}";
                var httpClient = http.CreateClient();
                var content = new StringContent(url, Encoding.UTF8, "application/x-www-form-urlencoded");

                var httpResponseMessage = await httpClient.PostAsync($"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={at.access_token}", content);
                if (httpResponseMessage.IsSuccessStatusCode) {

                    var gs = await httpResponseMessage.Content.ReadAsByteArrayAsync();
                    var b = "data:image/png;base64," + Convert.ToBase64String(gs);
                    return new ApiResuit
                    {
                        Data = b,
                    };


                }
                return new ApiResuit
                {
                    State = 500,
                    Msg = "请求失败"
                };
            };




        }

这里要注意一下获得的字节数组是没有data前缀的,所以我们要手动附加data:image/png;base64,以上就是实现的方法,怎么样是否帮助到您?如果您需要使用Asp.Net开发小程序也可以联系我们奕玖可以,我们可以根据您的实际要求做专业的定制。


栏目导航
相关文章
文章标签
关于我们
公司简介
企业文化
资质荣誉
服务项目
高端网站定制
微信小程序开发
SEO排名推广
新闻动态
行业新闻
技术学院
常见问题
联系我们
联系我们
人才招聘
联系方式
Q Q:24722
微信:24722
电话:13207941926
地址:江西省抚州市赣东大道融旺国际3栋
Copyright©2008-2022 抚州市奕玖科技有限公司 备案号:赣ICP备2022010182号-1