Hi!欢迎访问Biiww比威企业管理软件定制网!

咨询电话:

155-4222-0377

24 小 时 咨 询 电 话

办公技巧

Office Skills

联系我们

Contact us
微信扫码直接聊

155-4222-0377

Biiww比威企业管理软件定制

网络

架设微信公众号/小程序的token服务器配置

2022-9-20

       我们在用WEB架设微信公众号或者小程序的时候,第一步就是要去微信公众平台(http://mp.weixin.qq.com)用微信登录,申请一个公众号作为媒介,通过微信的接口去完成我们想要的功能。

 

       但是我们申请下来之后,要填写具体的个人服务器信息。我们要申请一个开发者ID(AppID)和生成一个开发者密码(AppSecret),还要将您的服务器IP填写到白名单中,这里服务器可以是虚拟主机、固定IP的服务器也可以是VPS这类产品。

 

       最重要的一步就是服务器配置这里了。由于开发语言的不同,我们都知道WEB开发语言有很多种:大概可分ASP、ASP.NET、JSP、PHP等等。我们在配置服务器的时候,初学者都配置不成功,尤其是Token这一项,很多时候会和说明文档里的access_token这项混淆。其实这个token是服务器配置的密匙,好比说微信公众平台要连接你的服务器,怎么证明这个服务器就是你的呢?这里用到的就是token。您需要在您的服务器目录里建立可以发送的文件,微信公众号平台需要和您的网站有数据交换,平台会给您发送token令牌,你也要回复给公众号平台,这里需要动态网站技术的支持。

 

       我们用最简单的asp举例,我们这里把asp文件起名为token.asp,并把此文件放入自己的服务器内(注意要有访问权限并正常访问)。

 

       服务器地址(URL):这里填写http://www.xxx.com/token.asp (这里也可以是https:)

 

       令牌(Token):这里填写您程序里写的密码

 

       消息加解密密钥(EncodingAESKey):这里点右边的随机生成按钮即可

 

       消息加解密方式:这里有三个选项,明文模式、兼容模式和安全模式(推荐)。这里我们为了操作方便,选择明文模式。

 

 

 

 

       最后点击提交即可!

 

       我们在开发文档中只能看到官方给我们提供PHP编程的例子,这显然是不适用的。你让JSP和asp等等的程序员情何以堪。我们介绍几个主流语言连接文件的编写方法,这里注意要把文件格式改为UTF-8,否则输出有乱码:

 

PHP:请详看帮助文档。

 

ASP:

<%

Response.Write request("echostr")

Response.End %>

这里不用写秘钥方法,进入基本配置的token里随便填写即可。

 

 ASP.NET:

 

        {

            //微信服务器配置提交时,echoStr才不为空。

            string echoStr = Request.QueryString["echoStr"];

            if (echoStr != null)

            {

                if (CheckSignature())

                {

                    if (!string.IsNullOrEmpty(echoStr))

                    {

                        Response.Write(echoStr); Response.End();

                    }

                }

            }

 

JAVA:

 

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.what21.weixin.utils.CheckoutUtils;

@WebServlet(name = "WeiXinAccessValidateServlet", urlPatterns = { "/wxav", "/wxavs" }, loadOnStartup = 1)

public class WeiXinAccessValidateServlet extends HttpServlet {

private static final long serialVersionUID = -339872708022690958L;

@Override

protected void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

boolean isGet = request.getMethod().toLowerCase().equals("get");

PrintWriter print;

if (isGet) {

// 微信加密签名

String signature = request.getParameter("signature");

// 时间戳

String timestamp = request.getParameter("timestamp");

// 随机数

String nonce = request.getParameter("nonce");

// 随机字符串

String echostr = request.getParameter("echostr");

// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败

if (signature != null && CheckoutUtils.checkSignature(signature, timestamp, nonce)) {

try {

print = response.getWriter();

print.write(echostr);

print.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

System.out.println("signature->" + signature);

System.out.println("timestamp->" + timestamp);

System.out.println("nonce->" + nonce);

System.out.println("echostr->" + echostr);

}

}

}

package com.what21.weixin.utils;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class CheckoutUtils {

// 接口配置信息中的Token要一致

private static String token = "www_xxx_com";

/**

* 验证签名

*

* @param signature

* @param timestamp

* @param nonce

* @return

*/

public static boolean checkSignature(String signature, String timestamp, String nonce) {

String[] arr = new String[] { token, timestamp, nonce };

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

// Arrays.sort(arr);

sort(arr);

StringBuilder content = new StringBuilder();

for (int i = 0; i 

content.append(arr[i]);

}

MessageDigest md = null;

String tmpStr = null;

try {

md = MessageDigest.getInstance("SHA-1");

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

byte[] digest = md.digest(content.toString().getBytes());

tmpStr = byteToStr(digest);

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

content = null;

// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信

return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;

}

/**

* 将字节数组转换为十六进制字符串

*

* @param byteArray

* @return

*/

private static String byteToStr(byte[] byteArray) {

String strDigest = "";

for (int i = 0; i 

strDigest += byteToHexStr(byteArray[i]);

}

return strDigest;

}

/**

* 将字节转换为十六进制字符串

*

* @param mByte

* @return

*/

private static String byteToHexStr(byte mByte) {

char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

char[] tempArr = new char[2];

tempArr[0] = Digit[(mByte >>> 4) & 0X0F];

tempArr[1] = Digit[mByte & 0X0F];

String s = new String(tempArr);

return s;

}

/**

* @param a

*/

public static void sort(String a[]) {

for (int i = 0; i 

for (int j = i + 1; j 

if (a[j].compareTo(a[i]) 

String temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}}}}

 

 

以上代码仅供参考!