1. 程式人生 > 實用技巧 >微信測試號使用筆記:介面配置資訊驗證

微信測試號使用筆記:介面配置資訊驗證

一、前提條件,要有一臺伺服器

請填寫介面配置資訊,此資訊需要你有自己的伺服器資源,填寫的URL需要正確響應微信傳送的Token驗證,請閱讀訊息介面使用指南

二、C#程式碼示例

但是上面連結中的程式碼是PHP示例程式碼,因此我整理了一份C#版的,親測能用。

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

namespace WXtoken
{
    public partial class index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //驗證token
            string poststring = string.Empty;
            string token = "aabbcc";   //驗證token,隨意填寫  
            if (string.IsNullOrEmpty(token))
            {
                return;
            }
            string echostr = 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, nonce))
            {
                HttpContext.Current.Response.Write(echostr);
                HttpContext.Current.Response.End();
            }
        }
        #region 微信介面對接驗證程式碼
        public bool checkSignature(string token, string signature, string timestamp, string nonce, string echostr)
        {
            List<string> list = new List<string>();
            list.Add(token);
            list.Add(timestamp);
            list.Add(nonce);
            list.Sort();

            string res = string.Join("", list.ToArray());
            Byte[] dataToHash = Encoding.ASCII.GetBytes(res);
            byte[] hashvalue = ((HashAlgorithm)CryptoConfig.CreateFromName("SHA1")).ComputeHash(dataToHash);
            StringBuilder sb = new StringBuilder();
            foreach (byte b in hashvalue)
            {
                sb.Append(b.ToString("x2"));
            }

            if (signature == sb.ToString())
                return true;
            else
                return false;
        }
        #endregion
    }
}

三、配置失敗原因整理:

  • 埠錯誤,必須是80或者443埠
  • 引數錯誤,建議從官方文件複製引數到專案中(我就是有兩個字母寫反了,尷尬)
  • 地址或者Token錯誤