C#监听关注或取消关注微信服务号并获取openid和unionid

使用C#抓取微信消息 Console.WriteLine(name + "Name:" + item.Current.Name + " ClassName=" + item.Current.ClassName + " 类型:" + item.Current.LocalizedControlType + $"{item.Current.BoundingRectangle.Location} {item.Current.AutomationId}");3. 找到左边最近聊天的节点。4. 找到打开的对话窗口节点。 阅读详情

最近一个项目用到了微信小程序,并且需要通过微信服务号的模板消息发送消息提醒。之前一直采用的方式是在微信小程序中让用户输入用户名和密码来绑定账号,并且在服务号中再绑定一次系统用户来实现小程序和服务号的关联。由于需要绑定两次比较繁琐,所以这次想换一种方式,注册了一个微信开放平台,然后在开放平台中绑定服务号和小程序,这样就可以在小程序和服务号中通过获取unionid来实现关联。

小程序中获取unionid比较简单,在调用登陆接口时返回的参数中就已经携带了unionid,如果有需要我再单独写文章介绍。微信服务号中获取unionid也不难,通过openid就可以获取到,但最关键的是我想在用户关注公众号的同时就获取到用户的openid和unionid,这样用户就不用做过多的操作。在网上找了很多资料,也没找到C#相关的实现代码,花了半天时间研究,终于搞定,废话不多说,直接说过程。

第一步,代码实现

     新建一个一般处理程序,在ProcessRequest中加入如下代码

try
            {
                string signature = HttpContext.Current.Request["signature"];
                string echostr = HttpContext.Current.Request["echostr"];
                string timeStamp = HttpContext.Current.Request["timeStamp"];
                string nonce = HttpContext.Current.Request["nonce"];


                if (context.Request.HttpMethod == "POST")
                {

                    Stream stream = System.Web.HttpContext.Current.Request.InputStream;
                    stream.Position = 0;
                    byte[] xmlData = new byte[stream.Length];
                    stream.Read(xmlData, 0, xmlData.Length);
                    string resultStr = Encoding.UTF8.GetString(xmlData);


                    XmlDocument xdoc = new XmlDocument();
                    xdoc.LoadXml(resultStr);
                    XmlNode xRoot = xdoc.FirstChild;

                    string msgType = xRoot["MsgType"].InnerText.Trim().ToLower();
                    if (msgType == "event")//事件
                    {
                        string eventStr = xRoot["Event"].InnerText.Trim().ToLower();
                        string openId = xRoot["FromUserName"].InnerText.Trim();


                        if (eventStr == "subscribe")//关注
                        {
                            //获取token
                            string APPID = King.StringOper.getConfigValue("fwh_appid");
                            string APPSECRET = King.StringOper.getConfigValue("fwh_appSecret");
                            string tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID + "&secret=" + APPSECRET;
                            resultStr = King.StringOper.getJsonFromUrl(tokenUrl);
                            JObject jo = JObject.Parse(resultStr);
                            string access_token = jo["access_token"].ToString();

                            //获取unionid
                            string unionidUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + access_token + "&openid=" + openId + "&lang=zh_CN";
                            resultStr = King.StringOper.getJsonFromUrl(unionidUrl);
                            jo = JObject.Parse(resultStr);
                            string unionid = jo["unionid"].ToString();

                            

                            context.Response.Write("感谢您的关注");
                        }
                        else if (eventStr == "unsubscribe")//取消关注
                        {
                            writeLog(openId + "取消关注微信号");
                        }

                    }
                    else
                    {
                        context.Response.Write("");//防止提示故障
                    }
                }
                else
                {
                    //这里的Token令牌要与第三步服务器配置中的Token一致
                    string[] ArrTmp = { "Token令牌", timeStamp, nonce };
                    Array.Sort(ArrTmp);
                    string tmpStr = string.Join("", ArrTmp);
                    tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
                    tmpStr = tmpStr.ToLower();
                    if (tmpStr.Equals(signature))
                    {
                        HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                        HttpContext.Current.Response.Write(echostr);
                    }
                }
            }
            catch (Exception ex)
            {
                context.Response.Write("");//防止提示故障
                writeExceptionInfo(ex.ToString());
            }

上面代码中做了请求方式的判断,如果是POST方式请求,则说明有消息过来了,如果是Get方式请求说明是微信公众平台配置时的验证。

由于微信服务器调用该接口时传递的参数是xml参数,因此需要通过XmlDocument对xml数据进行解析,参数格式如下:

代码下载地址:关注服务号时获取openid和unionid-小程序文档类资源-优快云下载

第二步,发布程序

将程序发布到iis或tomcat服务器,注意必须是80或443端口,这点微信有点不人性,为什么非得这两个端口,发布过程此处不详细说明。

第三步,微信公众平台配置

这一步比较关键,因为需要在线验证,所以要确保之前写的程序已经发布,在微信公众平台中登陆服务号,然后在基本配置页面启用“服务器配置”。服务器地址填写第一步中创建的一般处理程序的url,令牌(Token)自己填写,只需要跟代码中保持一致即可,消息加密解密密钥随机生成一个,因为我设置的是明文模式所以这里无所谓,如果设置的是加密模式,则需要在代码中对读取到的XML文档进行对应的解密操作。

微信公众号监听 关注/取消关注事件 消息接收与响应处理(比较细微) 从官方文档可以看出,他做到了简简单单,但没有做到明明白白。 那么接下来我首先说下文中的url,很多人都不知道这个url,其实他就是 当这些正准备好之后,直接上代码 //微信推送事件 url @RequestMapping(value = "/wx", method = RequestMethod.GET) @ResponseBody public void get(HttpServletRequest request, HttpServletResponse re... 阅读详情

相关推荐

Unity抖音小游戏上架全攻略:从TTSDK集成到软著申请与审核避坑

计算机软件著作权是软件开发者对其原创作品享有的法定权利,它通过登记制度确立权属,为代码提供法律保护。其核心原理在于将源代码、设计文档等作为“作品”进行备案,从而在发生纠纷时作为关键证据。对于开发者而言,软著不仅是法律护盾,更是软件商业化、上架主流平台(如应用商店)的通行证,尤其在游戏、工具软件等领域价值显著。在抖音小游戏等新兴平台,软著已成为内容合规与版权保护的关键环节,是项目正式上架的前置条件。本文聚焦于Unity引擎与TTSDK(字节跳动小游戏SDK)的集成开发,深入解析在抖音小游戏平台中,如何将软著申

weixin_33979203的博客 379

微信小程序生态9-微信开放平台unionId机制介绍

参考文档:https://developers.weixin.qq.com/minigame/dev/guide/open-ability/union-id.html如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。 [外链图片转存失败,源站可能有防盗链机制,建

summon的博客 4559

C#获取openid(详解)

本代码作用于前后端分离获取微信openId,调用说明:在api中新建一个Default.aspx页面,复制文件中代码到页面中,修改appid,key,webAddr值。部署api;前端跳转url:api地址+“/efault.aspx?reurl="+前端页面地址;如果调转成功,会带上openid跳转回reurl页面

Unity游戏移植微信小游戏:核心挑战、性能优化与实战指南

游戏开发中的跨平台移植是开发者常面临的技术挑战,其核心在于解决不同运行环境间的底层差异。从技术原理上看,这涉及将针对特定平台优化的代码、资源和渲染管线适配到新的沙箱环境中,尤其是当目标平台基于WebGL等Web技术时。这种适配的技术价值在于能最大化利用现有项目资产,快速拓展用户触达渠道,降低多平台维护成本。在应用场景上,微信小游戏凭借其庞大的用户基础和便捷的社交入口,成为许多Unity游戏寻求增长的重要平台。然而,其基于浏览器内核的单线程运行环境、严格的内存限制以及独特的平台API,使得Unity游戏移植过

358

微信公众号获取用户信息(UnionID)Demo,语言C#

公众号开发需要进行一些配置, appid 和AppSecret需要填写

C# PC版微信消息监听自动回复的实现方法

主要介绍了C# PC版微信消息监听自动回复的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

实例:用C#.NET手把手教你做微信公众号开发(10)--事件消息处理之关注公众号(普通关注)

一个微信用户关注公众号之后,可以做非常多的处理,比如保存基本信息、获取常规信息、建立VIP关系等等。

持之以恒 8374

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

微信公众号关注/取消订阅事件一文详解

在接触没有做过的事物之前站在巨人肩膀上(官方文档)可以帮助我们更快速了解,网上资料千千万,我们还要具备选择的能力,否则就是大海捞针。希望这篇文章能帮助到你!

一起加油吧~ 8714

Vienna整流器SVPWM调制:7扇区划分与中点电位平衡的MATLAB/Simulink实现解析

本文深入解析Vienna整流器的SVPWM调制技术,重点介绍7扇区划分与中点电位平衡的MATLAB/Simulink实现方法。通过详细的算法推导和仿真模型构建,帮助工程师掌握整流器闭环控制策略,优化功率转换效率。内容涵盖扇区判断逻辑、矢量作用时间计算及中点电位平衡的PID调节等核心技术要点。

weixin_33937499的博客 387

【Unity】YooAsset与HybridCLR:高效资源管理与代码热更的黄金组合

本文深入探讨了Unity开发中YooAsset与HybridCLR的组合应用,为需要长期运营的项目提供了完整的资源与代码热更新解决方案。YooAsset作为高效的资源管理框架,简化了AssetBundle的打包、加载与热更流程;而HybridCLR则攻克了IL2CPP模式下C#代码无法热更的难题。两者结合,实现了从资源到逻辑的平滑在线更新,极大提升了开发迭代与线上维护的效率。

weixin_29006701的博客 281

