微信公眾號開發--開發服務器接入微信服務器



1.微信公眾號注冊
到微信公眾平台(https://mp.weixin.qq.com/)注冊公眾號。
公眾號有“服務號”,“訂閱號”,“企業號”三種類別,“服務號”主要面向企業和個人,“訂閱號”主要面向組織和個人。
申請完畢后,登陸公眾號,進入管理界面,公眾號對應的二維碼如下所示:

2.開發服務器配置

URL是開發者用來接收微信消息和事件的接口URL
Token可由開發者任意填寫,用作生成簽名
EncodingAESKey由開發者手動填寫或隨機生成,將用作消息體加解密秘鑰


3.驗證開發服務器地址有效性
開發者提交信息后,微信服務器將發送GET請求到開發服務器URL,GET請求有四個參數:
signature:微信加密簽名
signature結合了token,timestamp,nonce三個參數
timestamp:時間戳
nonce:隨機數
echostr:隨機字符串

開發者通過檢驗signature對請求進行檢驗,若檢驗成功,接入生效,否則接入失敗

加密/檢驗流程如下:
1)將token,timestamp,nonce三個參數進行字典序排序
2)將三個參數字符串拼接成一個字符串進行sha1加密
3)開發者獲得加密后的字符串雨signature對比

檢驗signature的C#示例代碼如下:

wxapi.ashx

<%@ WebHandler Language="C#" Class="wxapi" %>

using System;
using System.Web;
using System.IO;
using System.Text;
using System.Web.Security;
public class wxapi : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        string postString = string.Empty;
        Auth(); //微信接入的測試
    }
    /// <summary>
    /// 成為開發者的第一步,驗證並相應服務器的數據
    /// </summary>
    private void Auth()
    {
        string token = "weixin";//從配置文件獲取Token
        if (string.IsNullOrEmpty(token))
        {

        }

        string echoString = HttpContext.Current.Request.QueryString["echoStr"];
        string signature = HttpContext.Current.Request.QueryString["signature"];
        string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
        string nonce = HttpContext.Current.Request.QueryString["nonce"];

        if (CheckSignature(token, signature, timestamp, nonce))
        {
            if (!string.IsNullOrEmpty(echoString))
            {
                HttpContext.Current.Response.Write(echoString);
                HttpContext.Current.Response.End();
            }
        }
    }
    /// <summary>
    /// 驗證微信簽名
    /// </summary>
    public bool CheckSignature(string token, string signature, string timestamp, string nonce)
    {
        string[] ArrTmp = { token, timestamp, nonce };

        Array.Sort(ArrTmp);
        string tmpStr = string.Join("", ArrTmp);

        tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
        tmpStr = tmpStr.ToLower();

        if (tmpStr == signature)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    public bool IsReusable {
        get {
            return false;
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM