国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開発 Java を使用して WeChat パブリック アカウントのケース コードを開発する

Java を使用して WeChat パブリック アカウントのケース コードを開発する

Mar 14, 2017 pm 02:16 PM
java WeChatの公開アカウント

この記事では Java を使用して WeChat パブリック アカウントのケース コードを開発し、パブリック アカウントにアクセスする方法、サブスクリプション アカウントについて メッセージを受信する、特定の參照値があり、興味のある友人はそれを參照できます

WeChat パブリック アカウント開発全般一般に、個人はサブスクリプション アカウントのみを申請でき、呼び出すことができるインターフェースは以下に簡単に説明します公式アカウント:

1.まず、メールアドレスが必要です。 WeChat パブリックアカウントプラットフォームに登録します。
登録方法には、サブスクリプションアカウント、パブリックアカウント、ミニプログラム、エンタープライズアカウントが含まれます

2.パブリック アカウント プラットフォームにログインします -- ->開発 ---> ここで URL とトークンを入力する必要があります。URL はサーバーで使用するインターフェイスです

3. Java Web サーバー プログラムがコンパイルされ、サーバー上に展開され、実行できます。WeChat を使用できます。 パブリック アカウントはオンライン インターフェイスのデバッグを実行します:

1) 適切なインターフェイスを選択します

2) システムは、インターフェイスのテキスト ボックスに対応するパラメーター値を直接入力できます (赤いアスタリスクは、このフィールドが必須であることを示します)
3) [問題の確認]
ボタン をクリックして、対応するデバッグ情報

を取得します。例: 取得する手順access_token:


1) インターフェイスの種類: 基本サポート 2) インターフェイスのリスト : access_token インターフェイス/トークンを取得します

3) 対応するパラメーターを入力します: Grant_type、appid、secret
4) クリックして問題を確認します
5) 検証が成功した場合成功すると、結果とプロンプトが返されます。結果は 200 ok、プロンプトは次のようになります。 要求が成功したことを示します


ここでさらに確認するのは、メッセージ インターフェイスのデバッグです: テキスト メッセージ、

寫真

メッセージ、音聲メッセージ、ビデオメッセージなど
4. インターフェースがわからない場合は、開発 ->開発者ツール-->開発者ドキュメント

クエリ

5を入力してください。 : サブスクリプション アカウントには、主に Web サービスの基本的なサポート、メッセージの受信、およびいくつかのインターフェイスがあります

ここでは主に
サブスクリプションについて説明します。メッセージの受信方法のケーススタディ

:

1. 個人の WeChat サブスクリプションを申請する必要があります。アカウント
2. URL サーバーとサーバー側コードの展開 (Tencent Cloud または Alibaba Cloud サーバーを使用できます)


1)、Ac
count

s

Servlet.java クラス、WeChat サーバーと WeChat からのメッセージ処理を確認します。 server

package cn.jon.wechat.servlet; 
 
import java.io.IOException; 
import java.io.PrintWriter; 
 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import cn.jon.wechat.service.AccountsService; 
import cn.jon.wechat.utils.SignUtil; 
 
public class AccountsServlet extends HttpServlet { 
 
 public AccountsServlet() { 
 super(); 
 } 
 
 
 public void destroy() { 
 super.destroy(); 
 // Put your code here 
 } 
 /** 
 * 確認請求來自于微信服務器 
 */ 
 
 public void doGet(HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException { 
  System.out.println("接口測試開始!?。?quot;); 
  //微信加密簽名 
  String signature = request.getParameter("signature"); 
  //時間戳 
  String timestamp = request.getParameter("timestamp"); 
  //隨機數(shù) 
  String nonce = request.getParameter("nonce"); 
  //隨機字符串 
  String echostr = request.getParameter("echostr"); 
  
  PrintWriter out = response.getWriter(); 
  //通過校驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗 
  if(SignUtil.checkSignature(signature,timestamp,nonce)){ 
  out.print(echostr); 
  } 
  out.close(); 
  out = null; 
//  response.encodeRedirectURL("success.jsp"); 
  
  
 } 
 /** 
 * 處理微信服務器發(fā)來的消息 
 */ 
 public void doPost(HttpServletRequest request, HttpServletResponse response) 
  throws ServletException, IOException { 
 //消息的接受、處理、響應 
 request.setCharacterEncoding("utf-8"); 
 response.setCharacterEncoding("utf-8"); 
 //調用核心業(yè)務類型接受消息、處理消息 
 String respMessage = AccountsService.processRequest(request); 
  
 //響應消息 
 PrintWriter out = response.getWriter(); 
 out.print(respMessage); 
 out.close(); 
  
  
 } 
 
 public void init() throws ServletException { 
 // Put your code here 
 } 
 
}

2)、SignUtil.javaクラス、リクエスト検証ツールクラス、トークンはWeChat


package cn.jon.wechat.utils; 
 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.Arrays; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
import java.util.concurrent.ConcurrentHashMap; 
 
/** 
 * 請求校驗工具類 
 * @author jon 
 */ 
public class SignUtil { 
 //與微信配置中的的Token一致 
 private static String token = ""; 
 
 public static boolean checkSignature(String signature, String timestamp, 
  String nonce) { 
 String[] arra = new String[]{token,timestamp,nonce}; 
 //將signature,timestamp,nonce組成數(shù)組進行字典排序 
 Arrays.sort(arra); 
 StringBuilder sb = new StringBuilder(); 
 for(int i=0;i<arra.length;i++){ 
  sb.append(arra[i]); 
 } 
 MessageDigest md = null; 
 String stnStr = null; 
 try { 
  md = MessageDigest.getInstance("SHA-1"); 
  byte[] digest = md.digest(sb.toString().getBytes()); 
  stnStr = byteToStr(digest); 
 } catch (NoSuchAlgorithmException e) { 
  // TODO Auto-generated catch block 
  e.printStackTrace(); 
 } 
 //釋放內存 
 sb = null; 
 //將sha1加密后的字符串與signature對比,標識該請求來源于微信 
 return stnStr!=null?stnStr.equals(signature.toUpperCase()):false; 
 } 
 /** 
 * 將字節(jié)數(shù)組轉換成十六進制字符串 
 * @param digestArra 
 * @return 
 */ 
 private static String byteToStr(byte[] digestArra) { 
 // TODO Auto-generated method stub 
 String digestStr = ""; 
 for(int i=0;i<digestArra.length;i++){ 
  digestStr += byteToHexStr(digestArra[i]); 
 } 
 return digestStr; 
 } 
 /** 
 * 將字節(jié)轉換成為十六進制字符串 
 */ 
 private static String byteToHexStr(byte dByte) { 
 // TODO Auto-generated method stub 
 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[] tmpArr = new char[2]; 
 tmpArr[0] = Digit[(dByte>>>4)&0X0F]; 
 tmpArr[1] = Digit[dByte&0X0F]; 
 String s = new String(tmpArr); 
 return s; 
 } 
 
 public static void main(String[] args) { 
 /*byte dByte = &#39;A&#39;; 
 System.out.println(byteToHexStr(dByte));*/ 
 Map<String,String> map = new ConcurrentHashMap<String, String>(); 
 map.put("4", "zhangsan"); 
 map.put("100", "lisi"); 
 Set set = map.keySet(); 
 Iterator iter = set.iterator(); 
 while(iter.hasNext()){ 
//  String keyV = (String) iter.next(); 
  String key =(String)iter.next(); 
  System.out.println(map.get(key)); 
//  System.out.println(map.get(iter.next())); 
 } 
 /*for(int i=0;i<map.size();i++){ 
  
 }*/ 
 } 
}

3)、AccountsService.javaサービスクラスに入力されたトークンと一致している必要があります。メッセージのリクエストとレスポンスの処理、およびユーザーが公式アカウントをフォローするときに、デフォルトのプッシュ メッセージ


package cn.jon.wechat.service; 
 
import java.util.Date; 
import java.util.Map; 
 
import javax.servlet.http.HttpServletRequest; 
 
import cn.jon.wechat.message.req.ImageMessage; 
import cn.jon.wechat.message.req.LinkMessage; 
import cn.jon.wechat.message.req.LocationMessage; 
import cn.jon.wechat.message.req.VideoMessage; 
import cn.jon.wechat.message.req.VoiceMessage; 
import cn.jon.wechat.message.resp.TextMessage; 
import cn.jon.wechat.utils.MessageUtil; 
 
/** 
 * 解耦,使控制層與業(yè)務邏輯層分離開來,主要處理請求,響應 
 * @author jon 
 */ 
public class AccountsService { 
 
 public static String processRequest(HttpServletRequest request) { 
 String respMessage = null; 
 //默認返回的文本消息內容 
 String respContent = "請求處理異常,請稍后嘗試!"; 
 try { 
  //xml請求解析 
  Map<String,String> requestMap = MessageUtil.pareXml(request); 
  
  //發(fā)送方賬號(open_id) 
  String fromUserName = requestMap.get("FromUserName"); 
  //公眾賬號 
  String toUserName = requestMap.get("ToUserName"); 
  //消息類型 
  String msgType = requestMap.get("MsgType"); 
  
  //默認回復此文本消息 
  TextMessage defaultTextMessage = new TextMessage(); 
  defaultTextMessage.setToUserName(fromUserName); 
  defaultTextMessage.setFromUserName(toUserName); 
  defaultTextMessage.setCreateTime(new Date().getTime()); 
  defaultTextMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_TEXT); 
  defaultTextMessage.setFuncFlag(0); 
  // 由于href屬性值必須用雙引號引起,這與字符串本身的雙引號沖突,所以要轉義 
  defaultTextMessage.setContent("歡迎訪問<a href=\"http://blog.csdn.net/j086924\">jon的博客</a>!"); 
//  defaultTextMessage.setContent(getMainMenu()); 
  // 將文本消息對象轉換成xml字符串 
  respMessage = MessageUtil.textMessageToXml(defaultTextMessage); 
 
  
  //文本消息 
  if(msgType.equals(MessageUtil.MESSSAGE_TYPE_TEXT)){ 
  //respContent = "Hi,您發(fā)送的是文本消息!"; 
  //回復文本消息 
  TextMessage textMessage = new TextMessage(); 
//  textMessage.setToUserName(toUserName); 
//  textMessage.setFromUserName(fromUserName); 
  //這里需要注意,否則無法回復消息給用戶了 
  textMessage.setToUserName(fromUserName); 
  textMessage.setFromUserName(toUserName); 
  textMessage.setCreateTime(new Date().getTime()); 
  textMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_TEXT); 
  textMessage.setFuncFlag(0); 
  respContent = "Hi,你發(fā)的消息是:"+requestMap.get("Content"); 
  textMessage.setContent(respContent); 
  respMessage = MessageUtil.textMessageToXml(textMessage); 
  } 
  //圖片消息 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_IMAGE)){ 
   
  ImageMessage imageMessage=new ImageMessage(); 
  imageMessage.setToUserName(fromUserName); 
  imageMessage.setFromUserName(toUserName); 
  imageMessage.setCreateTime(new Date().getTime()); 
  imageMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_IMAGE); 
  //respContent=requestMap.get("PicUrl"); 
  imageMessage.setPicUrl("http://img24.pplive.cn//2013//07//24//12103112092_230X306.jpg"); 
  respMessage = MessageUtil.imageMessageToXml(imageMessage); 
  } 
  //地理位置 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_LOCATION)){ 
  LocationMessage locationMessage=new LocationMessage(); 
  locationMessage.setToUserName(fromUserName); 
  locationMessage.setFromUserName(toUserName); 
  locationMessage.setCreateTime(new Date().getTime()); 
  locationMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_LOCATION); 
  locationMessage.setLocation_X(requestMap.get("Location_X")); 
  locationMessage.setLocation_Y(requestMap.get("Location_Y")); 
  locationMessage.setScale(requestMap.get("Scale")); 
  locationMessage.setLabel(requestMap.get("Label")); 
  respMessage = MessageUtil.locationMessageToXml(locationMessage); 
   
  } 
  
  //視頻消息 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_VIDEO)){ 
  VideoMessage videoMessage=new VideoMessage(); 
  videoMessage.setToUserName(fromUserName); 
  videoMessage.setFromUserName(toUserName); 
  videoMessage.setCreateTime(new Date().getTime()); 
  videoMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_VIDEO); 
  videoMessage.setMediaId(requestMap.get("MediaId")); 
  videoMessage.setThumbMediaId(requestMap.get("ThumbMediaId")); 
  respMessage = MessageUtil.videoMessageToXml(videoMessage); 
   
  } 
  //鏈接消息 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_LINK)){ 
  LinkMessage linkMessage=new LinkMessage(); 
  linkMessage.setToUserName(fromUserName); 
  linkMessage.setFromUserName(toUserName); 
  linkMessage.setCreateTime(new Date().getTime()); 
  linkMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_LINK); 
  linkMessage.setTitle(requestMap.get("Title")); 
  linkMessage.setDescription(requestMap.get("Description")); 
  linkMessage.setUrl(requestMap.get("Url")); 
  respMessage = MessageUtil.linkMessageToXml(linkMessage); 
  } 
  //語音消息 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_VOICE)){ 
  VoiceMessage voiceMessage=new VoiceMessage(); 
  voiceMessage.setToUserName(fromUserName); 
  voiceMessage.setFromUserName(toUserName); 
  voiceMessage.setCreateTime(new Date().getTime()); 
  voiceMessage.setMsgType(MessageUtil.MESSSAGE_TYPE_VOICE); 
  voiceMessage.setMediaId(requestMap.get("MediaId")); 
  voiceMessage.setFormat(requestMap.get("Format")); 
  respMessage = MessageUtil.voiceMessageToXml(voiceMessage); 
  } 
  //事件推送 
  else if(msgType.equals(MessageUtil.MESSSAGE_TYPE_EVENT)){ 
  //事件類型 
  String eventType = requestMap.get("Event"); 
  //訂閱 
  if(eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)){ 
   respContent = "謝謝關注!"; 
  } 
  //取消訂閱 
  else if(eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)){ 
   // 
   System.out.println("取消訂閱"); 
   
  } 
  else if(eventType.equals(MessageUtil.EVENT_TYPE_CLICK)){ 
   //自定義菜單消息處理 
   System.out.println("自定義菜單消息處理"); 
  } 
  } 
  
 } catch (Exception e) { 
  // TODO Auto-generated catch block 
  e.printStackTrace(); 
 } 
 return respMessage; 
 } 
 
 public static String getMainMenu() 
 { 
 StringBuffer buffer =new StringBuffer(); 
 buffer.append("您好,我是jon,請回復數(shù)字選擇服務:").append("\n"); 
 buffer.append("1、我的博客").append("\n"); 
 buffer.append("2、 歌曲點播").append("\n"); 
 buffer.append("3、 經(jīng)典游戲").append("\n"); 
 buffer.append("4 、聊天打牌").append("\n\n"); 
 buffer.append("回復"+"0"+"顯示幫助菜單"); 
 return buffer.toString(); 
  
 } 
}

4)、MessageUtil.java ヘルプ クラス (
定數(shù)

の定義や XML メッセージ変換など) を設定できます。処理


package cn.jon.wechat.utils; 
 
import java.io.InputStream; 
import java.io.Writer; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import javax.servlet.http.HttpServletRequest; 
 
import org.dom4j.Document; 
import org.dom4j.Element; 
import org.dom4j.io.SAXReader; 
 
import cn.jon.wechat.message.req.ImageMessage; 
import cn.jon.wechat.message.req.LinkMessage; 
import cn.jon.wechat.message.req.LocationMessage; 
import cn.jon.wechat.message.req.VideoMessage; 
import cn.jon.wechat.message.req.VoiceMessage; 
import cn.jon.wechat.message.resp.Article; 
import cn.jon.wechat.message.resp.MusicMessage; 
import cn.jon.wechat.message.resp.NewsMessage; 
import cn.jon.wechat.message.resp.TextMessage; 
 
import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.core.util.QuickWriter; 
import com.thoughtworks.xstream.io.HierarchicalStreamWriter; 
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; 
import com.thoughtworks.xstream.io.xml.XppDriver; 
 
/** 
 * 各種消息的處理類 
 * @author jon 
 */ 
 
public class MessageUtil { 
 /** 
 * 文本類型 
 */ 
 public static final String MESSSAGE_TYPE_TEXT = "text"; 
 /** 
 * 音樂類型 
 */ 
 public static final String MESSSAGE_TYPE_MUSIC = "music"; 
 /** 
 * 圖文類型 
 */ 
 public static final String MESSSAGE_TYPE_NEWS = "news"; 
 
