搜尋
首頁微信小程式微信開發微信開發如何成為開發者

微信開發如何成為開發者

Feb 28, 2017 am 09:32 AM
微信開發

1. 微信公眾號的三種類型

到網址: https://mp.weixin.qq.com 註冊微訊號時,要求我們在目前微信公眾號的三種類型(訂閱號、服務號、企業號)中進行選中,他們的區別如下所示:

微信開發如何成為開發者

使用得多的公眾號是訂閱號碼和服務號,企業號一般是同一個公司的員工交流協作使用的,企業號對外是不公開的,不可訪問的,只有企業的員工可以訪問;訂閱號和服務號是對外公開的,任何人可以關注。而訂閱號碼一般用於向追蹤者定期推送一些圖文訊息,也可以提供一些其他的查詢類的服務,而服務號碼具有微信支付功能,所以一般用於商業用途。例如微商城,微拍賣等等。

2.開啟微信開發者功能

#在申請了微信公眾號之後,如果需要在微信平台進行開發,則必須先若要開啟微信開發者功能。開啟微信開發者功能,要寫驗證程式碼,而且必須要有可以存取的網址。首先登入微信公眾平台:https://mp.weixin.qq.com/

點擊“開發者中心”,勾上“我同意”,點擊“成為開發者”:

微信開發如何成為開發者

來到下面的頁面:

微信開發如何成為開發者

點擊“設定項”,其中有URL和Token要我們填寫,URL是指開啟開發者功能時,微信服務端會向該URL的位址發送get請求,get請求的參數有:

1)時間戳記:timestamp

2)隨機數:nonce

3)隨機字串:echostr

4)以及上面三個參數的值以字典順序組成的字串的SHA-1 演算法的摘要資訊:signature

我們要完成的是:在填寫的URL的get請求處理類別中獲得timestamp,nonce,echostr,signature四個參數,然後以同樣的方式,對timestamp,nonce,token一字典順序組成的字串計算它們的SHA-1 演算法的摘要資訊signature2,然後比較signature2 和signature的值是否一樣,如果一樣的話就原樣回傳echostr,微信伺服器收到echostr ,則開發者功能開啟成功。注意這裡的token就是上面要填寫的Token.

註:如果你做過支付寶的接入,那麼會發現這裡的校驗和支付寶的校驗有個小區別,支付寶校驗的字串是依照參數和參數的值組成的鍵值對中的key的字典順序排序的,並且字串的組成是:key1=value1+ & + key2=value2;而微信參與校驗的字串為: value1 + value2 + ... 沒有包含key,並且是按照value的欄位順序排序的。

對應的java程式碼如下:

處理微信get請求的servlet:

#
/**
 * 微信请求处理的核心类
 */
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();
	
	}

 請求校驗工具類別:

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);
		
	}
}

 程式碼中String token = ParameterConfig.WX_TOKEN的值必須和上面填寫的Token一致。在web.xml中設定該servlet:

  <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>

 然後放入公網可以存取的網址下面,然後將該servlet的存取位址填入上面的URL中。然後點選「提交」按鈕,如果一切成功就會有下面的提示訊息:

微信開發如何成為開發者

#到這裡我們成功的開啟了微信的開發者功能,可以進行微信的開發了。我們拿到了AppID, AppSecret,這兩個在微信支付中都要使用。

 

附註:

微信的開發文件位址為:http://mp.weixin.qq.com/wiki/home/index.html

開啟微信開發者的文件如下:

微信開發如何成為開發者

更多微信開發之如何成為開發者相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。