• 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。对于一般的服务号而言,...

    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。对于一般的服务号而言,模板ID行业之类会事先配置好,所以用代码控制的只有发送了。

    准备工作:已通过认证的服务号或者测试公众号

    一、使用规则

    • 所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口
    • 需要选择公众账号服务所处的2个行业,每月可更改1次所选行业
    • 在所选择行业的模板库中选用已有的模板进行调用
    • 每个账号可以同时使用25个模板
    • 当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制,以公众号MP后台开发者中心页面中标明的数字为准

    二、接口文档规范

    • 模板消息调用时主要需要模板ID和模板中各参数的赋值内容
    • 模板中参数内容必须以".DATA"结尾,否则视为保留字
    • 模板保留符号"{{ }}"

    测试公众号可以随意定义,正式的必须用模板库中的

    三、 封装模板消息

    以下是我使用的模板消息示例

    {{first.DATA}}
    旅行活动名称:{{keyword1.DATA}}
    订单金额:{{keyword2.DATA}}
    旅行时间:{{keyword3.DATA}}
    参与人数:{{keyword4.DATA}}
    {{remark.DATA}}

    POST数据示例如下:

          {
               "touser":"OPENID",
               "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
               "url":"http://weixin.qq.com/download",  
               "miniprogram":{
                 "appid":"xiaochengxuappid12345",
                 "pagepath":"index?foo=bar"
               },          
               "data":{
                       "first": {
                           "value":"恭喜你购买成功!",
                           "color":"#173177"
                       },
                       "keynote1":{
                           "value":"巧克力",
                           "color":"#173177"
                       },
                       "keynote2": {
                           "value":"39.8元",
                           "color":"#173177"
                       },
                       "keynote3": {
                           "value":"2014年9月22日",
                           "color":"#173177"
                       },
                       "remark":{
                           "value":"欢迎再次购买!",
                           "color":"#173177"
                       }
               }
           }
    @Getter
    @Setter
    @NoArgsConstructor
    public class WechatTemplateMessage implements Serializable {
    
        private static final long serialVersionUID = -1035536196053732735L;
    
        @SerializedName("touser")
        private String touser; //接收者openid
    
        @SerializedName("template_id")
        private String templateId; //模板ID
    
        @NotRequire//只是个标识
        private String url; //模板跳转链接
    
        // "miniprogram":{ 未加入
        // "appid":"xiaochengxuappid12345",
        // "pagepath":"index?foo=bar"
        // },
    
        private Map<String, Map<String, String>> data; //data数据
    
        public WechatTemplateMessage(String templateId, String url) {
            this.templateId = templateId;
            this.url = url;
        }
    
        /**
         * 参数
         *
         * @param value
         * @param color 可不填
         * @return
         */
        public Map<String, String> item(String value, String color) {
            Map<String, String> params = new HashMap<>();
            params.put("value", value);
            params.put("color", color == null ? "#000000" : color);
            return params;
        }
    
        public String toJson() {
            return JsonUtil.toJson(this);
        }
    }

    四、发送模板消息

    // 发送模板消息
    public static final String SEND_TEMPLATE_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/template/send";
    /**
     * 发送模板消息
     * 
     * @param accessToken
     * @param data
     * @return 状态
     */
    @Override
    public TemplateMessageResult sendTemplate(String accessToken, String data) {
        Map<String, String> params = new HashMap<>();
        params.put("access_token", accessToken);
        String result = HttpUtil.doPost(wechatMessageConfig.getSendTemplateMessageUrl(),
                params, data);
        return JsonUtil.fromJson(result, TemplateMessageResult.class);
    }
    
    

    五、根据业务调用方法

    一般注册成功、支付成功、支付失败等等情况下会用到,以下只是个Junit

    package com.phil.wechat.message.service.impl;
    
    import com.phil.WechatMainApplication;
    import com.phil.wechat.auth.service.WechatAuthService;
    import com.phil.wechat.message.model.template.request.WechatTemplateMessage;
    import com.phil.wechat.message.service.WechatTemplateMessageService;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.ActiveProfiles;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    import java.util.HashMap;
    import java.util.Map;
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @SpringBootTest(classes = WechatMainApplication.class)
    @ActiveProfiles("dev")
    public class WechatTemplateMessageServiceImplTest {
    
        @Autowired
        private WechatAuthService wechatAuthService;
    
        @Autowired
        private WechatTemplateMessageService wechatTemplateMessageService;
    
        @Test
        public void testSendTemplate() {
            String accessToken = wechatAuthService.getAccessToken();
            Map<String, Map<String, String>> params = new HashMap<>();
            WechatTemplateMessage template = new WechatTemplateMessage();
            params.put("keyword1", template.item("8.1发现尼泊尔—人文与自然的旅行圣地", null));
            params.put("keyword2", template.item("5000元", null));
            params.put("keyword3", template.item("2017.1.2", null));
            params.put("keyword4", template.item("5", null));
            template.setTemplateId("Ub2oYYFPf8ofmA17H31Zqu9Z_HLycZ7MC-Dx_Se1Nkw");
            template.setTouser("ovHQ5v6CW3INkWUsCl3olODif0cc");
            template.setUrl("http://music.163.com/#/song?id=27867140");
            template.setData(params);
            System.out.println(wechatTemplateMessageService.sendTemplate(accessToken, template.toJson()));
            //ResultState(errcode=0, errmsg=ok)
        }
    }

    具体源码:https://github.com/philjing/my_wechat/tree/master/src/main/java/com/phil/wechat/message/service

     

    一键加群

     

    展开全文
  • 很奇怪,装了新版本的微信开发者工具,使用模板代码,反而报错。后来百度,发现这样一个解决方案,就ok了。 点击打开链接

    很奇怪,装了新版本的微信开发者工具,使用模板代码,反而报错。后来百度,发现这样一个解决方案,就ok了。

    点击打开链接


    展开全文
  • 微信开发者工具使用教程 如何上传、发布、审核等 2020年3月31日录 - 微信开发者工具使用教程 01-微信开发者工具的下载和安装 02-微信小程序账号的注册、登录、appid的获取 03-微信小程序开发和公众号开发模式的切换 ...
  • 运行uni-app在微信开发者工具

    运行uni-app在微信开发者工具下注意的问题:

    (1)在点击工具栏里的文件 -> 新建 -> 项目:

    在这里插入图片描述

    (2)选择uni-app,输入工程名,如:hello-uniapp,点击创建,即可成功创建 uni-app。点击模板里的 Hello uni-app 即可体验官方示例。

    在这里插入图片描述

    (3)下载微信开发者工具

    在这里插入图片描述

    (4)运行uni-app

    在微信开发者工具里运行:进入hello-uniapp项目,点击工具栏的运行 -> 运行到小程序模拟器 -> 微信开发者工具,即可在微信开发者工具里面体验uni-app。
    在这里插入图片描述

    如果是第一次使用,需要先配置小程序ide的相关路径,才能运行成功。

    如下图,需在输入框输入微信开发者工具的安装路径。 若HBuilderX不能正常启动微信开发者工具,需要开发者手动启动,然后将uni-app生成小程序工程的路径拷贝到微信开发者工具里面,在HBuilderX里面开发,在微信开发者工具里面就可看到实时的效果。

    在这里插入图片描述

    报错提示:
    在这里插入图片描述

    处理方案:
    在这里插入图片描述

    展开全文
  • 微信开发者工具的快捷键


    微信开发者工具的快捷键







    微信开发者工具的所有快捷键




    微信小程序教程系列

    相关连接:http://blog.csdn.net/michael_ouyang/article/details/54700871


    注册上线篇

    ------------------------------------------------------------

    微信小程序之如何注册微信小程序

    微信小程序之小程序上线


    基础篇

    ------------------------------------------------------------

    微信开发者工具的快捷键

    微信小程序的文件结构 —— 微信小程序教程系列(1)

    微信小程序的生命周期实例演示 —— 微信小程序教程系列(2)

    微信小程序的动态修改视图层的数据 —— 微信小程序教程系列(3)

    微信小程序的新建页面 —— 微信小程序教程系列(4)

    微信小程序的如何使用全局属性 —— 微信小程序教程系列(5)

    微信小程序的页面跳转 —— 微信小程序教程系列(6)

    微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)

    微信小程序的作用域和模块化 —— 微信小程序教程系列(8)

    微信小程序视图层的数据绑定 —— 微信小程序教程系列(9)

    微信小程序视图层的条件渲染 —— 微信小程序教程系列(10)

    微信小程序视图层的列表渲染 —— 微信小程序教程系列(11)

    微信小程序视图层的模板 —— 微信小程序教程系列(12)

    微信小程序之wxss —— 微信小程序教程系列(13)

    微信小程序的网络请求 —— 微信小程序教程系列(14)

    微信小程序的百度地图获取地理位置 —— 微信小程序教程系列(15)

    微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)

    微信小程序获取系统日期和时间 —— 微信小程序教程系列(17)

    微信小程序之上拉加载和下拉刷新 —— 微信小程序教程系列(18)

    微信小程序之组件 —— 微信小程序教程系列(19)

    微信小程序之微信登陆 —— 微信小程序教程系列(20)


    实战篇

    ------------------------------------------------------------

    微信小程序之顶部导航栏实例 —— 微信小程序实战系列(1)

    微信小程序之上拉加载(分页加载)实例 —— 微信小程序实战系列(2)

    微信小程序之轮播图实例 —— 微信小程序实战系列(3)

    微信小程序之仿android fragment之可滑动的底部导航栏实例 —— 微信小程序实战系列(4)

    微信小程序之登录页实例 —— 微信小程序实战系列(5)

    微信小程序之自定义toast实例 —— 微信小程序实战系列(6)

    微信小程序之自定义抽屉菜单(从下拉出)实例 —— 微信小程序实战系列(7)

    微信小程序之自定义模态弹窗(带动画)实例 —— 微信小程序实战系列(8)


    电商篇

    ------------------------------------------------------------

    微信小程序之侧栏分类 —— 微信小程序实战商城系列(1)

    微信小程序之仿淘宝分类入口 —— 微信小程序实战商城系列(2)

    微信小程序之购物数量加减 —— 微信小程序实战商城系列(3)

    微信小程序之商品属性分类 —— 微信小程序实战商城系列(4)

    微信小程序之购物车 —— 微信小程序实战商城系列(5)


    未完待续。。。


    更多小程序的教程:http://blog.csdn.net/column/details/14653.html



    展开全文
  • 1.微信开发者工具自行到网上下载即可 2.打开微信开发者工具,如图所示: 点击创建后,如下图所示:

    个人资源与分享网站:http://xiaocaoshare.com/

    1.微信开发者工具自行到网上下载即可

    2.打开微信开发者工具,如图所示:

    点击创建后,如下图所示:

    #### 项目结构

    ```
    └─ empty-folder/ ·································· 项目所在目录
       ├─ pages/ ······································ 页面目录
       │  ├─ index/ ··································· index页面
       │  │  ├─ index.js ······························ index页面逻辑
       │  │  ├─ index.wxml ···························· index页面结构
       │  │  └─ index.wxss ···························· index页面样式
       │  └─ logs/ ···································· logs页面
       │     ├─ logs.js ······························· logs页面逻辑
       │     ├─ logs.wxml ····························· logs页面结构
       │     └─ logs.wxss ····························· logs页面样式
       ├─ utils/ ······································ 公共脚本目录
       │  └─ util.js ·································· 工具脚本
       ├─ app.js ······································ 应用程序逻辑
       ├─ app.json ···································· 应用程序配置
       └─ app.wxss ···································· 应用程序公共样式
    ```

    #### 页面结构

    每个页面组件也分为四个文件组成:

    ##### [page-name].js

    页面逻辑文件,用于创建页面对象,以及处理页面生命周期控制和数据处理

    ##### [page-name].json

    设置当前页面工作时的window的配置,此处会覆盖app.json中的window设置,也就是说只可以设置window中设置的属性

    ##### [page-name].wxml

    > wxml指的是Wei Xin Markup Language

    用于定义页面中元素结构的,语法遵循XML语法,注意是XML语法,不是HTML语法,不是HTML语法,不是HTML语法

    ##### [page-name].wxss

    > wxml指的是Wei Xin Style Sheet

    用于定义页面样式的,语法遵循CSS语法,扩展了CSS基本用法和长度单位(主要就是rpx响应式像素)

    ### 项目配置

    > 相关链接:
    > - [官方文档](https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html)
    > - [生成配置文件](https://weapptool.com/start.html)

    小程序中的配置文件分为两种:

    - 全局配置文件,根目录下的app.json
    - 页面配置文件,每个页面目录下的[page-name].json

    ##### app.json

    项目配置声明文件(指定项目的一些信息,比如导航栏样式颜色等等)

    ```javascript
    {
      // 当前程序是由哪些页面组成的(第一项默认为初始页面)
      // 所有使用到的组件或页面都必须在此体现
      // https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html#pages
      "pages": [ ... ],
      // 应用程序窗口设置
      // https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html#window
      "window": { ... },
      // 应用导航栏设置
      // https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html#tabBar
      "tabBar": { ... },
      // 网络超时设置
      // https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html#networkTimeout
      "networkTimeout": {},
      // 是否在控制台输出调试信息
      // https://mp.weixin.qq.com/debug/wxadoc/dev/framework/config.html#debug
      "debug": true
    }
    ```

    ##### [page-name].json

    用于指定特定页面工作时,window的设置:

    ```javascript
    {
      // 导航条背景色
      "navigationBarBackgroundColor": "#35495e",
      // 导航条前景色(只能是white/black)
      "navigationBarTextStyle": "white",
      // 导航条文本
      "navigationBarTitleText": "电影 « 豆瓣",
      // 窗口背景颜色
      "backgroundColor": "#fff",
      // 窗口前景色
      "backgroundTextStyle": "dark",
      // 是否开启下拉刷新
      "enablePullDownRefresh": true
    }
    ```

    ### 逻辑层分析

    #### 应用程序逻辑`app.js`

    `app.js`作为项目主入口文件,用于创建应用程序对象

    ```javascript
    // App函数是一个全局函数,用于创建应用程序对象
    App({
      // ========== 全局数据对象(可以整个应用程序共享) ==========
      globalData: { ... },

      // ========== 应用程序全局方法 ==========
      method1 (p1, p2) { ... },
      method2 (p1, p2) { ... },

      // ========== 生命周期方法 ==========
      // 应用程序启动时触发一次
      onLaunch () { ... },

      // 当应用程序进入前台显示状态时触发
      onShow () { ... },

      // 当应用程序进入后台状态时触发
      onHide () { ... }
    })
    ```

    也就是说,当应用程序启动时会自动执行项目目录下的`app.js`文件。

    在`app.js`中通过调用全局`App([option])`方法创建一个应用程序实例。

    其中通过参数指定的一些特定的方法,会在特定的执行时机去执行,也就是说通常所说的生命周期事件方法。

    属性 | 类型 | 描述 | 触发时机
    -----|------|------|---------
    onLaunch | Function | 生命周期函数--监听小程序初始化 | 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
    onShow | Function | 生命周期函数--监听小程序显示 | 当小程序启动,或从后台进入前台显示,会触发 onShow
    onHide | Function | 生命周期函数--监听小程序隐藏 | 当小程序从前台进入后台,会触发 onHide

    也可以定义任意其他的对象成员(例如:方法和属性),这些成员可以在内部直接使用,或者外部通过获取`app`对象调用:

    属性 | 类型 | 描述
    -----|------|------
    其他 | Any | 开发者可以添加任意的函数或数据到 Object 参数中,用 this 可以访问,一般用于存放业务逻辑配置,比如:API地址

    app.js

    ```javascript
    App({
      data1: '123',
      data2: { message: 'hello world' },
      api: {
        list: 'https://github.com/zce/',
        detail: 'https://github.com/zce/',
      },
      foo () {
        return 'bar'
      }
    })
    ```

    other.js

    ```javascript
    // getApp 也是全局函数,可以在任意地方调用,用于获取全局应用程序实例对象
    var app = getApp()
    console.log(app.data1)
    console.log(app.data2)
    console.log(app.foo())
    ```


    #### 页面逻辑`[page-name].js`

    `[page-name].js`是一个页面的重要组成部分,用于创建页面对象

    ```javascript
    // 获取全局应用程序对象
    const app = getApp()

    // Page也是一个全局函数,用来创建页面对象
    Page({
      // ========== 页面数据对象(可以暴露到视图中,完成数据绑定) ==========
      data: { ... },

      // ========== 页面方法(可以用于抽象一些公共的行为,例如加载数据,也可以用于定义事件处理函数) ==========
      method1 (p1, p2) { ... },
      method2 (p1, p2) { ... },

      // ========== 生命周期方法 ==========
      // 页面加载触发
      onLoad () { ... }

      ...
    })
    ```

    在应用程序执行到当前页面时,会执行当前页面下对应的`[page-name].js`文件。
    在`[page-name].js`中通过调用全局`Page([option])`方法创建一个页面实例。

    ##### `Page([option])`方法`[option]`参数说明

    属性 | 类型 | 描述
    ---- | ---- | ----
    data | Object | 页面的初始数据
    onLoad | Function | 生命周期函数--监听页面加载
    onReady | Function | 生命周期函数--监听页面初次渲染完成
    onShow | Function | 生命周期函数--监听页面显示
    onHide | Function | 生命周期函数--监听页面隐藏
    onUnload | Function | 生命周期函数--监听页面卸载
    onPullDownRefreash | Function | 页面相关事件处理函数--监听用户下拉动作
    其他 | Any | 开发者可以添加任意的函数或数据到 object 参数中,用 this 可以访问


    ### 视图层分析

    #### `[page-name].wxml`页面结构

    `WXML(WeiXin Markup Language)`是`MINA框架`设计的一套标签语言,基于`XML`。

    结合一些基础组件、事件系统、模板数据绑定,可以构建出页面的结构。

    简单来说:wxml ≈ xml + 事件系统 + 模板引擎

    例如:

    ```javascript
    // js
    Page({
      data: {
        todos: [
          { text: 'JavaScript', completed: false },
          { text: 'JavaScript+', completed: false },
          { text: 'JavaScript++', completed: false }
        ]
      },
      completed (e) { ... }
    })
    ```

    ```xml
    <!-- wxml -->
    <view>
      <view wx:for="{{ todos }}">
        <block wx:if="{{ !item.completed }}">
          <text>{{ item.text }}</text>
          <button bindtap="completed" data-item-index="{{ index }}"> √ </button>
        </block>
      </view>
    </view>
    ```


    #### `[page-name].wxss`页面样式

    `WXSS(WeiXin Style Sheets)`是`MINA框架`设计的一套标签语言,基于`XML`。

    `WXSS`用来决定了在`WXML`中定义的组件应该怎么显示。

    为了适应广大的前端开发者,我们的`WXSS`具有`CSS`大部分特性。 同时为了更适合开发微信小程序,我们对`CSS`进行了扩充以及修改。

    与`CSS`相比我们扩展的特性有:

    - 尺寸单位
    - 样式导入(CSS也有)

    ##### 尺寸单位

    rpx(responsive pixel): 可以根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

    rem(root em): 规定屏幕宽度为20rem;1rem = (750/20)rpx 。

    设备 | rpx换算px (屏幕宽度/750) | px换算rpx (750/屏幕宽度) | rem换算rpx (750/20)
    ---- | ------------------------ | ------------------------ | ------------------------
    iPhone5 | 1rpx = 0.42px | 1px = 2.34rpx | 1rem = 37.5rpx
    iPhone6 | 1rpx = 0.5px | 1px = 2rpx | 1rem = 37.5rpx
    iPhone6s | 1rpx = 0.552px | 1px = 1.81rpx | 1rem = 37.5rpx

    > - **建议:** 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
    > - **注意:** 在较小的屏幕上不可避免的会有一些毛刺,请在开发时尽量避免这种情况。

    ##### 样式导入

    使用`@import`语句可以导入外联样式表,`@import`后跟需要导入的外联样式表的相对路径,用`;`表示语句结束。

    ```css
    @import "common.wxss";
    text {
      background-color: #ff0;
    }
    ```

    ##### 选择器

    目前只支持如下选择器

    选择器 | 样例 | 样例描述
    ------ | ---- | --------
    .class | .intro | 选择所有拥有 class="intro" 的组件
    #id | #firstname | 选择拥有 id="firstname" 的组件
    element | view | 选择所有 view 组件
    element, element | view | checkbox 选择所有文档的 view 组件和所有的 checkbox 组件
    ::after | view::after | 在 view 组件后边插入内容
    ::before | view::before | 在 view 组件前边插入内容

    ##### 全局样式与局部样式

    定义在`app.wxss`中的样式为全局样式,作用于每一个页面。在`[page-name].wxss`文件中定义的样式为局部样式,只作用在对应的页面,并会覆盖`app.wxss`中相同的选择器。

    展开全文
  • 微信开发者工具很好的集成了java的开发环境,是java初学者很好的练手软件。准备条件:注册微信小程序开发者账号,需要用到微信账号。 网址:https:...
  • 填入我们在登入微信公众平台刚刚申请到的小程序的 AppID 如果不填appid创建的项目有些功能会无法使用,如果创建的时候忘了,我们可以在创建好之后配置文件里配置 在这里我选择的是不使用云服务 创建项目成功后,...
  • 为了保证用户不受到骚扰,在开发者出现需要主动提醒、通知用户时,才允许开发者在公众平台网站中模板消息库中选择模板,选择后获得模板ID,再根据模板ID向用户主动推送提醒、通知消息模板消息调用时主要需要...
  • 微信公众平台开发者文档 微信公众平台开发概述 微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台,而公众平台开发接口则是提供服务的基础,开发者在公众平台网站中创建公众号、获取接口权限后...
  • 如果想用微信提供的远程仓库而没有开通代码管理的话可以一键去开通,开通后新建一个仓库即项目(这时候会提示你: 如果想要拉取和提交项目,先设置密码,按提示操作就可以了 )也可以新建项目组后再新建项目 ...
  • 正文微信小程序-详解微信登陆、微信支付、模板消息微信公众平台近日悄然开始内测微信小程序(微信公众号)功能,引来无数开发者和普通用户关注,微信支付的能力,是随着小程序的发布一并推出的,具有介绍如下wx.login...
  • 微信开发,模板消息为什么首行会自动缩进? 用的是微信测试号,添加的确定是模板正确的。 有没办法设置格式?
  • 微信公众号开发之消息模板 这个消息模板是以订阅号进行模板配置的,如果是认证号就更加简单了,不用自己配置!!! 只需要知道模板ID,和模板的样式就行。 微信公众号发送消息模板,当前首先要关注这个公众号,...
  • 最近在做微信小程序,为了让用户能更加方便的获取到小程序内部的通知,便想着用模板消息来解决此类问题。首先介绍一下两种方法 第一种是传统的按照微信开发文档来实现模板消息的获取,首先要明确的是你要有一个第三...
  • 方法 ... Download ZIP 解压,找到dist文件夹,在./weui-wxss-master/dist/ 打开“微信开发者工具”,选择“小程序” > “导入项目” > 名称随意,目录选择刚才的dist文件夹, AppID处填写“测...
  • 需求背景基于微信的通知渠道,微信小程序为开发者提供了可以高效触达用户的模板消息能力,在用户本人与小程序页面有交互行为后触发,通过微信聊天列表中的服务通知可快捷进入查看消息,点击查看详情还能跳转到下发...
  • 微信小程序模板消息无限制群发
  • 微信公众平台技术文档:模板消息接口一、概述模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对...
  • 微信公众平台模板消息开发-微信开发14(PHP) 大秦电商创始人,专注网络技...
1 2 3 4 5 ... 20
收藏数 14,602
精华内容 5,840