WeChat開発で開発者になる方法

高洛峰
リリース: 2017-02-28 09:32:12
オリジナル
1851 人が閲覧しました

1. 3 種類の WeChat 公開アカウント

ウェブサイトにアクセスします: https://mp.weixin.qq.com WeChat に登録する際には、3 種類の WeChat 公開アカウント (サブスクリプション) を登録する必要があります。アカウント、サービス アカウント、エンタープライズ アカウント) の違いは次のとおりです:

WeChat開発で開発者になる方法

最も一般的に使用されるパブリック アカウントは、サブスクリプション アカウントであり、エンタープライズ アカウントは通常、同じ会社の従業員によって通信とコラボレーションに使用されます。アカウント アカウントは公開されておらず、外部からアクセスできません。また、会社の従業員のみがアクセスできます。サブスクリプション アカウントとサービス アカウントは公開されており、誰でもフォローできます。サブスクリプション アカウントは通常、フォロワーにグラフィック情報を定期的にプッシュするために使用され、サービス アカウントには WeChat 支払い機能があるため、通常は商業目的で使用されます。例えば、マイクロモール、マイクロオークションなど。

2. WeChat開発者機能をオンにする

WeChat公式アカウントを申請した後、WeChatプラットフォームで開発する必要がある場合は、まずWeChat開発者機能をオンにする必要があります。 WeChat 開発者機能を有効にするには、確認コードを記述する必要があり、アクセス可能な URL が必要です。まず、WeChat パブリック プラットフォームにログインします: https://mp.weixin.qq.com/

[開発者センター] をクリックし、[同意する] にチェックを入れ、[開発者になる] をクリックします:

WeChat開発で開発者になる方法

次のページ:

WeChat開発で開発者になる方法

「構成項目」をクリックします。ここには、入力するための URL とトークンが含まれています。URL は、開発者機能がオンになっている場合に、WeChat サーバーが URL のアドレスに get リクエストを送信することを意味します。 get リクエストのパラメーターは次のとおりです: :

1) タイムスタンプ: timestamp

2) 乱数: nonce

3) ランダムな文字列: echostr

4) 値で構成される文字列の SHA-1 アルゴリズム上記の 3 つのパラメータを辞書順に並べたもの 要約情報: 署名

私たちが実現したいことは、埋め込まれた URL の get リクエスト処理クラスでタイムスタンプ、ノンス、エコーストラ、署名の 4 つのパラメータを取得し、次を使用することです。タイムスタンプ、ノンス、トークンの辞書を作成する同じメソッド。文字列は SHA-1 アルゴリズムの概要情報の署名 2 を計算し、署名 2 と署名の値を比較して、それらが同じかどうかを確認します。 、echostr がそのまま返されます。WeChat サーバーが echostr を受信すると、開発者機能は正常に有効になります。ここでのトークンは上記で入力するトークンであることに注意してください

注: Alipay にアクセスしたことがある場合は、ここでの検証と Alipay の検証との間にはわずかな違いがあることがわかります。パラメータとパラメータ値で構成されるキーと値のペアのキーの辞書の順序に従って、文字列の構成は次のとおりです: key1=value1+ & + key2=value2、WeChat が検証に参加する文字列は次のとおりです: value1 + value2 + ... にはキーは含まれず、value のフィールド順序に従ってソートされます。

対応する Java コードは次のとおりです:

WeChat の get リクエストを処理するサーブレット:

/**
 * 微信请求处理的核心类
 */
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上記と同じである必要があります。入力されたトークンは一貫しています。 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>
ログイン後にコピー

次に、パブリック ネットワークからアクセスできる URL の下に配置し、上記の URL にサーブレットのアクセス アドレスを入力します。次に、「送信」ボタンをクリックします。すべてが成功すると、次のプロンプトメッセージが表示されます:

WeChat開発で開発者になる方法

この時点で、WeChat の開発者機能が正常に有効になり、WeChat を開発できるようになります。 WeChat 決済で使用される AppID と AppSecret を取得しました。

注:

WeChat 開発ドキュメントのアドレスは次のとおりです: http://mp.weixin.qq.com/wiki/home/index.html

次のように WeChat 開発ドキュメントを開きます:

WeChat開発で開発者になる方法

その他の記事についてマルチ WeChat 開発と開発者になる方法に関連する場合は、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート