Home  >  Article  >  WeChat Applet  >  How to become a developer in WeChat development

How to become a developer in WeChat development

高洛峰
高洛峰Original
2017-02-28 09:32:121854browse

1. Three types of WeChat public accounts

Go to the URL: https://mp.weixin.qq.com When registering WeChat account, it is required We choose among the current three types of WeChat official accounts (subscription account, service account, enterprise account). Their differences are as follows:

How to become a developer in WeChat development

The ones that are used more Public accounts are subscription accounts and service accounts. Enterprise accounts are generally used by employees of the same company to communicate and collaborate. Enterprise accounts are not public and inaccessible to the outside world. Only employees of the company can access them; subscription accounts and service accounts are open to the public. Yes, anyone can follow. The subscription account is generally used to regularly push some graphic information to followers, and can also provide some other query services. The service account has WeChat payment function, so it is generally used for commercial purposes. For example, micro mall, micro auction, etc.

2. Turn on the WeChat developer function

After applying for a WeChat public account, if you need to develop on the WeChat platform, you must first To enable the WeChat developer function. To enable the WeChat developer function, you need to write verification code, and there must be an accessible URL. First log in to the WeChat public platform: https://mp.weixin.qq.com/

Click "Developer Center", check "I Agree", and click "Become a Developer":

How to become a developer in WeChat development

Come to the following page:

How to become a developer in WeChat development

Click "Configuration Items", there is a URL and Token that we need to fill in, the URL refers to the opening When using the developer function, the WeChat server will send a get request to the URL address. The parameters of the get request are:

1) Timestamp: timestamp

2) Random number: nonce

3) Random string: echostr

4) Summary information of the SHA-1 algorithm of a string composed of the values ​​of the above three parameters in dictionary order: signature

What we want to accomplish is: obtain the four parameters timestamp, nonce, echostr, and signature in the get request processing class of the filled-in URL, and then calculate their values ​​in the same way for the string composed of timestamp, nonce, and token in dictionary order. The summary information signature2 of the SHA-1 algorithm is then compared to see if the values ​​of signature2 and signature are the same. If they are the same, echostr is returned as is. If the WeChat server receives echostr, the developer function is successfully enabled. Note that the token here is the Token to be filled in above.

Note: If you have connected to Alipay, you will find that there is a small difference between the verification here and Alipay’s verification. Alipay verification The strings are sorted according to the dictionary order of the keys in the key-value pairs composed of parameters and parameter values, and the composition of the string is: key1=value1+ & + key2=value2; and the string that WeChat participates in verification is: value1 + value2 + ... does not include key, and is sorted according to the field order of value.

The corresponding java code is as follows:

Servlet that handles WeChat get requests:

/**
 * 微信请求处理的核心类
 */
public class CoreServlet extends HttpServlet 
{
	private static final long serialVersionUID = 4440739483644821986L;

	/**
	 * 请求校验(确认请求来自微信服务器)
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		// 微信服务端发来的加密签名
		String signature = request.getParameter("signature");
		// 时间戳
		String timestamp = request.getParameter("timestamp");
		// 随机数
		String nonce = request.getParameter("nonce");
		// 随机字符串
		String echostr = request.getParameter("echostr");
		
		PrintWriter out = response.getWriter();
		// 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
		if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			out.print(echostr);
		}
		out.close();
	
	}

Request verification tool class:

package com.sinaapp.wx.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

import com.sinaapp.wx.config.ParameterConfig;

/**
 * 请求校验工具类
 */
public class SignUtil {
	/**
	 * 校验签名
	 * 
	 * @param signature 微信加密签名
	 * @param timestamp 时间
	 * @param nonce 随机字符串
	 * @return
	 */
	public static boolean checkSignature(String signature, String timestamp, String nonce) {
		String token = ParameterConfig.WX_TOKEN;
		String[] paramArr = new String[] { token, timestamp, nonce };
		Arrays.sort(paramArr);	// 对token、timestamp和nonce按字典排序

		// 将排序后的结果拼接成字符串
		StringBuilder sb = new StringBuilder(paramArr[0]);
		sb.append(paramArr[1]);
		sb.append(paramArr[2]);

		String cipherText = null;
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			byte[] digest = md.digest(sb.toString().getBytes());	// 对接后的字符串进行sha1加密
			cipherText = byteToStr(digest);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		
		// 将加密后的字符串与微信服务器发来的签名signature进行对比
		return cipherText != null ? cipherText.equals(signature.toUpperCase()) : false;
	}

	/**
	 * 将字节数组转换为十六进制字符
	 * 
	 * @param byteArray
	 * @return
	 */
	private static String byteToStr(byte[] byteArray) {
		String strDigest = "";
		for (int i = 0; i < byteArray.length; i++) {
			strDigest += byteToHexStr(byteArray[i]);
		}
		return strDigest;
	}

	/**
	 * 将单个字节转换为十六进制字符
	 * 
	 * @param mByte
	 * @return
	 */
	private static String byteToHexStr(byte mByte) {
		char[] Digit = { &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39; };
		char[] tempArr = new char[2];
		tempArr[0] = Digit[(mByte >>> 4) & 0X0F];	// 取一个字节的高4位,然后获得其对应的十六进制字符
		tempArr[1] = Digit[mByte & 0X0F];	//  取一个字节的低4位,然后获得其对应的十六进制字符  

		return new String(tempArr);
		
	}
}

The value of String token = ParameterConfig.WX_TOKEN in the code must be consistent with the Token filled in above. Configure the servlet in web.xml:

  <servlet>
  	<servlet-name>coreServlet</servlet-name>
  	<servlet-class>com.sinaapp.wx.servlet.CoreServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>coreServlet</servlet-name>
  	<url-pattern>/coreServlet</url-pattern>
  </servlet-mapping>

Then put it under the URL that can be accessed from the public network, and then fill in the access address of the servlet in the above in the URL. Then click the "Submit" button. If everything is successful, the following prompt message will appear:

How to become a developer in WeChat development

At this point we have successfully turned on the developer function of WeChat and can perform WeChat developed. We have obtained the AppID and AppSecret, both of which are used in WeChat payment.

Note:

The development document address of WeChat is: http://mp.weixin.qq.com/wiki/home/index.html

The documentation for opening WeChat developers is as follows:

How to become a developer in WeChat development

For more articles related to WeChat development and how to become a developer, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn