ホームページ バックエンド開発 PHPチュートリアル WeChatパブリックオープンプラットフォーム開発02 - WeChatパブリックプラットフォームのPHPインターフェースとJavaインターフェースの比較

WeChatパブリックオープンプラットフォーム開発02 - WeChatパブリックプラットフォームのPHPインターフェースとJavaインターフェースの比較

Jun 13, 2016 am 11:57 AM
final gt lt string

WeChat パブリック オープン プラットフォーム開発 02---WeChat パブリック プラットフォーム PHP インターフェイスと Java インターフェイスの比較

WeChat パブリック オープン プラットフォーム開発 02---WeChat パブリック プラットフォーム PHP インターフェイスと Java インターフェイスの比較
テクニカル QQ コミュニケーション グループ: JavaDream: 251572072
----------------------------------
このセクションのコードはネチズンの制作物から収集されたものです
---------------------------------- ------ -------
a.java-jsp バージョン
b.PHP インターフェース コード:
/**
? * wechat php テスト
?*/

//トークンを定義します
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

クラス wechatCallbackapiTest
{
?public function valid()
??? {
??????? $echoStr = $_GET["echostr"];

??? ???? //有効な署名、オプション
??????? if($this->checkSignature()){
????? echoStr;
??????? ?exit;
???? }

??? ??? {

??//ポストデータを取得します。環境が異なる可能性があります
??$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

???? // 投稿データを抽出

??if (!empty($postStr)){

???????????????
????????? ???? $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
?????????? $fromUsername = $postObj->FromUserName;
?? ?? ?????????? $toUsername = $postObj->ToUserName;
????????????$keyword = トリム($postObj->コンテンツ) );
??????????$time = time();
??????????$textTpl = "
???????
???????< ]]>
???????%s
???????< ;![CDATA[% s]]>
???????
?????? ?0
???????
";?????????
?? ??if(!empty( $keyword ))
??????????{
?????????????? ??$msgType = "text";
??? ?????????? ?$contentStr = "wechat の世界へようこそ!";
???????????? ?$resultStr = sprintf 、$fromUsername、$toUsername、$time、$msgType、$contentStr);
????????????? ?echo $resultStr ;
??????? ?????????? }else{
??????????? ?echo "何かを入力してください..."; ???? }

????? }else {
????? ?echo

????? ?終了; 🎜> ??????? }

??? }
??
?プライベート関数 checkSignature()
?{
??????? _GET["署名"];
??????? $timestamp = $_GET["タイムスタンプ"];
??????? $_GET["nonce"] ;?
??????? ??
??$token = TOKEN;
??$tmpArr = array($token, $ timestamp, $nonce);
??sort ($tmpArr);
??$tmpStr = implode( $tmpArr );
??$tmpStr = sha1( $tmpStr );

??if( $tmpStr == $署名 ){
???return true;
??}else{
???return false;
??}
?}
}

