(一)验证接入

公众号的分类:

我们平常在微信应用上会看到有很多的公众号,但是各自并不一样,公众号也分很多种类型,不过最常见的就是服务号和订阅号了。下面我们来看一下他们的区别:

1、订阅号
为媒体和个人提供一种信息传播方式,主要偏于为用户传达资讯(类似报纸杂志),主要的定位是阅读,每天可以群发1条消息;

2、服务号
为企业,政府或组织提供对用户进行服务,主要偏于服务交互(类似银行提供服务查询),每个月只可群发4条消息;

3、企业微信(企业号)
为企业,政府,事业单位,实现生产管理和协作运营的移动化,主要用于公司内部通讯使用,旨在为用户提供移动办公,需要先有成员的通讯信息验证才可以关注成功企业微信;

还有一个比较明显的区别就是,订阅号都是存放在一个名叫订阅号的文件夹中,点开才能看到所有关注过的订阅号,但是服务号却和好友一样直接就显示在聊天列表中。这个大家打开微信客户端便能看到。

如果大家有需要申请公众号的,要根据实际需求考虑清楚应该申请哪一种公众号
以下是官方给出的建议,大家可以多参考参考

1)如果想简单的发送消息,达到宣传效果,建议可选择订阅号;
2)如果想用公众号获得更多的功能,例如开通微信支付,建议可以选择服务号;
3)如果想用来管理内部企业员工、团队,对内使用,可申请企业号;
4)订阅号可通过微信认证资质审核通过后有一次升级为服务号的入口,升级成功后类型不可再变;
5)服务号不可变更成订阅号。 

微信公众平台:

平台中分为两种管理模式,平台提供了两种管理模式给我们,应该根据我们的需求来选择使用不同的模式。

下面我们来了解一下,两种模式的区别:

编辑模式
主要针对非编程人员及信息发布类公众帐号使用。
开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。
好处是可视化界面配置,操作简单,快捷,但是功能有限。

开发模式
主要针对具备开发能力的人使用。
开启该模式后,能够使用微信公众平台开放的接口,但是编辑模式的设置会失效,比如“自定义菜单”和“自动回复的消息”功能。通过编程方式可以实现更多复杂的功能,提供个性化服务。

总的来说,编辑模式就是为所有人提供的,如果你的需求仅仅只是最常见的菜单,自动回复等,使用编辑模式已经满足,但是如果你需求的功能比较复杂,有很多很多的想法,就需要使用到开发模式。

开发模式配置流程:

1.申请公众号

微信公众号的通讯机制

image.png

2. 申请服务器资源

因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到我们的服务器上,也就是说,微信服务器是要和我们的服务器进行网络交互,所以我们必须保证我们的服务器外网可以访问到

3.登录申请的公众号页面,打开“基础设置”


appid:是公众号开发识别码,配合开发者密码可调用公众号的接口能力。
appsecret:是校验公众号开发者身份的密码,具有极高的安全性。

进入服务器配置填写框。

点击“修改配置”按钮:

url填写:http://外网IP/wx 。 http的端口号固定使用80,不可填写其他。

Token:自主设置,这个token与公众平台wiki中常提的access_token不是一回事。这个token只用于验证开发者服务器。

URL接入验证

我们需要先来了解一下接入的过程是怎么样的。下图是微信官方对接入过程的介绍。

 

由以上介绍可知,当我们填入url与token的值,并提交后,微信会发送一个get请求到我们填写的url上,并且携带4个参数,而signature参数结合了开发者填写的token参数和请求中的timestamp参数、nonce参数来做的加密签名,我们在后台需要对该签名进行校验,看是否合法。实际上,我们发现微信带过来的4个参数中并没有带token参数,仅有signature是和token有关的,所以我们应该在本地应用中也准备一个和填入的token相同的参数,再通过微信传入的timestamp与nonce做相同算法的加密操作,若结果与微信传入的signature相同,即为合法,则原样返回echostr参数,代表接入成功,否则不做处理,则接入失败。

详细流程可参考微信官方提供的逻辑流程图,我们的应用需要以该流程图的步骤来实现。

 

现在选择提交肯定是验证token失败,因为还需要完成代码逻辑 

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string echostr = Request["echostr"];
            if (Request.HttpMethod.ToLower() == "get")
            {
                if (CheckSignature())
                {
                    HttpContext.Current.Response.Write(echostr);
                    HttpContext.Current.Response.End();
                }
                else
                {
                    HttpContext.Current.Response.Write("。。。");
                    //判断Post或其他方式请求
                }
            }
            else
            {
                HttpContext.Current.Response.Write("............");
                //判断Post或其他方式请求
            }
            Response.End();
        }

        private bool CheckSignature()
        {
            string access_token = "wx_test";

            string signature = HttpContext.Current.Request.QueryString["signature"].ToString();
            string timestamp = HttpContext.Current.Request.QueryString["timestamp"].ToString();
            string nonce = HttpContext.Current.Request.QueryString["nonce"].ToString();
            string[] ArrTmp = { access_token, timestamp, nonce };
            Array.Sort(ArrTmp);     //字典排序
            string tmpStr = string.Join("", ArrTmp);
            tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");

            if (tmpStr.ToLower() == signature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

点击“提交”等待验证结果

提交成功后:(以下图片显示内容为网络图片,与上图显示内容无联系)

配置修改后如图所示,再点击“启用”按钮

询问“是否确定开启服务器配置”,点击“确定”

如果还是失败,请先用微信调试器测试一下url和token是否正确,点此查看详细测试方法

成功启用后如图:

恭喜,你成功启用开发模式。

 

posted @ 2019-04-15 14:12  智者见智  阅读(429)  评论(0编辑  收藏  举报