 /** 
 * 視頻類型 
 */ 
 public static final String MESSSAGE_TYPE_VIDEO = "video"; 
 /** 
 * 圖片類型 
 */ 
 public static final String MESSSAGE_TYPE_IMAGE = "image"; 
 /** 
 * 鏈接類型 
 */ 
 public static final String MESSSAGE_TYPE_LINK = "link"; 
 /** 
 * 地理位置類型 
 */ 
 public static final String MESSSAGE_TYPE_LOCATION = "location"; 
 /** 
 * 音頻類型 
 */ 
 public static final String MESSSAGE_TYPE_VOICE = "voice"; 
 /** 
 * 推送類型 
 */ 
 public static final String MESSSAGE_TYPE_EVENT = "event"; 
 /** 
 * 事件類型:subscribe(訂閱) 
 */ 
 public static final String EVENT_TYPE_SUBSCRIBE = "subscribe"; 
 /** 
 * 事件類型:unsubscribe(取消訂閱) 
 */ 
 public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; 
 /** 
 * 事件類型:click(自定義菜單點擊事件) 
 */ 
 public static final String EVENT_TYPE_CLICK= "CLICK"; 
 
 /** 
 * 解析微信發(fā)來的請求 XML 
 */ 
 @SuppressWarnings("unchecked") 
 public static Map<String,String> pareXml(HttpServletRequest request) throws Exception { 
  
 //將解析的結果存儲在HashMap中 
 Map<String,String> reqMap = new HashMap<String, String>(); 
  
 //從request中取得輸入流 
 InputStream inputStream = request.getInputStream(); 
 //讀取輸入流 
 SAXReader reader = new SAXReader(); 
 Document document = reader.read(inputStream); 
 //得到xml根元素 
 Element root = document.getRootElement(); 
 //得到根元素的所有子節(jié)點 
 List<Element> elementList = root.elements(); 
 //遍歷所有的子節(jié)點取得信息類容 
 for(Element elem:elementList){ 
  reqMap.put(elem.getName(),elem.getText()); 
 } 
 //釋放資源 
 inputStream.close(); 
 inputStream = null; 
  
 return reqMap; 
 } 
 /** 
 * 響應消息轉換成xml返回 
 * 文本對象轉換成xml 
 */ 
 public static String textMessageToXml(TextMessage textMessage) { 
 xstream.alias("xml", textMessage.getClass()); 
 return xstream.toXML(textMessage); 
 } 
 /** 
 * 語音對象的轉換成xml 
 * 
 */ 
 public static String voiceMessageToXml(VoiceMessage voiceMessage) { 
 xstream.alias("xml", voiceMessage.getClass()); 
 return xstream.toXML(voiceMessage); 
 } 
 
 /** 
 * 視頻對象的轉換成xml 
 * 
 */ 
 public static String videoMessageToXml(VideoMessage videoMessage) { 
 xstream.alias("xml", videoMessage.getClass()); 
 return xstream.toXML(videoMessage); 
 } 
 
 /** 
 * 音樂對象的轉換成xml 
 * 
 */ 
 public static String musicMessageToXml(MusicMessage musicMessage) { 
 xstream.alias("xml", musicMessage.getClass()); 
 return xstream.toXML(musicMessage); 
 } 
 /** 
 * 圖文對象轉換成xml 
 * 
 */ 
 public static String newsMessageToXml(NewsMessage newsMessage) { 
 xstream.alias("xml", newsMessage.getClass()); 
 xstream.alias("item", new Article().getClass()); 
 return xstream.toXML(newsMessage); 
 } 
 
 /** 
 * 圖片對象轉換成xml 
 * 
 */ 
 
 public static String imageMessageToXml(ImageMessage imageMessage) 
 { 
 xstream.alias("xml",imageMessage.getClass()); 
 return xstream.toXML(imageMessage); 
  
 } 
 
 /** 
 * 鏈接對象轉換成xml 
 * 
 */ 
 
 public static String linkMessageToXml(LinkMessage linkMessage) 
 { 
 xstream.alias("xml",linkMessage.getClass()); 
 return xstream.toXML(linkMessage); 
  
 } 
 
 /** 
 * 地理位置對象轉換成xml 
 * 
 */ 
 
 public static String locationMessageToXml(LocationMessage locationMessage) 
 { 
 xstream.alias("xml",locationMessage.getClass()); 
 return xstream.toXML(locationMessage); 
  
 } 
 
 /** 
 * 拓展xstream,使得支持CDATA塊 
 * 
 */ 
 private static XStream xstream = new XStream(new XppDriver(){ 
 public HierarchicalStreamWriter createWriter(Writer out){ 
  return new PrettyPrintWriter(out){ 
  //對所有的xml節(jié)點的轉換都增加CDATA標記 
  boolean cdata = true; 
   
  @SuppressWarnings("unchecked") 
  public void startNode(String name,Class clazz){ 
   super.startNode(name,clazz); 
  } 
   
  protected void writeText(QuickWriter writer,String text){ 
   if(cdata){ 
   writer.write("<![CDATA["); 
   writer.write(text); 
   writer.write("]]>"); 
   }else{ 
   writer.write(text); 
   } 
  } 
  }; 
 } 
 }); 
 
}

