.Net Core-做一个微信公众号的排队系统

前言

微信扫码登录,微信扫码获取排队信息这些场景很常见,但是大家知道里面的原理是怎么实现的呢?今天我就来给大家解惑!

总体流程

浏览器请求服务器获取到二维码图片

浏览器生成唯一值uuid

通过uuid获取到带参数的二维码,将uuid作为key存进redis缓存服务器里面

服务端生成uuid返回给浏览器

通过uuid获取到带参数的二维码,将uuid作为key存进redis缓存服务器里面

用户扫码

手机进行扫描二维码,然后手机携带uuid和用户信息向手机的服务器发送请求,手机服务器收到之后携带uuid去redis服务器查询用户。

  • 扫码登录:

查询用户成功之后返回一个Token给网页服务器,通过解析这个Token可以拿出用户的信息,然后浏览器就成功登录微信了。

  • 推送排队信息 查询用户成功之后调用模板消息,然后排队信息推送就成功了。

开发

以微信扫码获取排队信息为例

第一步,获取uuid

为了简化流程,且由前端生成uuid。

第二步,获取Access token

    public async Task<string> GetAccessToken()
        {
            var accesstoken = await "https://api.weixin.qq.com/cgi-bin/token"
                    .SetQueryParams(new
                    {
                        grant_type = "client_credential",
                        appid = WeixinSetting.Appid,
                        secret = WeixinSetting.Appsecret
                    })
                 .GetJsonAsync<AccessToken>();
            return accesstoken.Access_Token;
        }

第三步,使用uuid创建二维码ticket

  public async Task<string> GetTicket(string uuid, string token)
        {


            var accesstoken = await "https://api.weixin.qq.com/cgi-bin/qrcode/create"
                .SetQueryParams(new
                {
                    access_token = token
                })
                .PostJsonAsync(new
                {
                    expire_seconds = 604800,
                    action_name = "QR_STR_SCENE",
                    action_info = new
                    {
                        scene = new
                        {
                            scene_str = uuid
                        }
                    }
                }).ReceiveJson<TicketUrl>();



            return accesstoken.Ticket;


        }

第四步,通过 ticket 换取二维码

如果自己有通过ticket生成二维码的需求,可自行处理, 如果没有可以直接调取微信公众号接口

      public async Task<byte[]> GetQrCode(string ticket)
        {
            return await "https://mp.weixin.qq.com/cgi-bin/showqrcode"
             .SetQueryParams(new
             {
                 ticket = ticket
             })
          .GetBytesAsync();

        }

完整代码如下

     [HttpGet("GetQrCode")]
        public async Task<IActionResult> GetQrCode(string uuid)
        {
            return new FileContentResult( await _qrCodeServices.ShowQrCode(uuid), "image/jpeg");
        }
       public async Task<byte[]> ShowQrCode(string uuid)
        {
            string token = await GetAccessToken();
            string ticket = await GetTicket(uuid, token);
            return await GetQrCode(ticket);
        }

这样我们就生成了带参数的二维码图片了

 

第六步,微信扫码进行回调

在回调方法处理消息模板推送逻辑

    [HttpPost]
        public async Task<string> post()
        {
            IHttpBodyControlFeature httpBodyControlFeature = Request.HttpContext.Features.Get<IHttpBodyControlFeature>();
            if (httpBodyControlFeature != null )
            {
                httpBodyControlFeature.AllowSynchronousIO = true;
            }
            string content = new StreamReader(Request.Body).ReadToEnd();

            await qrCodeServices.PushTemplateMessage(content);
            return "success";

        }
 public async Task PushTemplateMessage(string content)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(content);
            if (doc.DocumentElement["MsgType"].InnerText != "Event") return;
            if (doc.DocumentElement["Event"].InnerText != "SCAN") return;
            string value = doc.DocumentElement["FromUserName"].InnerText;

            string token = await GetAccessToken();
            var accesstoken = await "https://api.weixin.qq.com/cgi-bin/message/template/send"
          .SetQueryParams(new
          {
              access_token = token
          })
          .PostJsonAsync(new
          {
              touser = value,
              template_id = "i4h4yHvgMgIoJ8-Mr49XcpbhMxmRXFJ5EF5DoOTGOMc",
              data = new
              {
                  first = new
                  {
                      value = "当前排队位置",
                      color = "#173177"
                  },
                  keyword1 = new
                  {
                      value = "70",
                      color = "#173177"
                  },
                  keyword2 = new
                  {
                      value = "40分钟",
                      color = "#173177"
                  }

              }
          });
        }

