Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证要对接微信公众平台的”开发模式”,即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MPSDK微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现“高级功能”菜单。使用“高级功能”>“开发模式”之前,必须有一个已经部署在Internet上,可以用80端口访问的网站(域名或IP访问都可以),一些…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

    要对接微信公众平台的”开发模式”,即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现“高级功能”菜单。

    使用“高级功能”>“开发模式”之前,必须有一个已经部署在Internet上,可以用80端口访问的网站(域名或IP访问都可以),一些开发的准备工作见文章:Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者

    首次进入“高级功能”后界面如下:

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    我们看到默认情况下,“编辑模式”是开启的,要使用“开发模式”,必须先关闭“编辑模式”。

    点击进入编辑模式。如下图:

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    点击右上角的滑块,关闭“编辑功能”。

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

   然后回到“高级功能”,进入“开发模式”,如下图:

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    进入开发模式后,我们需要设置与微信服务器通讯的Url,以及只有我们自己知道的Token(千万不可泄露)。

    官方已经提供了一个PHP版本的示例:http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.zip,你也可以根据官方API的说明用自己的语言编写。

    在Senparc.Weixin.MP的开源项目中,我们也提供了ASP.NET MVC和ASP.NET Web Forms两种可以直接部署的Demo:https://github.com/JeffreySu/WeiXinMPSDK

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    在提交的时候,微信服务器会对填写的URL,使用Token进行一次Get方式请求的验证,如果顺利通过,则保存成功,如果不通过,会给出错误信息,并且所填写的信息是无法保存的。

    为了更加直观地演示这个URL对应的程序中,应高包含哪些必要元素,我这里给出Senparc.Weixin.MP的实现方法(我会分别以MVC和WebForms为例):

方法一:使用MVC

    1、建立一个Controller,如WeixinController.cs,引用Senparc.Weixin.MP.dll(using Senparc.Weixin.MP.dll),最新的DLL见开源项目的Senparc.Weixin.MP.BuildOutPut文件夹https://github.com/JeffreySu/WeiXinMPSDK/tree/master/src/Senparc.Weixin.MP.BuildOutPut

  注意:Senparc.Weixin.MP.BuildOutPut 中的 dll 需要自己下载 Senparc.Weixin SDK 项目源代码并编译,如果常规开发建议使用 nuget 进行安装:https://www.nuget.org/packages/Senparc.Weixin.MP,其他类库也都可以根据名字在 nuget 找到。 

    2、设置一个私有变量(当然你也可以保存在数据库中),如:

        public readonly string Token = "weixin";//与微信公众账号后台的Token设置保持一致,区分大小写。

    3、建立一个名称为Index,用于Get请求的Action,如:

        /// <summary>
        /// 微信后台验证地址(使用Get),微信后台的“接口配置信息”的Url填写如:http://weixin.senparc.com/weixin
        /// </summary>
        [HttpGet]
        [ActionName("Index")]
        public ActionResult Get(string signature, string timestamp, string nonce, string echostr)
        {
            if (CheckSignature.Check(signature, timestamp, nonce, Token))
            {
                return Content(echostr); //返回随机字符串则表示验证通过
            }
            else
            {
                return Content("failed:" + signature + "," + MP.CheckSignature.GetSignature(timestamp, nonce, Token)+"。如果您在浏览器中看到这条信息,表明此Url可以填入微信后台。");
            }
        }

  至此,这些代码编译后按照要求部署到网站上,并且在“接口配置信息”中填写http://YourDomain/weixin,Token填写weixin。

    上述代码完整的WeixinController.cs可以看这里

方法二:使用Web Forms

    Web Forms的验证过程和MVC是一样的,只是写法上有点差别,这里直接给出代码(也要using Senparc.Weixin.MP.dll),假设文件名为根目录下weixin.aspx:

 public partial class Weixin : System.Web.UI.Page
    {
        private readonly string Token = "weixin";//与微信公众账号后台的Token设置保持一致,区分大小写。

        protected void Page_Load(object sender, EventArgs e)
        {
            string signature = Request["signature"];
            string timestamp = Request["timestamp"];
            string nonce = Request["nonce"];
            string echostr = Request["echostr"];

            if (Request.HttpMethod == "GET")
            {
                //get method - 仅在微信后台填写URL验证时触发
                if (CheckSignature.Check(signature, timestamp, nonce, Token))
                {
                    WriteContent(echostr); //返回随机字符串则表示验证通过
                }
                else
                {
                    WriteContent("failed:" + signature + "," + CheckSignature.GetSignature(timestamp, nonce, Token));
                }
               
            }
            else
            {
                 //判断Post或其他方式请求
            }
             Response.End();
        }

        private void WriteContent(string str)
        {
            Response.Output.Write(str);
        }
}

  按照上面的代码,在“接口配置信息”中,Url应当填写http://YourDomain/weixin.aspx,Token应当填写weixin。

    上述weixin.aspx.cs完整代码看这里(当然你也可以写成ashx进一步提高效率)。

    

    CheckSignature.Check()方法是Senparc.Weixin.MP SDK中一个验证请求的方法,已经做了封装。这里直接使用是为了简化代码突出重点,感兴趣的朋友可以直接看源代码。

    用以上MVC和Web Forms两种方法的任意一种,已经可以让后台验证通过。但是注意,光有Get的方法,尚不能与微信用户发来的信息通讯,因为通过前面的教程我们知道,微信后台的Url是通过Get方式请求,而微信客户端的请求是由Post方式请求的,关于Post的方法,我会在后面的教程中详细说明。

    并且,在目前的设置状态下,即便你写了Post相关的方法,通过验证之后也并不表示你的服务器已经可以接收到微信服务器的消息了,还有最后一步:手动打开“开发者模式”:

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

    现在这个微信账号已经成功切换到了“开发者模式”,所有微信客户端发送到该公众账号的消息,都将转发到刚才填写的Url中。

    下一篇我们将介绍如何使用最“粗矿”的方式响应客户端的发来的Post请求。

    了解了“粗矿”方法之后,我们会正式进入“精致”和“简洁”的Senparc.Weixin.MP SDK的方法。

 

 系列教程索引

地址:http://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(二):成为开发者
  3. Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题
  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明
  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明
  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(十):多客服接口说明
  11. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明
  12. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明
  13. Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明
  14. Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
  15. Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
  17. Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
  18. Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理
  20. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十):使用菜单消息功能
  21. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十一):在小程序中使用 WebSocket (.NET Core)
  22. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试

 

 

转载于:https://www.cnblogs.com/szw/p/3202857.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171589.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ingress的用法与原理[通俗易懂]

    ingress的用法与原理[通俗易懂]前言我们知道真正提供服务的是后端的pod,但是为了负载均衡,为了使用域名,为了….,service诞生了,再后来ingress诞生了,那么为什么需要有Ingress呢?先看看官网怎么说的:In

    2022年7月1日
    61
  • leetcode-78子集[通俗易懂]

    leetcode-78子集[通俗易懂]给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]] 提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素 互

    2022年8月9日
    4
  • git 重置用户名 密码信息

    gitclone时,权限不够。如fatal:unabletoaccess:TherequestedURLreturnederror:403可能原因是,你之前在本电脑使用过git.但是以前和现在又不是同一个账户。所以当你现在使用gitcloneurl时,默认使用以前的账户信息。所以出现没有权限的状况。解决方法:重置本机保留的gitconfig信息。…

    2022年4月8日
    242
  • Debian 6 字体显示效果调整

    Debian 6 字体显示效果调整在给cairo打了补丁之后,我发现debian的字体显示效果还是跟ubuntu有差别,于是我把ubuntu下/etc/fonts的所有文件都打包放在了debian的/etc/fonts下,这里面ubuntu对字体的渲染做了优化,我直接拿过来用了,:)。可是效果还是不一样,最后发现了问题所在。打开“Appearance”设置对话框,选中“Fonts”标签,点击”Details”,Hintin

    2022年10月9日
    2
  • SpringBoot常见面试问题

    SpringBoot常见面试问题博客转载自:https://blog.csdn.net/ityouknow/article/details/96533522随着SpringBoot使用越来越广泛,SpringBoot已经成为Java程序员面试的知识点,很多同学对SpringBoot理解不是那么深刻,经常就会被几个连环跑给干趴下了!比如下面这一段的SpringBoot问答:问:你觉得S…

    2022年6月4日
    38
  • 实现watch命令

    实现watch命令

    2021年8月28日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号