第三周(2)——微信被动服务部分

来源:互联网 发布:dede淘宝客api采集 编辑:程序博客网 时间:2024/06/04 18:34

先吐槽一下csdn 进了回收站还拿不出来了!!!我直接从回收站复制了!


Service_base

除了前一篇提到的主动请求部分,我们还需要考虑被动的部分。即对用户的事件、请求等进行返回消息。在整体的开发框架中,Service_base是服务提供的基类。对ReceiveMsg对象的内容,进行逻辑处理,返回SendMsg对象。它的子类需要继承实现excute()方法。


Service_base的内容我没有做过多更改,大体的代码如下:

 

Service_base的主体代码如下:

[java] view plain copy
  1. package service;  
  2.   
  3.   
  4. import java.io.PrintWriter;  
  5. import java.lang.reflect.InvocationTargetException;  
  6.   
  7.   
  8. import util.FacSendMsg;  
  9. import msgbean.ReceiveMsg;  
  10. import msgbean.SendMsg;  
  11.   
  12.   
  13. public abstract class Service_base {  
  14. <span style="white-space:pre">  </span>  
  15. <span style="white-space:pre">  </span>//继承该类 并从MSG中得到信息,实现excute方法 补全一个SMSG对象。  
  16. <span style="white-space:pre">  </span>private FacSendMsg facsendmsg = new FacSendMsg();  
  17. <span style="white-space:pre">  </span>protected  SendMsg smsg ;  
  18. <span style="white-space:pre">  </span>protected static final int error = 1;  
  19. <span style="white-space:pre">  </span>protected static final int success = 0;  
  20. <span style="white-space:pre">  </span>protected String xmlresult = "";  
  21. <span style="white-space:pre">  </span>// service的基类  
  22. <span style="white-space:pre">  </span>protected ReceiveMsg msg;  
  23.   
  24.   
  25. <span style="white-space:pre">  </span>public ReceiveMsg getMsg() {  
  26. <span style="white-space:pre">      </span>return msg;  
  27. <span style="white-space:pre">  </span>}  
  28.   
  29.   
  30. <span style="white-space:pre">  </span>public void setMsg(ReceiveMsg msg) {  
  31. <span style="white-space:pre">      </span>this.msg = msg;  
  32. <span style="white-space:pre">  </span>}  
  33.   
  34.   
  35. <span style="white-space:pre">  </span>public String getResult() {  
  36. <span style="white-space:pre">      </span>return xmlresult;  
  37. <span style="white-space:pre">  </span>}  
  38.   
  39.   
  40. <span style="white-space:pre">  </span>public void setResult(String result) {  
  41. <span style="white-space:pre">      </span>this.xmlresult = result;  
  42. <span style="white-space:pre">  </span>}  
  43.   
  44.   
  45. <span style="white-space:pre">  </span>public int doing(PrintWriter out) {  
  46. <span style="white-space:pre">      </span>// 返回初步的回复数据 ,是一个smsg格式;  
  47.   
  48.   
  49. <span style="white-space:pre">      </span>smsg=excute();  
  50. <span style="white-space:pre">      </span>try {  
  51. <span style="white-space:pre">          </span>// smsg转xml,smsg为空表示不产生回复。回一个空的200状态  
  52. <span style="white-space:pre">          </span>if (smsg != null)  
  53. <span style="white-space:pre">              </span>xmlresult = facsendmsg.msgtoxml(smsg);  
  54. <span style="white-space:pre">          </span>out.print(xmlresult);  
  55. <span style="white-space:pre">      </span>} catch (Exception e) {  
  56. <span style="white-space:pre">          </span>e.printStackTrace();  
  57. <span style="white-space:pre">      </span>}  
  58. <span style="white-space:pre">      </span>return success;  
  59.   
  60.   
  61. <span style="white-space:pre">  </span>}  
  62.   
  63.   
  64. <span style="white-space:pre">  </span>protected abstract SendMsg excute();  
  65.   
  66.   
  67. }  

Service_event

这里我主要写了对事件的处理,包括click类型的文字窗口事件,针对不同按键写弹出的窗口和对图文消息的调用。

为了避免不必要的麻烦,将地址处理了,一些跳转链接目前还没有考虑好,便于测试,分别链接到虎扑和百度。后期会改

[java] view plain copy
  1. package service;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import util.FacSendMsg;  
  6. import msgbean.Articles;  
  7. import msgbean.SendMsg;  
  8.   
  9. public class Service_event extends Service_base {  
  10.     private String text_subscribe_scan="这是扫码关注的用户";  
  11.     private String text_subscribe="这是普通关注的用户";  
  12.     @Override  
  13.     public SendMsg  excute() {  
  14.         smsg=new SendMsg();  
  15.         smsg.setToUserName(msg.getFromUserName());  
  16.         smsg.setFromUserName(msg.getToUserName());  
  17.         smsg.setCreateTime(System.currentTimeMillis()/1000+"");  
  18.           
  19.         switch (msg.getEvent()) {  
  20.         case "subscribe"//订阅  
  21.             event_subscribe();  
  22.             break;  
  23.         case "unsubscribe":  
  24.             event_unsubscribe();  
  25.             break;  
  26.         case "SCAN":  
  27.             event_scan();  
  28.             break;  
  29.         case "LOCATION":  
  30.   
  31.             break;  
  32.         case "CLICK":  
  33.             event_click();  
  34.             break;  
  35.         case "VIEW":  
  36.   
  37.             break;  
  38.   
  39.         default:  
  40.             break;  
  41.         }  
  42.         return smsg;  
  43.   
  44.     }  
  45.   
  46.     private void event_subscribe() {  
  47.   
  48.         smsg.setMsgType("text");  
  49.         // 订阅事件  
  50.         // 带场景值的(扫码)  
  51.         if (!msg.getEventKey().equals("")) {  
  52.             smsg.setContent(text_subscribe_scan);  
  53.         } else {  
  54.             smsg.setContent(text_subscribe);  
  55.         }  
  56.   
  57.     }  
  58.   
  59.     private void event_unsubscribe() {  
  60.         //用户取消订阅事件 这里写一段解绑程序比较好吧。。  
  61.         smsg.setMsgType("text");  
  62.           
  63.   
  64.     }  
  65.   
  66.     private void event_scan() {  
  67.         // 关注后用户的扫描事件 (不涉及关注事件)  
  68.         smsg.setMsgType("text");  
  69.         smsg.setContent("欢迎您登录,"+msg.getFromUserName()+"您的key是"+msg.getEventKey());  
  70.   
  71.     }  
  72.   
  73.     private void event_location() {  
  74.         // 用户地理位置的处理事件  
  75.   
  76.     }  
  77.   
  78.     private void event_click() {  
  79.         // 拉取消息的的click事件  
  80.           
  81.         switch (msg.getEventKey()) {  
  82.         case "bd":  
  83.         //绑定  
  84.             smsg.setMsgType("news");  
  85.             smsg.setArticleCount("2");  
  86.             Articles a1=new Articles();  
  87.             a1.setDescription("最后加参即可");  
  88.             a1.setPicUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1495082230317&di=f57fe3b0e3bc2af9b335cd194ad3bcf6&imgtype=0&src=http%3A%2F%2Fimg3.yxlady.com%2Fyl%2FUploadFiles_5361%2F20160312%2F20160312115540742.jpg");  
  89.             a1.setUrl("http://XXXXXXXXXXXXX/YXXX/XXXX.html?user="+msg.getFromUserName());  
  90.             a1.setTitle("绑定账号");  
  91.             Articles a2=new Articles();  
  92.             a2.setDescription("描述");  
  93.             a2.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");  
  94.             a2.setUrl("http://www.qq.com/");  
  95.             a2.setTitle("解绑账号");  
  96.             ArrayList<Articles>ar=new ArrayList<>();  
  97.             ar.add(a1);ar.add(a2);//  
  98.             smsg.setArticles(ar);//输入的消息包含两项  
  99.             break;  
  100.               
  101.         case "hupu":  
  102.             smsg.setMsgType("news");  
  103.             smsg.setArticleCount("2");  
  104.               
  105.             Articles a21=new Articles();  
  106.             a21.setDescription("最后加参即可");  
  107.             a21.setPicUrl("http://i3.hoopchina.com.cn/user/926/1126926/1331427828_045275.jpg");  
  108.             a21.setUrl("https://m.hupu.com/");  
  109.             //a21.setUrl("http://211.87.225.204/YJS/admin.html?user="+msg.getFromUserName());  
  110.             a21.setTitle("访问虎扑");  
  111.               
  112.             Articles a22=new Articles();  
  113.             a22.setDescription("描述");  
  114.             a22.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");  
  115.             a22.setUrl("http://www.qq.com/");  
  116.             a22.setTitle("今日新闻");  
  117.             ArrayList<Articles>ar2=new ArrayList<>();  
  118.             ar2.add(a21);ar2.add(a22);//  
  119.             smsg.setArticles(ar2);//输入的消息包含两项  
  120.             break;  
  121.               
  122.         case "am":  
  123.             smsg.setMsgType("news");  
  124.             smsg.setArticleCount("2");  
  125.               
  126.             Articles am1=new Articles();  
  127.             am1.setDescription("最后加参即可");  
  128.             am1.setPicUrl("http://i3.hoopchina.com.cn/user/926/1126926/1331427828_045275.jpg");  
  129.             am1.setUrl("https://m.hupu.com/");  
  130.             //a21.setUrl("http://211.87.225.204/YJS/admin.html?user="+msg.getFromUserName());  
  131.             am1.setTitle("绑定账号");  
  132.               
  133.             Articles am2=new Articles();  
  134.             am2.setDescription("描述");  
  135.             am2.setPicUrl("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1173791250,1086762243&fm=23&gp=0.jpg");  
  136.             am2.setUrl("http://www.qq.com/");  
  137.             am2.setTitle("解绑账号");  
  138.             ArrayList<Articles>articles=new ArrayList<>();  
  139.             articles.add(am1);articles.add(am2);//  
  140.             smsg.setArticles(articles);//输入的消息包含两项  
  141.             break;  
  142.           
  143.         case "finish":  
  144.             smsg.setMsgType("text");  
  145.             smsg.setContent("我还没有写");  
  146.             break;  
  147.               
  148.         default:  
  149.             break;  
  150.         }  
  151.           
  152.           
  153.   
  154.     }  
  155.   
  156.     private void event_view() {  
  157.         // 跳转菜单的click事件  
  158.   
  159.     }  
  160.   
  161. }  

