• 小程序开发流程(java后端)


    一、准备工作

      1、参考https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1476434677599  先注册账号;

      2、下载官网前端开发工具 https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461

      3、其他的接口及文档请参考 https://mp.weixin.qq.com/debug/wxadoc/introduction/index.html?t=2018125

    二、java后端

     1、先去github下载sdk https://github.com/Wechat-Group/weixin-java-tools

      2、demo参考    https://github.com/binarywang/weixin-java-miniapp-demo      注: 此demo是采用了jdk8和spring boot开发的。

    三、本人折腾过程

        我本地是采用jdk7,spring mvc和mybatis的搭建框架;

     1、在resources/properties新增wxconfig.properties文件,用于配置

    appid=填写自己注册的小程序
    appsecret=密钥(通过获取或是重置方式取到,在客服消息转发需要用)
    token=自己定义
    aeskey=加密
    templateId=推送消息模块ID,也是自己在小程序后台-->模板消息中获取;
    msgDataFormat=JSON (传送的格式还有或者是XML)
    domain=推送模板消息时,如需要点详情时(因为开发小程序有可能是有开发或线上二个域名的)
    detail=详情的链接,和在app.json中配置的一样

    2、新增一类来加载此配置文件并读取相关的内容到静态变量中;

      1 import org.apache.log4j.Logger;
      2 
      3 import java.util.ResourceBundle;
      4 
      5 /**
      6  * @author foreach03
      7  * @company 深圳市
      8  * @create 2018/1/10 13:31
      9  */
     10 public class WxConfigUtils {
     11     private static Logger log = Logger.getLogger(WxConfigUtils.class);
     12     private static String appid;
     13     private static String appsecret;
     14     private static String token;
     15     private static String aeskey;
     16     private static String templateId;
     17     private static String msgDataFormat;
     18     private static String domain;
     19     private static String detail;
     20 
     21     private WxConfigUtils(){
     22 
     23     }
     24     static {
     25         // 加载wxcofig配置文件
     26         ResourceBundle bundle = ResourceBundle.getBundle("properties/wxconfig");
     27         if (bundle == null) {
     28             throw new IllegalArgumentException(
     29                     "[wxcofig.properties] is not found!");
     30         }
     31         appid = bundle.getString("appid");
     32         appsecret = bundle.getString("appsecret");
     33         token = bundle.getString("token");
     34         aeskey = bundle.getString("aeskey");
     35         templateId = bundle.getString("templateId");
    37 msgDataFormat = bundle.getString("msgDataFormat"); 38 domain = bundle.getString("domain"); 39 detail = bundle.getString("detail"); 40 41 42 log.info("appid is:" + appid); 43 log.info("appsecret is:" + appsecret); 44 log.info("token is:" + token); 45 log.info("aeskey is:" + aeskey); 46 log.info("templateId is:" + templateId); 47 log.info("msgDataFormat is:" + msgDataFormat); 48 log.info("domain is:" + domain); 49 log.info("detail is:" + detail); 50 } 51 52 public static String getAppid() { 53 return appid; 54 } 55 56 public static void setAppid(String appid) { 57 WxConfigUtils.appid = appid; 58 } 59 60 public static String getAppsecret() { 61 return appsecret; 62 } 63 64 public static void setAppsecret(String appsecret) { 65 WxConfigUtils.appsecret = appsecret; 66 } 67 68 public static String getToken() { 69 return token; 70 } 71 72 public static void setToken(String token) { 73 WxConfigUtils.token = token; 74 } 75 76 public static String getAeskey() { 77 return aeskey; 78 } 79 80 public static void setAeskey(String aeskey) { 81 WxConfigUtils.aeskey = aeskey; 82 } 83 84 public static String getTemplateId() { 85 return templateId; 86 } 87 88 public static void setTemplateId(String templateId) { 89 WxConfigUtils.templateId = templateId; 90 } 91 92 public static String getMsgDataFormat() { 93 return msgDataFormat; 94 } 95 96 public static void setMsgDataFormat(String msgDataFormat) { 97 WxConfigUtils.msgDataFormat = msgDataFormat; 98 } 99 100 public static String getDomain() { 101 return domain; 102 } 103 104 public static void setDomain(String domain) { 105 WxConfigUtils.domain = domain; 106 } 107 108 public static String getDetail() { 109 return detail; 110 } 111 112 public static void setDetail(String detail) { 113 WxConfigUtils.detail = detail; 114 } 115 116 }

    3、新增一个常量类WXMPConfig,其实也可以不用此类。

     1 /**
     2  * @author foreach03
     3  * @company 深圳市
     4  * @create 2018/1/10 13:37
     5  */
     6 public class WXMPConfig {
     7     // 服务号常量定义
     8     public static final String APPID = WxConfigUtils.getAppid();//测试
     9     public static final String APPSECRET = WxConfigUtils.getAppsecret();
    10     public static final String TOKEN =WxConfigUtils.getToken();
    11     public static final String ENCODINGAESKEY =WxConfigUtils.getAeskey();
    12     public static final String TEMPLATEID = WxConfigUtils.getTemplateId();
    13     public static final String MSGDATAFORMAT = WxConfigUtils.getMsgDataFormat();
    14     public static final String DOMAIN = WxConfigUtils.getDomain();
    15     public static final String DETAIL = WxConfigUtils.getDetail();
    16 
    17     private WXMPConfig(){
    18 
    19     }
    20 }

    4、新建一个工厂类WxMpServiceFactory,用于初始化maservice

     1 import cn.binarywang.wx.miniapp.api.WxMaService;
     2 import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
     3 import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
     4 import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
     5 import com.***.config.constant.WXMPConfig;
     6 
     7 /**
     8  * @author 
     9  * @company 深圳市
    10  * @create 2018/1/10 13:25
    11  */
    12 public class WxMpServiceFactory {
    13     private static WxMaService instance;
    14 
    15     private static WxMaInMemoryConfig wxMaConfigStorage;
    16     private static WxMaMessageRouter router = new WxMaMessageRouter(getInstance());
    17     private WxMpServiceFactory() {
    18         // ......
    19     }
    20 
    21     // 产生WxmaService实例
    22     public static WxMaService getInstance() {
    23         if(wxMaConfigStorage == null){
    24             wxMaConfigStorage = new WxMaInMemoryConfig();
    25             wxMaConfigStorage.setAppid(WXMPConfig.APPID);
    26             wxMaConfigStorage.setSecret(WXMPConfig.APPSECRET);
    27             wxMaConfigStorage.setToken(WXMPConfig.TOKEN);
    28             wxMaConfigStorage.setAesKey(WXMPConfig.ENCODINGAESKEY);
    29             wxMaConfigStorage.setMsgDataFormat(WXMPConfig.MSGDATAFORMAT);
    30         }
    31 
    32         if (instance == null) {
    33             instance = new WxMaServiceImpl();
    34             instance.setWxMaConfig(wxMaConfigStorage);
    35         }
    36 
    37         return instance;
    38     }
    39 
    40     public static WxMaInMemoryConfig getWxMaConfigStorage() {
    41         return wxMaConfigStorage;
    42     }
    43 
    44     public static void setWxMaConfigStorage(WxMaInMemoryConfig wxMpConfigStorage) {
    45         WxMpServiceFactory.wxMaConfigStorage = wxMpConfigStorage;
    46     }
    47 
    48     public static void setInstance(WxMaService instance) {
    49         WxMpServiceFactory.instance = instance;
    50     }
    51 
    52     public static WxMaMessageRouter getRouter() {
    53         return router;
    54     }
    55 
    56     public static void setRouter(WxMaMessageRouter router) {
    57         WxMpServiceFactory.router = router;
    58     }
    59 
    60 }

     5、这样在controller类上就可以通过

      private WxMaService wxService= WxMpServiceFactory.getInstance(); 来初始化;

     6、如需要发送模板消息的

          这里需要注意的是:formid只能提交的那openId才可以使用;

       如果想推送很多的消息的话,那就让前端更可能的收集多一些formId

    1  wxService.getMsgService().sendTemplateMsg(WxMaTemplateMessage.builder()
    2                         .templateId(自己配置的模板ID)
    3                         .formId(前端提交的formId)
    4                         .data(datalist)
    5                         .toUser(要推送的openid)
    6                          .page(就是域名+detail了)
    7                         .build());

    7、关于一些跳坑的案例,可以参考    http://blog.csdn.net/qq_38530880/article/details/72930341

  • 相关阅读:
    阿里云服务器ECS centos_7 安装jdk环境
    Spring Data Jpa 投影(Projection)的用法
    win10 docker 部署微服务
    centos 安装docker
    VMware 启动 虚拟机后一直黑屏
    VMware 新建虚拟机选择操作系统的时候提示,此主机不支持64位客户机操作系统,此系统无法运行
    mysql 表名全变小写的解决(windows)
    docker: Error response from daemon: driver failed programming external connectivity on endpoint jovial_morse (71d0315110605c3812f7255c7072f5d38512118a4635feaf84cdc170d3bee8d1): Error starting userland
    win10 docker部署springboot项目
    nginx failed (1113: No mapping for the Unicode character exists in the target multi-byte code page)
  • 原文地址:https://www.cnblogs.com/jyluo03/p/8404251.html
Copyright © 2020-2023  润新知