?>
-------------------------------------- --------
c.java 版接口
<[email protected] import="java.util.Date"%>
<[email protected] import=" org.dom4j.Element"%>
<[email protected] import="org.dom4j.DocumentHelper"%>
<[email protected] import="org.dom4j.Document"%> ;
<[email protected] import="java.io.IOException"%>
<[email protected] import="java.io.InputStreamReader"%>
<[email protected] import="java.io.BufferedReader"%>
<[email protected] import="java.io.Reader"%>
<[email protected] import="java.security .MessageDigest"%>
<[email protected] import="java.util.Arrays"%>
<%@ page language="java" contentType="text/html; -8" pageEncoding="utf-8"%>
<%
?//WeiXinHandler は内部では非final型のオブジェクトを使用できません
?final String TOKEN="weixin";
?final HttpServletRequest Final_request=リクエスト;
?final HttpServletResponse Final_response=response;
%>
<%
class WeiXinHandler{
?public void valid(){
??String echostr=final_request.getParameter( "echostr");
??if(null==echostr||echostr.isEmpty()){
???responseMsg();
??}else{
???if (this.checkSignature()){
????this.print(echostr);
???}else{
????this.print("error");??? ??????????????????????????????????????????? ??????????????????????????????????????????? ??????????????????????????????????????????? ??????????????????????????????????????????? ??????????????????????????????????????????? ??????????????????????????????????????????? ??????????????????????
???}
??}
?}
?//自発回复内容
?public void responseMsg(){
??String postStr=null;
??try{
???postStr=this.readStreamParameter(final_request.getInputStream());
??}catch(Exception e){
???e.printStackTrace();
??}
??//System.out.println(postStr);
??if (null!=postStr&&!postStr.isEmpty()){
???ドキュメント document=null;
???try{
????document = DocumentHelper.parseText(postStr);
???}catch(Exception e){
????e.printStackTrace();
???}
???if(null==document){
????this.print("");
????return;
??? }
???要素 root=document.getRootElement();
?????????? String fromUsername = root.elementText("FromUserName");
?????????? String toUsername = root.elementText("ToUserName");
??????????文字列キーワード = root.elementTextTrim("Content");
?????????? String time = new Date().getTime() "";
?????????????文字列 textTpl = ""
????""
????""
??????"%3$s"
????">"
??????">コンテンツ>"
????「0
??????"
";????????????
???
???if(null!=keyword&&!keyword.equals(""))
?????????? {
??????? ??String msgType = "text";
????????????? ?String contentStr = "wechat 世界へようこそ!";
??????????? ?String resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr);
??????????? ?this.print(resultStr);
????????????? }else{
????????????? ?this.print("何かを入力してください...");
????????????? }

?? }else {
???? ?this.print("");
???? }
?}
?//微信インターフェース验证
?public boolean checkSignature(){
??String 署名 = Final_request.getParameter("signature");
????? ??文字列タイムスタンプ = Final_request.getParameter("タイムスタンプ");
??????? String nonce = Final_request.getParameter("nonce");
???????文字列トークン=TOKEN;
??????? String[] tmpArr={トークン,タイムスタンプ,ノンス};
??????? Arrays.sort(tmpArr);
???????文字列 tmpStr=this.ArrayToString(tmpArr);
??????? tmpStr=this.SHA1Encode(tmpStr);
??????? if(tmpStr.equalsIgnoreCase(signature)){
???return true;
??}else{
???return false;
??}
?}
?//向请求端送信返回数据
?public void print(String content){
??try{
???final_response.getWriter().print(content);
?? ?final_response.getWriter().flush();
???final_response.getWriter().close();
??}catch(Exception e){
???
?? }
?}
?//数组转字符串
?public String ArrayToString(String [] arr){
??StringBuffer bf = new StringBuffer();
??for( int i = 0; arr.length; bf.append(arr[i]);
??}
??return bf.toString();
?}
?//sha1加密
?public String SHA1Encode(String sourceString) {
??String resultString = null;
??try {
?? resultString = new String(sourceString);
???? MessageDigest md = MessageDigest.getInstance("SHA-1");
???? resultString = byte2hexString(md.digest(resultString.getBytes()));
??} catch (Exception ex) {
??}
??return resultString;
?}
?public Final String byte2hexString(byte[] bytes) {
??StringBuffer buf = new StringBuffer(bytes.length * 2);
??for (int i = 0; i < bytes.length; i ) {
???if (((int) bytes[i] & 0xff) <0x10) {
????? ?buf.append("0");
???? ?}
???buf.append(Long.toString((int) bytes[i] & 0xff, 16));
??}
??return buf.toString().toUpperCase( );
?}
?//入流读取postパラメータ
?public String readStreamParameter(ServletInputStream in){
??StringBuilder バッファ = new StringBuilder();
?? BufferedReader Reader=null;
??try{
???reader = new BufferedReader(new InputStreamReader(in));
???String line=null;
???while(( line = Reader.readLine())!=null){
????buffer.append(line);
???????? }
??}catch(Exception e){
???e.printStackTrace();
??}finally{
???if(null!=reader){
????try {
?????reader.close();
????} catch (IOException e) {
?????e.printStackTrace();
????}
???}
??}
??returnbuffer.toString();
?}
}
%>
< ;%
?WeiXinHandler handler=new WeiXinHandler();
?handler.valid();
%>
----------------- ------------------------
d. 以上は PHP インターフェイスと JSP インターフェイスのすべての代コード、
? 现在我们来对いくつか必要注意的地方下分析:
? 最初に、全体的に見られるものとして、jsp は PHP の繁忙期の一部に比べて、多機能なため自己記述が必要です、
? 画像 sha1 加密、xml 文字列等を解析するには、自己検出の第三方のコードが必要です。
? 最初のポイントは、WeChat パブリック プラットフォームから JSP に送信されたパラメータを取得する必要があるということです。通常、それらを取得するには request.getParameter を使用します。 PHP は次のように取得します。
? $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
? この時点で、いくつかの情報をクエリすると、取得できるのは「認識できない MIME タイプ データ」であることがわかります。 $_GET または $_POST 関数を通じて取得されます。元の POST データ
? ここでは、元のデータ ストリームを取得するメソッドを使用して、投稿 XML データ
を解析します。 ?try{
???postStr=this.readStreamParameter(final_request.getInputStream());
??}catch(Exception e){
???e.printStackTrace();
? ?}
-------- ------------------------------------- --------
// 入力ストリームからポストパラメータを読み取ります
?public String readStreamParameter(ServletInputStream in){
??StringBuilderbuffer = new StringBuilder();
?? BufferedReader Reader=null;
??try{
???reader = new BufferedReader(new InputStreamReader(in));
???String line=null;
???while(( line = Reader.readLine())!=null){
????buffer.append(line);
????? }
??}catch(Exception e){
???e.printStackTrace();
??}finally{
???if(null!=reader){
????try {
???? Reader.close();
?? ??} catch (IOException e) {
????e.printStackTrace();
????}
???}
??}
??returnbuffer.toString();
?}
------------------------ ---------- ------------------------
2つ目は、応答メッセージを返信することです。 WeChat プラットフォームで最も一般的な out.Print を使用しようとしましたが、応答がありませんでした。
echo "";
exit;
を記述していることを確認してください。 ---------
メッセージ応答を送り返すには更新操作が必要かもしれないと推測したので、応答内のいくつかの関数を探して次の試みを行いました
// 戻りデータを送信します要求側へ
?public void print(String content){
??try{
???final_response.getWriter().print(content);
???final_response.getWriter( ).flush();
???final_response.getWriter( ).close();
??}catch(Exception e){
???
??}
? }
------------- ------------------------
詳しい紹介はこちらWeChat パブリック プラットフォームのメッセージング インターフェイスについては、WeChat パブリック プラットフォームの公式ドキュメントを参照してください。メッセージの XML 形式とメッセージの送信方法が紹介されています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Jul 24, 2023 pm 07:55 PM

Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java 開発で基本データ型を文字列に変換する必要がある場合、一般的な方法は String クラスの valueOf() 関数を使用することです。この関数は、基本データ型のパラメータを受け入れ、対応する文字列表現を返すことができます。この記事では、基本的なデータ型変換に String.valueOf() 関数を使用する方法を検討し、いくつかのコード例を提供します。

