1。イントラネットマッピング
WeChat EnterpriseアカウントのURLはドメイン名アクセスをサポートしているため、ピーナッツシェルを登録してイントラネットの浸透を行う必要があると推定されています(無料バージョンを購入するには16元コストがかかり、購入後に翌日にドメイン名を追加できます)
2。WECHATエンタープライズアカウント
WeChatエンタープライズアカウントを登録:https://qy.weixin.qq.com/(チームを選択してください、チームは認定を必要としません)
連絡先:新しい組織を作成 - >メンバーをフォローします
エンタープライズアカウント - >アプリケーションセンター - >新しいアプリケーション - >メッセージアプリケーション - >モード選択(コールバックモード) - > WECHATメッセージ転送をオンにします、
コールバックモードの説明:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F
コールバックモードの暗号化と復号化コード: http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5 %AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BF%94%E5%9B%9E%E7%A0%81
図1に示すように:
カスタムメニュー:開発アプリケーションのリクエストパスを図2に示します。
設定 - >関数設定 - >許可管理 - >新しい管理グループ - >アプリケーション許可(secret)
3.ジャージを使用して、Webサービスサービスを開発します
3.1クラスのトークン、ランダムパスワード43桁、会社Corpid、Secretの定義
3.2検証方法
/ * * ------------------------------------エンタープライズがコールバックモードをオンにすると、エンタープライズ番号は検証URLにGETリクエストを送信します *検証をクリックすると、エンタープライズが同様のリクエストを受信すると、get * /cgi-bin /wxpush?msg_signature = 5c45ff5e21c57e6ad56ad56ad56bac887588b19b19b19fd989fd989fd989fd ×tamp * = 1409659589&nonce = 263014780&echostr = p9nazczydtytweshep1vc5x9xho% * 2FQYX3ZPB4YKA9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HTTP/1.1ホスト:Qy.Weixin.QQ.com *この要求を含む必要がある場合、cy.weixin.qq.com * (MSG_SIGNATURE)、タイムスタンプ(タイムスタンプ)、乱数文字列(NonCe *)、およびパブリックプラットフォームによってプッシュされたランダムな暗号化された文字列(echostr)。このステップでのURLデコードに注意してください。 2.メッセージ本文の署名の正しさを確認します3。ステップ2。3は、パブリックプラットフォームによって提供されるライブラリ関数VerifyURLを使用して実装できます。 *// ** * callback url、wechatはこの方法を検証のために呼び出します * * @return */ @get @get( "station")public string verify(){string msgsignature = request.getParameter( "msg_signature");文字列タイムスタンプ= request.getParameter( "Timestamp");文字列nonce = request.getParameter( "nonce"); System.out.println(Timestamp + "" + nonce); string echostr = request.getParameter( "echostr");文字列sechostr = null; try {sechostr = wxcpt.verifyurl(msgsignature、timestamp、nonce、echostr); } catch(Exception e){e.printstacktrace(); //検証urlが失敗した場合、エラーの理由について例外を参照してください} return sechostr; }3.3ユーザー情報を受け取り、それを復号化します
/ * * -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * <tousername> <![cdata [wx5823bf96d3bd56c7]]> </tousername *> <encrypt> <![cdata [rypevhkd8qqkfhvq6qleeb4j58tipdvo * +rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwfrf0qadhhhgd3qczcupj911l3vg3w/ * syyvujts3tuuksuxxaccas0qhxchrrytt * +6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6 * +KDZ +HMZFJYUR +LTWGC2HGF5GSIJFF0EKUNXZIQATP7PF5MZXZ3IZUN1S4ZG4LUMNVW2R * +KKKIW * +KKIW * + +3iQH03V +BCA9NMELNQBSF6TIWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0 * +rUPA3K222NCX4XXZS9O0MBH27BO6BPLENPLENPLENPLENPSPLENPSER +/uh9ksnly6bhcmju9p8g7m3fvkn28h3kdya5pl */t8z1ptdave0lxdq2yyyh2uyyh2uyyh2uyyh2uyyyh2uyyyh2uypighbzzis2pdbs8r07+qn+e7q ==]]]> </encrypt> EnterpriseはPOSTリクエストを受信します。 *1。URL上のパラメーターを解析する必要があります。これには、メッセージ本文の署名(MSG_SIGNATURE)、TIMESTAMP(Timestamp)、および乱数文字列(NONCE) * 2を含みます。メッセージ本文の署名の正しさを確認します。 * 3。要求されたデータはXMLによって解析され、<mincrypt>タグのコンテンツを復号化します。復号化されたプレーンテキストは、ユーザーの返信メッセージのプレーンテキストです。プレーンテキスト形式の公式ドキュメントを参照してください*ステップ2および3は、パブリックプラットフォームが提供するライブラリ関数Decryptmsgを使用して実装できます。 */ @post @path( "station")public string Receivemsg(string reqdata){string msgsignature = request.getParameter( "msg_signature");文字列タイムスタンプ= request.getParameter( "Timestamp");文字列nonce = request.getParameter( "nonce"); // postで要求されたciphertextデータ// string sreqdata = // "<xml> <tousername> <![cdata [wx5823bf96d3bd56c7]]> </tousername> <encrypt> <![cd ata [rypevhkd8qkfhvq6qleeb4j58tipdvo+rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwf rf0qadhhhgd3qczcdcupj911l3vg3w/syyvujts3tuuksuxxaccas0qhxchrryt66wispglyl42a M6A8DTT+6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6+KDZ+HMZFJYUR+LTWGC2HGF5GS ijff0ekunxziqatp7pf5mzxz3izoun1s4zg4lumnvw2r+kqckiw+3iqh03v+bca9nmelnqbsf6t iwsrxjb3lavgucallcrw8v2t9el4ehzjwrquax5wlvmns0+rupa3k22ncx4xzzs9o0mbh27bo6bp nelzps+/uh9ksnly6bhcmju9p8g73fvkn28h3kdya5pl/t8z1ptdave0lxdq2yoyyh2uypighbzzis2pdbs8r07+qn+e7q ==]] try {string smsg = wxcpt.decryptmsg(msgsignature、timestamp、nonce、reqdata); // documentbuilderfactory dbf = documentbuilderfactory.newinstance()を処理するためのplantext xmlタグのコンテンツを解析します。 documentBuilder db = dbf.newdocumentbuilder(); StringReader sr = new StringReader(SMSG); inputSource is = new inputSource(sr); document document = db.parse(is);要素root = document.getDocumentElement(); nodeList nodeList1 = root.getElementsByTagname( "content"); if(nodeList1.item(0)== null) "ok"を返します。 string content = nodelist1.item(0).getTextContent(); system.out.println( "content:" + content); } catch(Exception e){e.printstacktrace(); //復号化が失敗した場合、障害について例外を確認してください} return "ok"; }3.4 WeChatに情報を送信します
設定 - >関数設定 - >許可管理 - >新しい管理グループを作成します。秘密を得る
/** *このメソッドは、あらゆるタイプのメッセージを送信できます * * @param msgtype *テキスト|画像|ビデオ|ファイル| news * @param touser *メンバーIDリスト(メッセージ受信者、複数の受信者が '|'で区切られ、最大1,000がサポートされています)。特別なケース:@allとして指定されている * @param topy *部門IDリストは、エンタープライズアプリケーションに従うすべてのメンバーに送信します。複数のレシピエントが「|」で分離され、最大100個がサポートされています。 touserが@all * @param totag *タグIDリストの場合、このパラメーターを無視して、複数の受信者が '|'で分離されます。 touserが @all * @param content * msgtype =テキスト、テキストメッセージコンテンツ * @param mediaid *の場合は @all * @param content *の場合、このパラメーターを無視します。 @param picurl * msgtype = news、image path * @param safe *が機密メッセージであるかどうかを示します。 string access_token = getAccessToken(); //文字列要求文字列string action = create_session_url + access_token; //メッセージを送信するメッセージ要求json stringbuffer sb = new StringBuffer(); sb.append( "{"); sb.append( "/" touser/":" + "/" " + touser +"/"、"); sb.append( "/" toparty/":" + "/" " + toparty +"/"、"); sb.append( "/" totag/":" + "/" " + totag +"/"、"); if(msgtype.equals( "text")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" text/":" + "{"); sb.append( "/" content/":" + "/" " + content +"/""); sb.append( "}"); } else if(msgtype.equals( "image")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" image/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "Voice")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.Append( "/" Voice/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "video")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" video/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaId +"/"、"); sb.append( "/" title/":" + "/" " + title +"/"、"); sb.append( "/" description/":" + "/" " +説明 +"/""); sb.append( "}"); } else if(msgtype.equals( "file")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" file/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "news")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" news/":" + "{"); sb.append( "/" article/":" + "["); sb.append( "{"); sb.append( "/" title/":" + "/" " + title +"/"、"); sb.append( "/" description/":" + "/" " + description +"/"、"); sb.append( "/" url/":" + "/" " + url +"/"、"); sb.append( "/" picurl/":" + "/" " + picurl +"/""); sb.append( "}"); sb.append( "]"); sb.append( "}"); } sb.append( "、/" safe/":" + "/" " + safe +"/"、"); sb.append( "/" agentId/":" + "/" " + 1 +"/"、"); sb.append( "/" debug/":" + "/" " +" 1 " +"/""); sb.append( "}"); string json = sb.toString(); {url = new url(action); httpsurlconnection http =(httpsurlconnection)url.openconnection(); http.setRequestMethod( "post"); http.setRequestProperty( "content-type"、 "application/json; charset = utf-8"); http.setdooutput(true); http.setdoinput(true); System.setProperty( "sun.net.client.defaultconnecttimeout"、 "30000"); // //接続タイムアウト30秒system.setProperty( "sun.net.client.defaultreadtimeout"、 "30000"); // //タイムアウト30秒を読み取りますhttp.connect(); outputStream os = http.getOutputStream(); os.write(json.getBytes( "utf-8")); // pass in parameter inputstream is = http.getInputStream(); int size = is.abailable(); byte [] jsonbytes = new byte [size]; is.read(jsonbytes); string result = new String(jsonbytes、 "utf-8"); system.out.println( "Request Returns results:" + result); os.flush(); os.close(); } catch(Exception e){e.printstacktrace(); }} //インターフェイスアクセスコードを取得しますパブリック文字列getAccesStoken(){httpclient client = new httpclient(); PostMethod post = new postmethod(access_token_url); post.releaseconnection(); post.setRequestheader( "content-type"、 "application/x-www-form-urlencoded; charset = utf-8"); namevaluepair [] param = {new NameValuePair( "corpid"、corpid)、new nameValuePair( "corpsecret"、secret)}; // Cookieエラーが報告されるのを防ぐポリシーを設定します。Defaulthttpparamss.getDefaultParams()。setParameter( "http.protocol.cookie-policy"、cookiepolicy.browser_compatibility); //投稿投稿投稿の投稿のパラメーターを設定します。文字列結果= ""; try {client.executemethod(post); result = new String(post.getResponseBodyAsstring()。getBytes( "gbk")); } catch(ioexception e){e.printstacktrace(); } //データをjson jsonobject jasonobjectに変換します。 jasonobject = jsonobject.fromobject(result); result =(string)jasonobject.get( "Access_token"); post.releaseconnection(); system.out.println(result);返品結果; } public static void main(string [] args){StationResource wechat = new StationResource(); // wechat.sendwechatmsgtext( "@all"、 "2"、 ""、 "情報センター通知"、 "0"); wechat.sendwechatmsg( "news"、 "@all"、 ""、 ""、 "test senmsg"、 ""、 "Tested"、 "allow tested"、 "http://www.baidu.com"、 "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg"、 "0"); }4。開発が完了しました。このクラスは、管理するにはwebx.xmlで休むために追加する必要があります
<! - Restful Support-> <! - WebSerivceサービス。サービスが追加されている場合、サービスのパッケージパスをパラメーション値に追加する必要があります - > <Servlet> <Servlet-Name> Jax-RS REST SERVELT </SERVET-NAME> <SERVELT-CLASS> com.sun.jersey.spi.container.servlet.servletcontainer </servlet-> <init-param> <param-name> com.sun.jersey.config.property.packages </param-name> <param-value> com.base.pf.restful </param-value> </init-s-startup> 2 </load-on-startup> </load-on-startup> </servlet> <servlet </servlet </servlet> <url-pattern>/ret/*</url-pattern> </servlet-mapping>
5。完全なコードが完了しました
パッケージcom.base.pf.restful; java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.outputStreamをインポートします。 java.io.stringreaderをインポートします。 java.net.urlをインポートします。 javax.net.ssl.httpsurlconnectionをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 javax.ws.rs.getをインポートします。 javax.ws.rs.postをインポートします。 javax.ws.rs.pathをインポートします。 javax.ws.rs.core.contextをインポートします。 javax.xml.parsers.documentbuilderをインポートします。 javax.xml.parsers.documentbuilderfactoryをインポートします。 net.sf.json.jsonobjectをインポートします。 Import org.apache.commons.httpclient.httpclient; org.apache.commons.httpclient.namevaluepairをインポートします。 org.apache.commons.httpclient.cookiepolicyをインポートします。 org.apache.commons.httpclient.methods.postmethodをインポートします。 org.apache.commons.httpclient.params.defaulthtpparamsをインポートします。 Import org.w3c.dom.document; Import org.w3c.dom.element; Import org.w3c.dom.nodelist; Import org.xml.sax.inputsource; com.qq.weixin.mp.aes.aesexceptionをインポートします。 com.qq.weixin.mp.aes.wxbizmsgcryptをインポートします。 /** * Wechat Enterpriseアカウント開発 * * @Author Zhen.l * * */ @ @@Path( "WX")Public Class StationResource {// http://hichinamobile.xicp.net/security/rest/wx // https://qy.weixin.q.co.qq. //エンタープライズ番号 - >アプリケーションセンター - >新しいアプリケーション - >メッセージタイプアプリケーションprivate string agentid = "1"; //エンタープライズ番号 - >アプリケーションセンター - >アプリケーションをクリック - >アプリケーションIDプライベート文字列encodingAeskey = "nt6zwtvflynxohfoggozwdjpagefsv8ln5cneyw7mwl"; //エンタープライズ番号 - >アプリケーションセンター - >新しいアプリケーション - >メッセージタイプアプリケーションプライベート文字列corpid = "wxe49318eb604cf00b"; //エンタープライズ番号 - >設定 - >エンタープライズ番号情報 - >アカウント情報プライベート文字列secret = "m-yfkmgl_kxbvetginzh3rqwbz4xb6mfeqxxlk77mkpxzenfdyq-ugerxduf8rel"; //エンタープライズ番号 - >設定 - > functional settings->許可管理@context httpservletrequest request; @context httpservletResponse応答。 wxbizmsgcrypt wxcpt = null; public StationResource(){try {wxcpt = new wxbizmsgcrypt(token、encodingaeskey、corpid); } catch(aesexception e){e.printstacktrace(); }} //アクセスコードを取得しますprivate final final static string access_token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"; //セッションを作成するprivate url private final static string create_session_url = "https://qyapi.weixin.qc.com/cgi-bin/message/send?access_token="; //インターフェイスアクセスコードを取得パブリック文字列getAccesToken(){httpclient client = new httpclient(); PostMethod post = new postmethod(access_token_url); post.releaseconnection(); post.setRequestheader( "content-type"、 "application/x-www-form-urlencoded; charset = utf-8"); namevaluepair [] param = {new NameValuePair( "corpid"、corpid)、new nameValuePair( "corpsecret"、secret)}; // Cookieエラーが報告されるのを防ぐポリシーを設定します。Defaulthttpparamss.getDefaultParams()。setParameter( "http.protocol.cookie-policy"、cookiepolicy.browser_compatibility); //投稿投稿の投稿のパラメーターを設定します。SetRequestBody(PARAM);文字列結果= ""; try {client.executemethod(post); result = new String(post.getResponseBodyAsstring()。getBytes( "gbk")); } catch(ioexception e){e.printstacktrace(); } //データをjson jsonobject jasonobjectに変換します。 jasonobject = jsonobject.fromobject(result); result =(string)jasonobject.get( "Access_token"); post.releaseconnection(); system.out.println(result);返品結果; } / * * -----------------------------------------------------------------------------------------------------エンタープライズ番号は検証URLにGETリクエストを送信します *検証をクリックすると、エンタープライズが同様のリクエストを受け取るとします。 ×tamp * = 1409659589&nonce = 263014780&echostr = p9nazczydtytweshep1vc5x9xho% * 2FQYX3ZPB4YKA9SKLD1DSH3IYT3TP3ZNDTP%2B4RPCS8TGAE7OABO%2BFZXVNAQQ%3D%3D * HTTP/1.1ホスト:Qy.Weixin.QQ.com *この要求を含む必要がある場合、cy.weixin.qq.com * (MSG_SIGNATURE)、タイムスタンプ(タイムスタンプ)、および乱数文字列(NonCe *)およびランダムな暗号化された文字列(echostr)がパブリックプラットフォームによって押されます。このステップでのURLデコードに注意してください。 2.メッセージ本文の署名の正しさを確認します3。ステップ2。3は、パブリックプラットフォームによって提供されるライブラリ関数VerifyURLを使用して実装できます。 *// ** * callback url、wechatはこの方法を検証のために呼び出します * * @return */ @get @get( "station")public string verify(){string msgsignature = request.getParameter( "msg_signature");文字列タイムスタンプ= request.getParameter( "Timestamp");文字列nonce = request.getParameter( "nonce"); System.out.println(Timestamp + "" + nonce); string echostr = request.getParameter( "echostr");文字列sechostr = null; try {sechostr = wxcpt.verifyurl(msgsignature、timestamp、nonce、echostr); } catch(Exception e){e.printstacktrace(); // urlが失敗したことを確認してください。エラーの理由について例外を確認してください} return sechostr; } /* * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- MSG_SIGNATURE = 477715D11CDB4164915DEBCBA66CB864D751F3E6 *×TAMP = 1409659813&NONCE = 1372623149 HTTP/1.1 HOST:QY.WEIXIN.QQCOM * CONTANT-LENGT-613 <XML> * <tousername> <![cdata [wx5823bf96d3bd56c7]]> </tousername *> <encrypt> <![cdata [rypevhkd8qqkfhvq6qleeb4j58tipdvo * +rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwfrf0qadhhhgd3qczcupj911l3vg3w/ * syyvujts3tuuksuxxaccas0qhxchrrytt * +6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6 * +KDZ +HMZFJYUR +LTWGC2HGF5GSIJFF0EKUNXZIQATP7PF5MZXZ3IZUN1S4ZG4LUMNVW2R * +KKKIW * +KKIW * + +3iQH03V +BCA9NMELNQBSF6TIWSRXJB3LAVGUCALLCRW8V2T9EL4EHZJWRQUAX5WLVMNS0 * +rUPA3K222NCX4XXZS9O0MBH27BO6BPLENPLENPLENPLENPSPLENPSER +/uh9ksnly6bhcmju9p8g7m3fvkn28h3kdya5pl */t8z1ptdave0lxdq2yyyh2uyyh2uyyh2uyyh2uyyyh2uyyyh2uypighbzzis2pdbs8r07+qn+e7q ==]]]> </encrypt> EnterpriseはPOSTリクエストを受信します。 *1。URL上のパラメーターを解析する必要があります。これには、メッセージ本文の署名(MSG_SIGNATURE)、TIMESTAMP(Timestamp)、および乱数文字列(NONCE) * 2を含みます。メッセージ本文の署名の正しさを確認します。 * 3。要求されたデータはXMLによって解析され、<mincrypt>タグのコンテンツを復号化します。復号化されたプレーンテキストは、ユーザーの返信メッセージのプレーンテキストです。プレーンテキスト形式の公式ドキュメントを参照してください*ステップ2および3は、パブリックプラットフォームが提供するライブラリ関数Decryptmsgを使用して実装できます。 */ @post @path( "station")public string Receivemsg(string reqdata){string msgsignature = request.getParameter( "msg_signature");文字列タイムスタンプ= request.getParameter( "Timestamp");文字列nonce = request.getParameter( "nonce"); // postで要求されたciphertextデータ// string sreqdata = // "<xml> <tousername> <![cdata [wx5823bf96d3bd56c7]]> </tousername> <encrypt> <![cd ata [rypevhkd8qkfhvq6qleeb4j58tipdvo+rtk1i9qca6am/wvqnlsv5zepeusuix5l5x/0lwf rf0qadhhhgd3qczcdcupj911l3vg3w/syyvujts3tuuksuxxaccas0qhxchrryt66wispglyl42a M6A8DTT+6K4ASKNMPJ48KZJS8QLJVD4XGPUE06DODNLXAUHZM6+KDZ+HMZFJYUR+LTWGC2HGF5GS ijff0ekunxziqatp7pf5mzxz3izoun1s4zg4lumnvw2r+kqckiw+3iqh03v+bca9nmelnqbsf6t iwsrxjb3lavgucallcrw8v2t9el4ehzjwrquax5wlvmns0+rupa3k22ncx4xzzs9o0mbh27bo6bp nelzps+/uh9ksnly6bhcmju9p8g73fvkn28h3kdya5pl/t8z1ptdave0lxdq2yoyyh2uypighbzzis2pdbs8r07+qn+e7q ==]] try {string smsg = wxcpt.decryptmsg(msgsignature、timestamp、nonce、reqdata); // documentbuilderfactory dbf = documentbuilderfactory.newinstance()を処理するためのplantext xmlタグのコンテンツを解析します。 documentBuilder db = dbf.newdocumentbuilder(); StringReader sr = new StringReader(SMSG); inputSource is = new inputSource(sr); document document = db.parse(is);要素root = document.getDocumentElement(); nodeList nodeList1 = root.getElementsByTagname( "content"); if(nodeList1.item(0)== null) "ok"を返します。 string content = nodelist1.item(0).getTextContent(); system.out.println( "content:" + content); } catch(Exception e){e.printstacktrace(); //復号化が失敗した場合、障害について例外を確認してください} return "ok"; } / * * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------会社が次のようにユーザーのプレーンテキストに返信する必要があると仮定します:<xml> * <tousername> <![cdata [mycreate]]> </tousername> * <fromusername> <![wx5823bf96d3bd56c7]] <msgtype> <![cdata [text]> </msgtype> * <content> <![cdata [これはテスト]]> </content> * <msgid> 1234567890123456 </msgid> <agentid> 128 </agentid> </xml>タイムスタンプと乱数文字列(NonCE)は、メッセージ本文の署名を生成するか、パブリックプラットフォームのPost * URLから解析された対応する値を直接使用します。 2. [プレーンテキスト]を暗号化して、暗号テキストを取得します。 * 3。パブリックプラットフォーム上のエンタープライズが設定して、ステップ1で生成されたCipherテキスト、タイムスタンプ、ノンセ、およびメッセージボディシグネチャを生成するために使用します。 * 4. ciphertext、メッセージ本文の署名、タイムスタンプ、および乱数文字列をXML形式の文字列にスプライスし、エンタープライズに送信します。 *上記の2、3、および4つのステップは、パブリックプラットフォームによって提供されるライブラリ関数EncryptMSGを使用して実装できます。 *特定"<xml> <tousername> <![cdata [mycreate]]> </tousername> <fromusername> <![cdata [wxe49318eb604cf00b]]> </from username> <createtime> 1348831860 </createtime> <msgtype> <![cdata [text]]> </msgtype> <content> <![cdata [thisテスト]]]]]> </content> <MSGID> 1234567890123456 </msgid> <agentid> 1 </agentId> </xml> "; try {string sencryptmsg = wxcpt.encryptmsg(srespdata、タイムスタンプ、ノンセ); System.out.println( "sencrytmsgの暗号化後:" + sencryptmsg); Response.getWriter()。print(sencryptmsg); } catch(Exception e){e.printstacktrace(); // encryption failed} // srespdataを返します。 } /** *このメソッドは、あらゆるタイプのメッセージを送信できます * * @param msgtype *テキスト|画像|ビデオ| file | news * @param touser *メンバーIDリスト(メッセージ受信者、複数の受信者が '|'で区切られ、最大1,000がサポートされます)。特別なケース:@allとして指定されている * @param topy *部門IDリストは、エンタープライズアプリケーションに従うすべてのメンバーに送信します。複数のレシピエントが「|」で分離され、最大100個がサポートされています。 touserが@all * @param totag *タグIDリストの場合、このパラメーターを無視して、複数の受信者が '|'で分離されます。 touserが @all * @param content * msgtype =テキスト、テキストメッセージコンテンツ * @param mediaid *の場合は @all * @param content *の場合、このパラメーターを無視します。 @param picurl * msgtype = news、image path * @param safe *が機密メッセージであるかどうかを示します。 string access_token = getAccessToken(); //文字列要求文字列string action = create_session_url + access_token; //メッセージを送信するメッセージ要求json stringbuffer sb = new StringBuffer(); sb.append( "{"); sb.append( "/" touser/":" + "/" " + touser +"/"、"); sb.append( "/" toparty/":" + "/" " + toparty +"/"、"); sb.append( "/" totag/":" + "/" " + totag +"/"、"); if(msgtype.equals( "text")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" text/":" + "{"); sb.append( "/" content/":" + "/" " + content +"/""); sb.append( "}"); } else if(msgtype.equals( "image")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" image/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "Voice")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.Append( "/" Voice/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "video")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" video/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaId +"/"、"); sb.append( "/" title/":" + "/" " + title +"/"、"); sb.append( "/" description/":" + "/" " +説明 +"/""); sb.append( "}"); } else if(msgtype.equals( "file")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" file/":" + "{"); sb.append( "/" media_id/":" + "/" " + mediaid +"/""); sb.append( "}"); } else if(msgtype.equals( "news")){sb.append( "/" msgtype/":" + "/" " + msgtype +"/"、"); sb.append( "/" news/":" + "{"); sb.append( "/" article/":" + "["); sb.append( "{"); sb.append( "/" title/":" + "/" " + title +"/"、"); sb.append( "/" description/":" + "/" " + description +"/"、"); sb.append( "/" url/":" + "/" " + url +"/"、"); sb.append( "/" picurl/":" + "/" " + picurl +"/""); sb.append( "}"); sb.append( "]"); sb.append( "}"); } sb.append( "、/" safe/":" + "/" " + safe +"/"、"); sb.append( "/" agentId/":" + "/" " + ageled +"/"、"); sb.append( "/" debug/":" + "/" " +" 1 " +"/""); sb.append( "}"); string json = sb.toString(); {url = new url(action); httpsurlconnection http =(httpsurlconnection)url.openconnection(); http.setRequestMethod( "post"); http.setRequestProperty( "content-type"、 "application/json; charset = utf-8"); http.setdooutput(true); http.setdoinput(true); System.setProperty( "sun.net.client.defaultconnecttimeout"、 "30000"); // //接続タイムアウト30秒system.setProperty( "sun.net.client.defaultreadtimeout"、 "30000"); // //タイムアウト30秒を読み取りますhttp.connect(); outputStream os = http.getOutputStream(); os.write(json.getBytes( "utf-8")); // pass in parameter inputstream is = http.getInputStream(); int size = is.abailable(); byte [] jsonbytes = new byte [size]; is.read(jsonbytes); string result = new String(jsonbytes、 "utf-8"); system.out.println( "Request Returns results:" + result); os.flush(); os.close(); } catch(Exception e){e.printstacktrace(); }} public static void main(string [] args){StationResource wechat = new StationResource(); // wechat.sendwechatmsgtext( "@all"、 "2"、 ""、 "情報センター通知"、 "0"); wechat.sendwechatmsg( "news"、 "@all"、 ""、 ""、 ""、 "test senmsg"、 ""、 "tested"、 "allow tested"、 "http://www.baidu.com"、 "http://file27.mafengwo.net/m00/b2/12/wkgb6lo0ahwamhl8aav1ybfjdjw20.jpeg"、 "0"); }}上記は、編集者が紹介したWeChat Enterpriseアカウントの確認/送信メッセージです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!