专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

c# 微信小程序B接口获取小程序二维码

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 1:04:00       共计:3636 浏览


一入微信,满地是坑,这个坑,你得一个个填过去。




产品要求用户通过其他用户的推荐二维码进入小程序,并且绑定二维码所带的参数


微信小程序的二维码生成分为A接口和B接口:


这是微信的官方文档介绍(文档链接如下https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html)


A接口上限是10W个,B接口没有上限


对于这个应用场景,我选择了B接口生成小程序码




首先我们要获取到申请接口所有用的assess_token(附上官方文档https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html)


通过GET请求到access_token,因为我们前端、API、后台都需要用到access_token,所以是将其产生时间和token保存在数据库中


   public static AccessToken GetACCESS_TOKEN(AccessToken model)

           {

               try

               {

                   //token 使用时效为2小时, 5分钟的过期时间是前后两个都能用

                   if (model.access_token_time.AddSeconds(model.expires_in - 5) > DateTime.Now)

                   {

                       return model;

                   }

   

                   #region 调用 ACCESS_TOKEN 接口

                   //拼接URL

                   string url = "https://api.weixin.qq.com/cgi-bin/token";

                   url += "?grant_type=client_credential";

                   url += "&appid=" + WxConfig.APPID;//小程序APPID

                   url += "&secret=" + WxConfig.APPSECRET;//小程序APPSECRET

                   Uri address = new Uri(url);

                   HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

                   request.Method = "GET";

                   request.ContentType = "application/x-www-form-urlencoded";

                   request.Timeout = 6000;

   

                   #endregion

   

                   #region 反馈

   

                   using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)

                   {

                       StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

                       string retString = reader.ReadToEnd();

                       reader.Close();

                       JavaScriptSerializer _serializer = new JavaScriptSerializer();

                       AccessToken accessToken = _serializer.Deserialize<AccessToken>(retString);

                       if (accessToken.access_token != null)

                       {

                           model.access_token = accessToken.access_token;

                           model.expires_in = accessToken.expires_in;

                           model.access_token_time = DateTime.Now;

                           model.Changed = true;

                           return model;

                       }

                   }

   

                   #endregion

               }

               catch (Exception e)

               {

                   Log.Error("WxApi", "GetACCESS_TOKEN : " + e.Message);

               }

   

               return null;

           }


创建了UnlimitedQRCodeModel类


   public class UnlimitedQRCodeModel

       {

   

           public string scene { get; set; }

   

           public string page { get; set; }

       }


并在功能模块进行小程序码获取、保存


   AccessToken accessToken = _accessTokenService.GetFirst();

                       accessToken.Changed = false;

                       accessToken = WxApi.GetACCESS_TOKEN(accessToken);

                       if (accessToken != null && accessToken.access_token != null)

                       {

                           if (accessToken.Changed)

                           {

                               _accessTokenService.Update(accessToken);

                           }

                           //创建实例

                           UnlimitedQRCodeModel qrcodeModel = new UnlimitedQRCodeModel

                           {

                               page = "pages/mobile_add/mobile_add",

                               scene = "recommendId=" + model.Id

                           };

                           //微信请求小程序码的url

                           string url = "pp                   var fileName = Guid.NewGuid().ToString(N) + .png";

                   File.WriteAllBytes(Path.Combine(appPath, fileName), file);

   

                   return filePath + "/" + fileName;

               }

               catch

               {

                   return null;

               }

           }


至此小程序码获取成功了,也保存到了对应路径。



注意!!!以下问题


小程序必须是通过审核的!


二维码的页面路径必须是已经发布的


在使用B接口的时候PAGE参数不要带参数,参数需要存放在scene中


记得!记得!记得!在小程序后台开发设置里面配置链接二维码打开小程序!!




在这过程中,碰到了一个很坑的问题,发现保存的图片都是异常、无法打开的。


在官方文档里请求参数里加了access_token,一开始也疑惑,明明URL上带了,为什么请求里还有加,以为是微信的要求。但是在UnlimitedQRCodeModel实例中加入access_token参数的时候,怎么请求都是错误的数据。百度发现这个参数是多余的!!多余的!!多余的!!是不需要的,不加这个就好了。




最后最后!还是想到之前走的那个人说,一入小程序,放眼望去,全是坑!!!!!!不对!!!一入微信全是坑,公众号那玩意儿也是!!!


版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:PC端生成二维码,微信扫码 带参数跳转微信小程序指定页面 | ·下一条:中文乱码_完美解决mysql中文乱码问题

Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有