WeChatプラットフォームのバックグラウンドアクセスに関して、役人はPHPの例のダウンロードを提供しました。 Javaのバックグラウンドアクセスの場合、現在、直接使用する完全なケースはありません。全員が使用できるデモのJavaバージョンを書きました。
1。準備
このプロジェクトはMavenで構築されており、Eclipseに直接インポートできます。 JDKのバージョンは1.8.0_111です。これらのアイテムは両方とも実際のニーズに応じて変更でき、最終的に戦争がサーバーにリリースされます。
2。実用的なドリル
操作の前に、最初に公式文書を読んで、全体的なアイデアプロセスを持っています。公式住所を参照してください
1.開発者モードに設定:
WeChat Public Platformの背景にログインした後、「関数」 - 「Advanced Functions」 - 「開発モード」をクリックして、開発モードに入ります。パブリックプラットフォームが「まだ開発者になっていない」と表示されている場合、「開発者になる」をクリックします
2。サーバーの構成に入力します:
「開発」 - 「基本的な構成」 - 「サーバー構成に入力」をクリックします。図1から3に示すように
図1
図2
図3
3。サンプルコード:
sha1.java
パッケージcom.dqiang.demo;パブリッククラスSHA1 {private final int [] abcde = {0x67452301、0xefcdab89、0x98badcfe、0x10325476、0xc3d2e1f0}; //要約データストレージアレイプライベートint [] digestint = new int [5]; //一時データストレージアレイプライベートint [] tmpdata = new int [80]; // Sha-1 Digest Private int process_input_bytes(byte [] bytedata){//定数System.ArrayCopy(abcde、0、digestint、0、abcde.length)の予備試験を計算します。 //入力バイト配列、サプリメント10および長さのデータバイト[] newByte = bytearrayformatdata(bytedata)をフォーマットします。 //データのために計算されたデータユニットの数を取得します。 // [int pos = 0; pos <mcount; pos ++){//各ユニットのデータを16の整数データに変換し、(int j = 0; j <16; j ++){tmpdata [j] = byteraytoint(jwbyte、(j]+(j * 64)のtmpdata」の最初の16アレイ要素に変換して、各ユニットの各データユニットを要約します。 } //要約計算関数encrypt(); } 20; } //フォーマット入力バイト配列形式プライベートバイト[] bytearrayformatdata(byte [] bytedata){//補完の数0 int zeros = 0; //補数t int size = 0後の桁数; //元のデータ長さint n = bytedata.length; // mod 64 int m = n%64後の残りの数字数; //添加された0の数と10(m <56){zeros = 55 -m; size = n -m + 64; } else if(m == 56){zeros = 63; size = n + 8 + 64; } else {zeros = 63 -m + 56; size =(n + 64)-M + 64; } // byte [] newbyte = new byte [size]を入力した後に生成された新しい配列のコンテンツ。 //配列System.ArrayCopyの前の部分をコピー(Bytedata、0、NewByte、0、n); //配列int l = nの追加データ要素の位置を取得します。 //補数1操作newbyte [l ++] =(byte)0x80; //(int i = 0; i <zeros; i ++){newbyte [l ++] =(byte)0x00; } //データの長さを計算すると、データの長さビットは合計で8バイト、長い整数n =(long)n * 8です。バイトh8 =(byte)(n&0xff);バイトh7 =(byte)((n >> 8)&0xff);バイトh6 =(byte)((n >> 16)&0xff);バイトh5 =(byte)((n >> 24)&0xff);バイトh4 =(byte)((n >> 32)&0xff);バイトh3 =(byte)((n >> 16)&0xff);バイトh5 =(byte)((n >> 24)&0xff);バイトh4 =(byte)((n >> 32)&0xff);バイトh3 =(byte)((n >> 40)&0xff); byte h2 =(byte)((n >> 48)&0xff);バイトh1 =(byte)(n >> 56); newByte [l ++] = h1; newByte [l ++] = H2; newByte [l ++] = H3; newByte [l ++] = H4; newByte [l ++] = h5; newByte [l ++] = H6; newByte [l ++] = H7; newByte [l ++] = h8; NewByteを返します。 } private int f1(int x、int y、int z){return(x&y)| (〜x&z); } private int f2(int x、int y、int z){return x ^ y ^ z; } private int f3(int x、int y、int z){return(x&y)| (x&z)| (Y&Z); } private int f4(int x、int y){return(x << y)| x >>>(32 -y); } //ユニットの概要計算関数private void encrypt(){for(int i = 16; i <= 79; i ++){tmpdata [i] = f4(tmpdata [i -3] ^ tmpdata [i -8] ^ tmpdata [i -14] ^ tmpdata [i -16]、1); } int [] tmpabcde = new int [5]; for(int i1 = 0; i1 <tmpabcde.length; i1 ++){tmpabcde [i1] = digestint [i1]; } for(int j = 0; j <= 19; j ++){int tmp = f4(tmpabcde [0]、5) + f1(tmpabcde [1]、tmpabcde [2]、tmpabcde [3]) + tmpabcde [4] + tmpdata [j] + 0x5999; tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4(tmpabcde [1]、30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } for(int k = 20; k <= 39; k ++){int tmp = f4(tmpabcde [0]、5) + f2(tmpabcde [1]、tmpabcde [2]、tmpabcde [3]) + tmpabcde [4] + tmpdata [k] + 0x69ee tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4(tmpabcde [1]、30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } for(int l = 40; l <= 59; l ++){int tmp = f4(tmpabcde [0]、5) + f3(tmpabcde [1]、tmpabcde [2]、tmpabcde [3]) + tmpabcde [4] + tmpdata [l] tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4(tmpabcde [1]、30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } for(int m = 60; m <= 79; m ++){int tmp = f4(tmpabcde [0]、5) + f2(tmpabcde [1]、tmpabcde [2]、tmpabcde [3]) + tmpabcde [4] + tmpdata [m] + 0xca62ca62ca62ca62ca62 tmpabcde [4] = tmpabcde [3]; tmpabcde [3] = tmpabcde [2]; tmpabcde [2] = f4(tmpabcde [1]、30); tmpabcde [1] = tmpabcde [0]; tmpabcde [0] = tmp; } for(int i2 = 0; i2 <tmpabcde.length; i2 ++){digestint [i2] = digestint [i2]+tmpabcde [i2]; } for(int n = 0; n <tmpdata.length; n ++){tmpdata [n] = 0; }} // 4バイト配列を整数プライベートint bytearraytoint(byte [] bytedata、int i){return((bytedata [i]&0xff)<< 24)| ((bytedata [i + 1]&0xff)<< 16)| ((bytedata [i + 2]&0xff)<< 8)| (bytedata [i + 3]&0xff); } //整数を4バイトアレイプライベートボイドinttobytearray(int intvalue、byte [] bytedata、int i){bytedata [i] =(byte)(intvalue >>> 24); bytedata [i + 1] =(byte)(intvalue >>> 16); bytedata [i + 2] =(byte)(intvalue >>> 8); bytedata [i + 3] =(byte)intvalue; } //バイトをヘキサデシマルストリングプライベート静的文字列bytetohexstring(byte ib){char [] digit = {'0' '、' 1、 '2' 3 '、' 4 '、' 5 '、' 6 '、' 7 '、' 8 '、' 9 '、' ' char [] ob = new char [2]; ob [0] = digit [(ib >>> 4)&0x0f]; ob [1] = digit [ib&0x0f];文字列s = new String(ob); s; } //バイトアレイを160個に変換します。 for(int i = 0; i <bytearray.length; i ++){strdigest+= bytetohexstring(bytearray [i]); } strdigestを返します。 } // sha-1ダイジェストを計算し、対応するバイト配列public byte [] getdigestofbytes(byte [] bytedata){process_input_bytes(bytedata); byte [] digest = new byte [20]; for(int i = 0; i <digestint.length; i ++){inttobytearray(digestint [i]、digest、i * 4); }ダイジェストを返します。 } // SHA-1ダイジェストを計算し、対応するヘキサデシマル文字列public string getDigestofstring(byte [] bytedata){return bytearraytohexstring(getDigestofbytes(bytedata)); } public static void main(string [] args){string data = "tokendemo"; System.out.println(data); String Digest = new Sha1()。getDigestofString(data.getBytes()); system.out.println(digest); }}wechatjavatokenvalidate.java
パッケージcom.dqiang.demo; java.io.ioexception; Import java.util.arrays; Import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; Import javax.servlet.http.httpservletrequest; Import javax.http.httpservletreqest; javax.servlet.http.httpservletResponse; /** * @author stemq * @version v1.0 *ブログ:http://blog.csdn.net/stemq * web:www.dqiang.com */public class wechatjavatokenvalidate httpservlet {private static static satic satial serialversionuid = -676198293384719310l; / *たとえば * url(サーバーアドレス)http://weixin.xxxx.com/wechatjavatokenvalidate/wechattoken * token(token)tokenchat * */private string token = "tokenchat"; //実際の状況に従ってトークンを自分で定義し、@Override Protected void doget(httpservletrequestリクエスト、httpservletresponse応答)と同じサーバー構成トークン(トークン)に入力します(トークン)servletexception、ioexception {// wechat cencreption signature signature = request.getparameter "); //ランダム文字列string echostr = request.getParameter( "echostr"); //タイムスタンプ文字列タイムスタンプ= request.getParameter( "Timestamp"); //乱数文字列nonce = request.getParameter( "nonce"); string [] str = {token、timestamp、nonce}; //辞書並べ替えarrays.sort(str); string bigstr = str [0] + str [1] + str [2]; // sha1暗号化String Digest = new Sha1()。getDigestofString(bigstr.getBytes())。tolowercase(); // weChatへのリクエストを確認するif(digest.equals(signature)){respons.getWriter()。print(echostr); }}}3。ソースコードのダウンロード:wechatjavatokenvalidate
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。