(8)监控微信进程运行状态-微信UI自动化(.Net+C#)

微信定时发消息

SOF学习拒绝刷屏 2452

使用LaTex写IEEE trans 论文的参考文献(bib)

(1)在.TeX文件的最下方添加这几行内容,主要为生成tran形式的参考文献,第二行为参考文献名称,我命名为reference.bib,所以写的是reference,要根据自己的命名改写。(5)如果要在文中引用的话,就在.tex文件中添加\cite{},中括号里面内容为方框圈出来部分,但引用之后,在参考文献后面会出现[1]这样的标识,不知道为什么。(4)完成(3)以后,点击工具-命令-LaTeX,编译,然后按照此步骤LaTeX-bibtex-LaTeX-LaTeX,就可以完成参考文献的导入。

qq_45884215的博客 6259

C# MVC获取微信openId

控制器端 此项目使用的是.Net FrameWork4.5、MVC5 微信登录界面 public ActionResult WX() { return View(); } 绑定微信时调用的方法 public ActionResult WXBind() { string appid = "你的appId"; return Redirect("https://op

技术分享博客 2056

内核工作FAST‘25 Artifact Evaluation流程记录

在我们的paper中,复现需要用到傲腾持久化内存,因此,需要AE Reviewer访问到内网服务器中。我们的思路是购买云服务器,将其作为跳板机,内网服务器通过SSH反向代理与公网服务器建立隧道,AE Reviewer通过隧道访问内网服务器。我们在AE过程中使用。然后,把一切复现需要的代码环境,在chroot里面配置完成。

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 1215

点云体素化算法研究-3.Voxelization 三维模型体素化

体素(voxel)即体积元素的简称,是数字数据在三维空间分割上的最小的单位。体素化就是通过创建三维体素网格来表示三维物体,是一种将无序点云变为有序点云的降采样的空间数据结构方法,便于实现点云的空间卷积。激光雷达(LiDAR)| Open3D:第五节 表面重建-体素化。

周陽讀書 2067

微信小程序获取unionId

登录凭证校验。通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程 请求地址 GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 返回值 工...

Sean'Xu Blogs 1125

手把手教你模拟登录豆瓣并爬取个人书影音数据:从Cookie解析到反爬攻防实战

在开始写代码之前,先明确我们需要的工具。:建议用3.10以上版本,方便使用一些新特性(如match语句)httpx:比requests更现代,支持HTTP/2,异步性能强,连接池复用好:解析HTML,语法简单,容错性强selenium:仅用于处理登录时的滑块验证(模拟真人)pandas:最终数据清洗和导出Excel/CSVretrying:自动重试机制,应对临时封禁:随机UA,降低特征lxml:作为BeautifulSoup的解析器,速度快为什么不只用requests?

2201_76125261的博客 577

c#获取openid

前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="wx.aspx.cs" Inherits="wx" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="s...

那是一阵风 3230

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 274

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C#获取进程,关闭进程

statics = tables.Rows[0]["QQ"].ToString(); if (QQ == null) QQ = statics; //关闭QQ if (statics != QQ) { QQ = null; ...

BSX_null 1351

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

winform内调用API

/// <summary> /// 调用API接口类 /// </summary> public static class HttpRequest { //调用接口返回内容 public static string GetFunction(string Url,string Method) ...

AntherFantacy的博客 1682

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用c#实现 微信服务号使用 OAuth2.0 授权流程来获取用户openid信息

C 是一种通用的、高效的编程语言。它是由计算机科学家丹尼尔·莫里森(Dennis Ritchie)在 1970 年代创建的,并在自由软件基金会(Free Software Foundation)的 GNU 计划中广泛使用。 C 语言的特点是: 功能强大:C 语言可以用来编写各种类型的程序,包括操作系统、应用程序、编译器和数据库等。 编译型语言:C 语言是一种编译型语言,这意味着在运行程序之前,必...

weixin_35753431的博客 497

Asp.net core(c#)实现在微信公众号定时推送模板消息(包括获取access_token、openid与unionid)

至此,在微信公众号上进行模板添加的步骤已经完成,大家可以参考,详细添加可以看看官方介绍。到这里全部介绍完毕,大家可以参考一下!//设置时间间隔为1分钟执行代码。

nfkjdx的博客 5382

微信小程序获取unionid与openid

获取unionid需要先在微信开放平台绑定小程序,否则无法获取 UnionID机制说明 unionid来区分用户的唯一性,在相同微信开放平台帐号下的移动应用、网站应用、小程序、公众号,用户的unionid是唯一的。也就是说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。 OpenID机制说明 OpenId是用来区分应用的唯一性,在相同微信开放平台账号下不用的应用,其u...

PHPer技术栈 1万+
上一篇: windows 2012 安装 .net framwork3.5报错
下一篇: 微信服务号解决开启服务配置后自定义菜单失效的方法
子非余不知渔之乐
博客等级 码龄19年 56粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值