char配列を文字列に変換する方法 char配列を文字列に変換する方法 Jun 09, 2023 am 10:04 AM

char配列をstringに変換する方法:代入によって実現できます {char a[]=" abc d\0efg ";string s=a;} 構文を使用して、char配列にstringに値を直接代入させて実行します変換を完了するためのコード。

Javaのfinal、finally、finalizeの違い Javaのfinal、finally、finalizeの違い Feb 19, 2024 pm 12:16 PM

Java におけるfinal、finally、finalize の違いには、具体的なコード例が必要です。Java プログラミングでは、final、finally、finalize という 3 つのキーワードが頻繁に使用されます。これらは綴りは似ていますが、意味と使用法が異なります。この記事では、これら 3 つのキーワードの違いを詳しく説明し、読者の理解を助けるコード例を示します。 1. Final キーワード Final キーワードは、クラス、メソッド、変数に使用できます。その機能は、変更されたクラスを作成することです

Java では、final キーワードのみを使用して定数を定義できますか? Java では、final キーワードのみを使用して定数を定義できますか? Sep 20, 2023 pm 04:17 PM

定数変数とは、値が固定されており、プログラム内に 1 つだけ存在する変数です。定数変数を宣言して値を代入すると、プログラム全体でその値を再度変更することはできません。他の言語とは異なり、Java は定数を直接サポートしません。ただし、変数を static および Final として宣言することで、定数を作成することはできます。静的 - 静的変数を宣言すると、それらはコンパイル時にメモリにロードされます。つまり、使用できるコピーは 1 つだけになります。 Final - Final 変数を宣言すると、その値は変更できなくなります。したがって、インスタンス変数を static かつ Final として宣言することで、Java で定数を作成できます。デモの例 classData{&am

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

Java の String.replace() 関数を使用して、文字列内の文字 (文字列) を置換します。 Java の String.replace() 関数を使用して、文字列内の文字 (文字列) を置換します。 Jul 25, 2023 pm 05:16 PM

Java の String.replace() 関数を使用して文字列内の文字 (文字列) を置換する Java では、文字列は不変オブジェクトです。つまり、文字列オブジェクトが作成されると、その値は変更できません。ただし、文字列内の特定の文字または文字列を置換する必要がある状況が発生する場合があります。現時点では、Java の String クラスの replace() メソッドを使用して文字列置換を実装できます。 String クラスの replace() メソッドには 2 つのタイプがあります。

2wワード詳細説明文字列、yyds 2wワード詳細説明文字列、yyds Aug 24, 2023 pm 03:56 PM

皆さんこんにちは。今日は Java の基本知識である String についてお話します。 String クラスの重要性は言うまでもなく、バックエンド開発で最もよく使用されるクラスであるため、説明する必要があります。

See all articles