Service_text

这里我主要写了对文字的回复,文字书写是最简单的用户输入方式,这里只是为了学习使用,写了几个样例。另外为了测试是否更改成功,会进行一些小修改,如 

[java] view plain copy
  1. case "6":  
  2.             stext="你说 6,测试于5-24 8:36";  
  3.               
  4.             break;  


目前的全部代码如下:


[java] view plain copy
  1. package service;  
  2.   
  3. import msgbean.SendMsg;  
  4.   
  5. public class Service_text extends Service_base {  
  6.     // 普通消息的回复接口  
  7.     //应该有一系列的回复策略  
  8.     private SendMsg smsg;  
  9.       
  10.     private String stext="我不知道你在说啥,回复数字1-6,有不同的服务,你可以挨个试试,不过我还都没写";  
  11.       
  12.     @Override  
  13.     public SendMsg excute() {  
  14.         smsg=new SendMsg();  
  15.         smsg.setToUserName(msg.getFromUserName());  
  16.         smsg.setFromUserName(msg.getToUserName());  
  17.         smsg.setCreateTime(System.currentTimeMillis()/1000+"");  
  18.         //暂时的策略是这样  
  19.         smsg.setMsgType("text");  
  20.         switch (msg.getContent().trim()) {  
  21.         case "1":  
  22.             stext="你说 1,\n 测试换行我这边写没有功能";  
  23.               
  24.             break;  
  25.         case "2":  
  26.             stext="你说 2,\t 测试t 我这边写没有功能";  
  27.               
  28.             break;  
  29.         case "3":  
  30.             stext="你说 3,我这边写没有功能3";  
  31.               
  32.             break;  
  33.         case "4":  
  34.             stext="你说 4,我这边写没有功能4";  
  35.               
  36.             break;  
  37.         case "5":  
  38.             stext="你说5,我这边写没有功能5";  
  39.               
  40.             break;  
  41.         case "6":  
  42.             stext="你说 6,测试于5-24 8:36";  
  43.               
  44.             break;  
  45.               
  46.   
  47.         default:  
  48.               
  49.             break;  
  50.         }  
  51.         smsg.setContent(stext);  
  52.         return smsg;  
  53.           
  54.           
  55.     }  
  56.   
  57. }  

这就是被动服务的逻辑处理,至此差不多整个处理流程的学习和更改可以到一段落。会慢慢写起来跳转的页面内容,实现对问卷信息的填写和查看。
原创粉丝点击