这样以微信扫码获取排队信息就成功了

 

总结

文章来源于生活中的点点滴滴,这也是我的即兴使用,大家要是有更好的使用技巧,欢迎交流,独乐乐不如众乐乐,本篇就说到这里啦,希望对您有帮助。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: "ASP.NET Core PC手机微信商城源码.zip"是一个包含ASP.NET Core项目的源代码压缩文件,旨在构建一个适用于PC和手机的微信商城应用程序。 该压缩文件包含了适用于ASP.NET Core框架的源代码。ASP.NET Core一个开源的跨平台框架,用于构建现代化的Web应用程序。它具有高性能、模块化、可扩展性和跨平台的特点。 该源码文件的目标是构建一个适用于PC和手机的微信商城。微信商城是一个基于微信公众号平台的电子商务平台,用户可以在微信上购买商品、下订单、评论商品等。 通过使用这个源代码文件,开发者可以参考ASP.NET Core的最佳实践,快速搭建自己的微信商城应用程序。它提供了对PC和手机的支持,使得用户可以在不同的设备上访问商城。 源代码文件的内容可能包括商城的前端页面、数据库架构、后端逻辑等。开发者可以根据自己的需求进行修改和定制,以满足特定的商城功能和设计要求。 总之,"ASP.NET Core PC手机微信商城源码.zip"是一个包含ASP.NET Core项目的源代码压缩文件,能够帮助开发者搭建适用于PC和手机的微信商城应用程序,并加快开发过程。 ### 回答2: asp.net core pc 手机 微信商城源码.zip是一个用asp.net core框架开发的微信商城的源代码压缩包。该源码包含了商城的前端和后端代码,适用于pc端和手机端。 asp.net core是微软推出的开源框架,具有高性能、跨平台等特点。使用asp.net core开发商城能够提供稳定性和可靠性,并且能够轻松适应不同大小屏幕的显示。 商城源码中包含了前端页面的设计和开发,以及后端代码的逻辑和功能实现。前端页面设计精美且响应式布局,能够自动适应不同设备的屏幕大小。后端代码使用了asp.net core框架提供的特性,包括MVC模式、身份验证、数据持久化等功能。 通过该微信商城源码,可以实现在线购物、商品展示、下单支付等功能。同时,商城还支持微信登录、微信支付等与微信公众号的交互功能。商家可以管理商品信息、订单管理、用户管理等功能。 总之,asp.net core pc 手机 微信商城源码.zip提供了一个完整的微信商城解决方案,能够帮助开发者快速搭建一个功能完善且适应不同设备的商城平台。 ### 回答3: asp.net core pc 手机 微信商城源码.zip 是一个包含了使用asp.net core开发的微信商城的源代码的压缩文件。 微信商城是一款基于微信平台开发的电商系统,用户可以在微信中浏览和购买商品,进行在线支付等操作。该源码使用asp.net core作为开发框架,兼容pc和手机两个平台,可以在多个设备上运行和使用。 asp.net core 是微软推出的一种跨平台的开发框架,它结合了传统的ASP.NET和新一代的.net core技术,具有高效、灵活、可扩展等特点。使用asp.net core开发商城系统可以提高开发效率,减少Bug和安全性问题。 该源码包含了商城系统的各个功能模块,如商品管理、用户管理、订单管理、支付接口等。开发人员可以通过修改和定制源码,根据自己的需求来搭建自己的微信商城系统。 当你拿到这个源码包后,可以解压缩并使用asp.net core开发工具打开,然后根据其中的说明文档来配置和运行项目。在运行项目之前,需要先安装和配置好asp.net core的开发环境,并且熟悉asp.net core的开发流程、工具和技术。 总之,asp.net core pc 手机 微信商城源码.zip 是一个基于asp.net core开发的微信商城系统的源代码文件,通过该源码可以快速搭建和定制自己的微信商城系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值