5)、BaseMessage.java メッセージ基本クラス (開発者の WeChat ID、ユーザー アカウント、作成時間、メッセージ タイプ、メッセージ ID
変數(shù)

を含む)、テキスト、ビデオ、および畫像メッセージが

継承されますこの基本クラス、およびこれに基づいて獨自の変數(shù)を拡張します。これは、開発者ドキュメントのさまざまなメッセージ屬性に従って定義できます

package cn.jon.wechat.message.req; 
/** 
 * 消息基類 (普通用戶-公眾號) 
 * @author jon 
 */ 
public class BaseMessage { 
 
 //開發(fā)者微信號 
 private String ToUserName; 
 //發(fā)送方賬號(一個openId) 
 private String FromUserName; 
 //消息創(chuàng)建時間(整型) 
 private long CreateTime; 
 //消息類型(text/image/location/link...) 
 private String MsgType; 
 //消息id 64位整型 
 private String MsgId; 
 
 public BaseMessage() { 
 super(); 
 // TODO Auto-generated constructor stub 
 } 
 
 public BaseMessage(String toUserName, String fromUserName, long createTime, 
  String msgType, String msgId) { 
 super(); 
 ToUserName = toUserName; 
 FromUserName = fromUserName; 
 CreateTime = createTime; 
 MsgType = msgType; 
 MsgId = msgId; 
 } 
 
 public String getToUserName() { 
 return ToUserName; 
 } 
 
 public void setToUserName(String toUserName) { 
 ToUserName = toUserName; 
 } 
 
 public String getFromUserName() { 
 return FromUserName; 
 } 
 
 public void setFromUserName(String fromUserName) { 
 FromUserName = fromUserName; 
 } 
 public long getCreateTime() { 
 return CreateTime; 
 } 
 
 public void setCreateTime(long createTime) { 
 CreateTime = createTime; 
 } 
 public String getMsgType() { 
 return MsgType; 
 } 
 
 public void setMsgType(String msgType) { 
 MsgType = msgType; 
 } 
 public String getMsgId() { 
 return MsgId; 
 } 
 
 public void setMsgId(String msgId) { 
 MsgId = msgId; 
 } 
}

6)、TextMessage.java テキスト メッセージ、5 つの基本クラスから継承、拡張コンテンツ屬性


package cn.jon.wechat.message.req; 
/** 
 * 文本消息 
 * @author jon 
 */ 
public class TextMessage extends BaseMessage{ 
 //消息內容 
 private String content; 
 
 public String getContent() { 
 return content; 
 } 
 
 public void setContent(String content) { 
 this.content = content; 
 } 
 
}

7)、ImageMes??sage.java 畫像メッセージ

package cn.jon.wechat.message.req; 
/** 
 * 圖片消息 
 * @author jon 
 */ 
public class ImageMessage extends BaseMessage{ 
 //圖片鏈接 
 private String PicUrl; 
 
 public String getPicUrl() { 
 return PicUrl; 
 } 
 
 public void setPicUrl(String picUrl) { 
 PicUrl = picUrl; 
 } 
}

8)、VideoMessage.java ビデオメッセージ


package cn.jon.wechat.message.req; 
 
public class VideoMessage extends BaseMessage { 
 
 private String mediaId; 
 private String thumbMediaId; 
 public String getMediaId() { 
 return mediaId; 
 } 
 public void setMediaId(String mediaId) { 
 this.mediaId = mediaId; 
 } 
 public String getThumbMediaId() { 
 return thumbMediaId; 
 } 
 public void setThumbMediaId(String thumbMediaId) { 
 this.thumbMediaId = thumbMediaId; 
 } 
 
}

以上がJava を使用して WeChat パブリック アカウントのケース コードを開発するの詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を実行し、結果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を実行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設定して部分的なロールバックを達成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります。現(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機能しますか? Garbage CollectionはJavaでどのように機能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを実行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを実行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

HTTPミドルウェアロギングの例を例に進めます HTTPミドルウェアロギングの例を例に進めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進みます 説明された延期聲明の例で進みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を実行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

See all articles