ホームページ >WeChat アプレット >WeChatの開発 >WeChatが開発したWeChat jsapiとjavaの事前アクセス方法を詳しく解説

WeChatが開発したWeChat jsapiとjavaの事前アクセス方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-03-26 14:08:422289ブラウズ

パラメータ名

を生成するために必要です
http://www.php.cn/wiki/835.html" target="_blank">width="346" valign="top" style="word-break:break- all"> 説明
appId アプリIDは、WeChatパブリックアカウント管理プラットフォームにログインすることで照会できます
タイムスタンプ 署名付きタイムスタンプ
nonceStr 必須、ランダムな署名文字列を生成します
signature 必須、署名、付録 1 を参照

上記 form のパラメータについては、前の章ですでに明らかにしました、なぜフォームを作成するのかというと、WeChat jsapi に正常にアクセスしたい場合、これら 4 つのパラメータは資格情報であり、開くために 4 つの鍵が必要なドアに相当します。 。

以下の例では、Javaのサーブレットを使用してジャンプページを作成しています。 SpringMVCは使用されません。 リクエストされたパスをコントローラーのパスに変更できます。

WxJsAPIサーブレットコード:

署名アルゴリズムの生成 署名コード:

package com.test;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.test.util.JsapiTicketUtil;

import com.test.util .Sign;

public class WxJsAPIServlet extends HttpServlet {

/**

* オブジェクトのコンストラクター

     */

public WxJsAPIServlet() {

super();

}

/**

* サーブレットの破棄。 

     */

public void destroy() {

super.destroy(); // ログに「destroy」 文字列を入れるだけです

// ここにコードを入れてください

}

/**

* サーブレットの doGet メソッド。 

*

* このメソッドは、フォームのタグ値メソッドが get と等しい場合に呼び出されます。

*

* @param request cli によって送信されるリクエストサーバーに送信します

* @param レスポンスサーバーからクライアントに送信される応答

* @throws ServletException if エラーが発生した場合

* @throws IOException エラーが発生した場合

     */

public void doGet(HttpServletRequest request, Ht tpServletResponse 応答)

ServletException をスローします。 IOException {

System.out.println("wxJSAPI=====================");

String jsapi_ticket =JsapiTicketUtil.getJSApiTicket();;

M該当(&L) ;文字列,文字列> map = Sign.sign(jsapi_ticket, "http://www.vxzsk.com/weChat/wxJsAPIServlet");

String timestamp = map.get("timestamp");

String nonceStr = map.get("nonceStr ");

String signature = map.get("signature");

String appId = "应用Id";

request.setAttribute("appId", appId);

request.setAttribute("タイムスタンプ", timestamp);

request.setAttribute("signature",signature);

request.setAttribute("nonceStr", nonceStr);

request.getRequestDispatcher("jsapi/jsapi.jsp")。転送(リクエスト、応答);

}

/**

* サーブレットの doPost メソッド。 

*

*このメソッドは、フォームにタグ値メソッドがクライアントへの応答に等しいときに呼び出されます。 ;

No. 44 の行は、jsapi_ticket を生成するツール クラスのコードを以下に掲載します。

45行目 Signクラスのsignメソッドは、テーブルの最後の3つのパラメータをMapコレクションにカプセル化します。パラメータは要求されたサーブレット アドレスで、WeChat jsapi を呼び出す jsp インターフェイスにジャンプします。

49 行目 アプリケーション ID がわからない場合は、appId を自分のアプリケーション ID に置き換えます WeChatパブリックプラットフォーム管理センターにログインして確認できます。

サーブレットに対応する web.

xml

code

これは私の J2EE コンポーネント& lt;/説明>

<

display

-name>これは J2EE コンポーネントの表示名です

WxJsAPIServlet

com.test.WxJsAPIServlet < /サーブレットクラス&GT; -マッピング>

package com.test.util;

/***

* V 字型知識ベース www.vxzsk.com

*/

import java.util.UUID;

import java.util.Map;

import java.util.HashMap;

import java.util.Formatter;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.io.UnsupportedEncodingException;  

public class Sign {

public static Map Sign(String jsapi_ticket, String url) {

Map ret = new HashMap();

String nonce_str = create_nonce_str();

String timestamp = create_timestamp();

String string1;

文字列署名 = "";

//注意这里パラメータ名前必須全小写、かつ必須须有序

string1 = "jsapi_ticket=" + jsapi_ticket +

"&noncestr=" + nonce_str +

"×tamp=" + timestamp +

"&url=" + url;

システム.out.println(string1);

try

{

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

crypt。 reset();

crypt.update (string1.getBytes("UTF-8"));

signature = byteToHex(crypt.digest());

}

catch (NoSuchAlgorithmException e)

{

e.printStackTrace();

}

catch (UnsupportedEncodingException e)

{

e.printStackTrace();

ret.put("url", url) ;

ret.put("jsapi_ticket", jsapi_ticket);

ret .put("nonceStr", nonce_str);

ret.put("timestamp", timestamp);

ret.put("signature", signature);

return

ret; }

プライベート 静的String byteToHex(

final

byte[] hash) { Formatter formatter = new Formatter();

for (byte b : hash)

{

formatter.format("%02x", b);

}

Re String result = formatter.tostring ();

return Id (). Tostring ();

return Long.toString() System.CurrentTimeMillis() / 1000);

}

public static void action

またはコントローラー アドレスを指定すると、メソッドは jsapi

Map ret =sign(jsapi_ticket, url);

for (Map.Entryentry:ret.entrySet()) { を使用して JSP インターフェイスに直接ジャンプします。

System.out.println(entry.getKey() + ", " +entry.getValue());

sapi_ticket パラメータのツールクラス JsapiTicketUtil コード

package com.test.util;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import net.sf.json.JSONObject;

import com.test.weixin.TestAcessToken;

public class JsapiTicketUtil {

/* **

*/

public static String sendGet(String url, String charset, int timeout)

{

String result = "";

try

{

URL u = 新しい URL(url);

try

{

URLConnection conn = u.openConnection();

conn.connect();

conn.setConnectTimeout(timeout);

BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream() , charset));

String line="";

while

((line = in.

readLine

()) !=

null

)

{

結果= 結果+ 行; } in.close(); } catch (IOException e) {

return result;

}

}

catch (MalformedURLException e)

{

return result;

return result;

return result ;

}

public static String getAccessToken(){

String appid="你公众号基本设置里的应用id";//应用ID

Str ing appSecret="你公众号基本設置場所の应用密钥";//(应用密钥)

String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";

String backData=TestAcessToken.sendGet(url, "utf-8", 10000);

String accessToken = (String) JSONObject.fromObject(backData).get("access_token");  

return accessToken;

}

public static String getJSApiTicket(){

// トークンを取得

String acess_token= JsapiTicketUtil.getAccessToken();

String acess_token = ken+"&type= jsapi "; t string backdata = testacesstoken.sendget (urlstr," UTF-8 ", 10000); );

}

public static void main(String[] args) {

’ の ‐ ‐ ‐ ‐ ‐ ‐ jsapi のバウチャー チケットは: "+jsapiTicket);

}

}

上記のコードにはaccess_tokenを取得するメソッドがありますが、読者は独自のパラメータを変更できます

jsapi.jspコード

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

W3C//DTD HTML 4.01 Transitional//EN">

<head>

WeChat jsapi テスト - V 字型ナレッジ ベース

viewport" content="width=320.1,initial-scale=1, minimum-scale=1,maximum-scale=1,user-scalable=no">