zoukankan      html  css  js  c++  java
  • Senparc.Weixin微信开发(1) 开发验证

    官方系列教程
    http://www.cnblogs.com/szw/archive/2013/05/20/3089479.html

    登录微信公众平台后-左侧找到开发--启用服务器配置
    这样,我们才可以将微信公众平台的功能整合到我们自己的网站上面

    启用并设置服务器配置后,用户发给公众号的消息以及开发者需要的事件推送,将被微信转发到该URL中

    需要填写

    • 服务器地址(URL)
    • 令牌(Token)
    • 消息加解密密钥(EncodingAESKey)
    • 消息加解密方式

    注意 要想进行微信开发 包括测试阶段,开发阶段,都需要有一个80端口的域名才行,比如我们这里使用weixin.bamn.cn这个域名,各位读者也可以自己找一个自己的域名,可以是二级域名

    配置一个地址,这个地址是专门用来和微信公众平台进行交互的接口

    CheckSignature.Check()

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

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

    为什么要握手呢?握手的意思就是,进行一个地址的验证,这样微信服务器才能知道是“你”。

    我们创建一个mvc的项目。

    我们要下载senparc的组件,我们可以到官网去下载。

    https://github.com/JeffreySu/WeiXinMPSDK

    关于这个验证方法,同学们可以自己看微信官网提供的文档

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

    我们的这个senparc也是使用这个接口而已,只是对他进行二次封装。也可以直接看我们的北盟网校微信开发的课程。

    我们要想测试这个接口,则需要我们先准备好一个域名和服务器,而且是在80端口的域名,所以我们这里就使用weixin.bamn.cn,你不能使用其他端口的域名,比如www.bamn.cn:81 这样是不行的,如果你没有域名,那么可以自己安装这个花生壳。它可以让我们的本机变成这个公网服务器。

    验证消息的确来自微信服务器
    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

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

    1)将token、timestamp、nonce三个参数进行字典序排序

    2)将三个参数字符串拼接成一个字符串进行sha1加密

    3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    以上 这些都是微信公众平台提供的接口,我们的这个senparc已经帮我们封装好了这个验证方法我们可以直接使用

    CheckSignature.Check(signature, timestamp, nonce, Token)
    

    PostModel 封装

        // 摘要:
        // 微信公众服务器Post过来的加密参数集合(不包括PostData)
        public class PostModel : EncryptPostModel
    	    {
            public PostModel();
            public string AppId { get; set; }
            public void SetSecretInfo(string token, string encodingAESKey, string appId);
        }
    

    用senparc提供的封装方法验证

            /// <summary>
            /// 验证消息的确来自微信服务器
            /// </summary>
            /// <param name="pModel">封装post传过来的加密参数
            /// @param signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
            /// @param timestamp:时间戳
            /// @param nonce:随机数
            /// </param>
            /// <param name="echostr">随机字符串</param>
            public static string CheckToken(PostModel pModel, string echostr)
            {
                if (CheckSignature.Check(pModel.Signature, pModel.Timestamp, pModel.Nonce, Token))
                {
                    return echostr; //返回随机字符串则表示验证通过
                }
                else
                {
                    return "failed:" + pModel.Signature + "," +
                        CheckSignature.GetSignature(pModel.Timestamp, pModel.Nonce, Token) +
                        "。如果您在浏览器中看到这条信息,表明此Url可以填入微信后台。";
                }
            }
    
  • 相关阅读:
    windows下安装php5.5的redis扩展
    redis常见命令
    HDU 5869 Different GCD Subarray Query
    WA时查错点
    HDU 3333 Turing Tree
    HDU 5868 Different Circle Permutation
    AcWing 272 最长公共上升子序列 (dp)
    中国计量大学现代科技学院第四届“中竞杯”程序设计校赛 I 题 (双端队列bfs / 优先队列bfs)
    AtCoder ARC 109 D (拆点 + 分类讨论)
    codeforces 1408D. Searchlights (暴力 + 前缀优化)
  • 原文地址:https://www.cnblogs.com/tangge/p/9810846.html
Copyright © 2011-2022 走看看