ASP.NET微信公众号开发实记之一 接入配置

2023-10-27

第一步:填写服务器配置

登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

同时,开发者可选择消息加解密方式:明文模式、兼容模式和安全模式。模式的选择与服务器配置在提交后都会立即生效,请开发者谨慎填写及选择。加解密方式的默认状态为明文模式,选择兼容模式和安全模式需要提前配置好相关加解密代码,详情请参考消息体签名及加解密部分的文档。 

注:需配合服务端设置再提交,具体配置请看第二步



第二步:验证服务器地址的有效性

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信


Demo:

创建一个页面如

WeiXinVerify<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">.aspx,在</span><span style="font-family: Arial, Helvetica, sans-serif;">WeiXinVerify</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">.aspx.cs中配置如下代码</span>

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace Wodeyun.Project.Www
{
    public partial class WeiXinVerify : System.Web.UI.Page
    {
        const string Token = "abcdefg";//定义一个局部变量不可以被修改,这里定义的变量要与接口配置信息中填写的Token一致
        protected void Page_Load(object sender, EventArgs e)
        {
            Valid();//校验签名
        }

        private void Valid()
        {
            string echoStr = Request.QueryString["echoStr"].ToString();
            if (CheckSignature())
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    Response.Write(echoStr);
                    Response.End();
                }
            }
        }

        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// <returns></returns>
        private bool CheckSignature()
        {
            string signature = Request.QueryString["signature"].ToString();
            string timestamp = Request.QueryString["timestamp"].ToString();
            string nonce = Request.QueryString["nonce"].ToString();
            string[] ArrTmp = { Token, timestamp, nonce };
            Array.Sort(ArrTmp);//字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");//对该字符串进行sha1加密
            tmpStr = tmpStr.ToLower();//对字符串中的字母部分进行小写转换,非字母字符不作处理
            if (tmpStr == signature)//开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败
            {
                return true;
            }
            else
                return false;
        }        
    }
}

第三步:依据接口文档实现业务逻辑

验证URL有效性成功后即接入生效,成为开发者。如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。

此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,然后开发者可以依据自身业务逻辑进行响应,例如回复消息等。

公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。全局返回码说明

用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。

此外,由于开发者经常有需在多个平台(移动应用、网站、公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制。开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用(移动应用、网站应用和公众帐号,公众帐号只有在被绑定到微信开放平台帐号下后,才会获取UnionID),可通过获取用户基本信息中的UnionID来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台帐号下的不同应用,UnionID是相同的。详情请在微信开放平台的资源中心-移动应用开发-微信登录-授权关系接口调用指引-获取用户个人信息(UnionID机制)中查看。

另请注意,微信公众号接口只支持80接口。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET微信公众号开发实记之一 接入配置 的相关文章

随机推荐

  • VUE中index.html什么时候加载的mainjs呢

    今天突然思考到一个问题 index html文件中是vue项目的主页 项目入口 那么mainjs是啥时候被index加载运行的呢 是怎么被运行的呢 1 先来看看vue项目的一个结构解析 非常感谢磊阿磊阿磊磊磊的图片 index html 主
  • prometheus部署node,server以及域名加告警

    安装prometheus 系统 root i u7jq7uyl cat etc redhat release CentOS Linux release 7 2 1511 Core 本文档只是部署单节点 要部署多个节点请参考官方federat
  • Element复用:StatefulWidget修改和key

    在Flutter中 Widget的功能是 描述一个UI元素的配置数据 即 Widget其实并不是表示最终绘制在设备屏幕上的显示元素 而只是显示元素的一个配置数据 Flutter中真正代表屏幕上显示元素的类是Element 若类比于编程语言
  • RT-Thread Studio上使用U8G2(NUCLEO-F411RE)

    1 U8G2是嵌入式设备的单色图形库 Arduino和RT Thread都支持 包含大量的图形程序 绘画直线 方框 圆圈 支持多种语言多种字体 涵盖几乎所有流行的控制器 SSD1305 SSD1306 SSD1309 SSD1322 SSD
  • ubuntu设置网卡默认启动_ubuntu 网络配置

    检查网络配置命令 ifconfig 一 通过配置文件配置 新手没怎么用过Ubuntu 所以走了不少弯路 网上找了很多方法 大都没对我起到帮助作用 所以把自己的配置方法写一写 Ubuntu上连了两块网卡 eth0为外网的eth1为内网的 VP
  • Docker下载包的时候显示Connection failed [IP: 91.189.88.142 80]

    之前使用Docker生成镜像的时候 有一些包因为网络问题出现Connection failed 和 failed to fetch 这种时候我们可以通过修改Dockerfile中的下载源来防止网络连接失败 具体操作为在Dockerfile
  • 读取Excel数据

    该工具类是可以用的 注意别导错包 还有Excel是有版本控制的 我这里就没有那么详细了 工具类 import java io File import java io FileInputStream import java util Arra
  • Dubbo序列化问题排查

    h1 现象 为一个dubbbo接口新增了一个方法 code DomainObject
  • 动态建立Vxlan实现隧道跨子网互访实验配置(集中式网关场景)

    目录 基础配置 配置E V P N 在CE1 CE2 CE3开启E V P N功能 建立CE1 CE2 CE3之间的E V P N对等体 创建BD域并配置EVPN实例 选择报文进入Vxlan隧道 配置发送Type3路由 创建三层网关的Vbd
  • 【 Linux 网络编程 】Linux 下 select 的使用

    一 相关函数 NAME select FD CLR FD ISSET FD SET FD ZERO synchronous I O multiplexing 同步多路IO转接 SYNOPSIS According to POSIX 1 20
  • 简单的实现app界面劫持和后台监控

    如今越来越多的手机玩家都为了折腾一些稀奇古怪的东西 或出于好奇 或出于贪心 往往会root手机去尝试安装一些外挂 刷分 刷粉 修改版等等乱七八糟的东西 正因为此类用户的存在 一些小人就盯上了这方面的市场 去开发一些盗取财产 密码 锁机等等
  • Java面试必问的HashMap,javaweb开发的框架

    准备好套路 自我介绍 千万不能筐瓢 一定要牢记 自然流畅地介绍自己的学习经历 工作经历 项目经历 个人优势等等 抽象概念 当面试官问你是如何理解多线程的时候 你要知道从定义 来源 实现 问题 优化 应用方面系统性地回答 项目强化 必须针对简
  • Java学生信息管理系统_毕业设计项目实例(附源码)

    一 项目介绍 1 面向人群 学校的学生信息管理人员以及老师和学生 2 功能描述 1 基本功能 该学生成绩管理系统 涉及学生基本信息 姓名 学号 专业 班级 所属院系 高等数学 英语 数据结构 计算机组成原理 面向对象程序设计 系统可以完成对
  • 【重庆邮电大学协办】2023年第六届数据挖掘与知识发现国际会议(DMKD 2023)

    重庆邮电大学协办 2023年第六届数据挖掘与知识发现国际会议 DMKD 2023 重要信息 会议网址 www icdmkd org 会议时间 2023年6月24 26日 召开地点 中国 重庆 截稿时间 2023年5月24日 录用通知 投稿后
  • OPC服务器简介和入门介绍

    什么是OPC OPC代表OLE 对象链接和嵌入 过程控制 OPC是最流行的数据连接标准 用于在控制器 设备 应用程序和其他基于服务器的系统之间进行通信 而无需进入数据传输的自定义驱动程序 工厂自动化系统或过程由来自不同供应商或供应商的不同协
  • 动态主机配置协议DHCP

    文章目录 一 DHCP介绍 二 DHCP工作原理 三 DHCP实验 eNSP 四 总结 一 DHCP介绍 DHCP 全称动态主机配置协议 Dynamic Host Configuration Protocol 在大型企业网络中 会有大量的主
  • python hook android_[原创]初识Frida--Android逆向之Java层hook (一)

    博客同步 访问 0x00 文中用到的工具Frida jadx gui 一个强大的android反编译工具 genymotion模拟器 Python2 7以及frida python库 radare2 反汇编器 pycharm 0x01 ho
  • 安卓APP_ 布局(1)—— LinearLayout

    摘自 安卓APP 布局 1 LinearLayout 作者 丶PURSUING 发布时间 2021 04 05 16 46 22 网址 https blog csdn net weixin 44742824 article details
  • python决策树算法代码_Python3.0 实现决策树算法的流程

    决策树的一般流程 检测数据集中的每个子项是否属于同一个分类 if so return 类标签 Else 寻找划分数据集的最好特征 划分数据集 创建分支 节点 from math import log import operator 生成样本
  • ASP.NET微信公众号开发实记之一 接入配置

    第一步 填写服务器配置 登录微信公众平台官网后 在公众平台后台管理页面 开发者中心页 点击 修改配置 按钮 填写服务器地址 URL Token和EncodingAESKey 其中URL是开发者用来接收微信消息和事件的接口URL Token可