精华内容
下载资源
问答
  • 最近在做微信小程序,为了让用户能更加方便的获取到小程序内部的通知,便想着用模板消息来解决此类问题。首先介绍一下两种方法 第一种是传统的按照微信开发文档来实现模板消息的获取,首先要明确的是你要有一个第三...
  • 基于微信的通知渠道,微信小程序为开发者提供了可以高效触达用户的模板消息能力,在用户本人与小程序页面有交互行为后触发,通过微信聊天列表中的服务通知可快捷进入查看消息,点击查看详情还能跳转到下发消息的小...
  • 微信小程序模板消息推送功能实现代码,含前后端程序(PHP后端)
  • 主要介绍了基于Taro的微信小程序模板消息-获取formId功能模块封装实践,小程序提供了一种能力-模板消息,基于微信的通知渠道,我们为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的...
  • 模板消息由于模板选取不同需要传入参数的名称、值、参数个数也不同
  • 模版消息推送是微信小程序采用的通知形式,用户本人在小程序页面有交互行为后,可触发下发通知,通过微信聊天列表中的服务通知可快捷进入查看消息。此外,点击查看详情还能跳转到下发消息的小程序的指定页面。但是为...
  • 微信小程序模板消息使用说明(官方文档):https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html 为了防止对模板消息的滥用,带来不好的用户体验,小程序对模板消息推送做了相应的限制。
  • 微信小程序模板消息demo,这个是微信小程序中有关模板的使用方式介绍
  • 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。 步骤三:调用接口下发模板消息...
  • 本文实例讲述了微信小程序实现发送模板消息功能。分享给大家供大家参考,具体如下: 一、获取access_token access_token是接口调用的凭证,目前有效期为两个小时,需要定时刷新,重复获取将导致上次获取的access_...
  • 前段时间研究了下微信模板消息:服务通知(开发api:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html)我在过程中遇到的keng,就是post传的 form_id(前提就是在微 ...       一:模板消息 前段时间...
  • 基于laravel实现模板消息发送(微信小程序版),示例代码已给出,有什么问题可以联系作者,保证帮你调试成功,以前看前人的代码看半天还不如自己写一个。
  • 微信小程序模板下载_300多套精品模板,涵盖类型有:点餐,电商,视频,资讯,阅读,社交等等,满足各种小程序开发样式需求
  • 微信小程序模板.zip

    2020-05-15 15:12:25
    包含多个精美微信小程序模板,页面精美,模板可套用,使用简单快捷,供微信小程序开发学习使用!
  • 参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。 一、开发准备: 1.在微信公众平台-小程序的模板中心申请消息模板 二、实现原理: 文档示例:小程序 + ...

    参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。

    一、开发准备:

    1.在微信公众平台-小程序的模板中心申请消息模板


     

    二、实现原理:

    文档示例:小程序 + 接口(PHP)

    小程序部分:

    话不多说,先上效果图:

    示例代码:

    <form bindsubmit="formSubmit" report-submit='true' >
      <view class="btn-area"><button formType="submit">Submit</button></view>
    </form>
    formSubmit: function (e) {
      console.log('form发生了submit事件,formId为:', e.detail)
      var that = this;
      wx.request({
        url: 'https://api.XXX.com/sendTemplateMessage.api',
        data: {
          uid: uid,
          formId: e.detail.formId
        },
        method: 'post',
        header: {'content-type': 'application/x-www-form-urlencoded'}, //使用这种方式后台才能实现获取到数据
        success: function (res) {
          console.log("发送模板:" + res.data)
        }
      })

    注意事项:

    小程序通submit点击事件获formid在安卓和IOS是不一样的,安卓系统中为13位时间戳,而IOS系统中为32位字符串,在做接口请求时,不需要做额外处理。

                           安卓系统                                                                        IOS系统

          

     

    PHP接口部分:

    1.根据微信公众平台 --  设置  --  消息推送 -- URL(服务器地址),在PHP项目配置入口文件,实现请求分发。

    2.验证入口文件,传递token令牌(消息推送的token),进行Signature签名有效性验证,完成之后才能进行消息模板的服务器URL地址配置。

    <?php
        define('SS_START_TIME', microtime(true));
        define('RUN_SS', true);
        require '../ss/ss.php';
        $ss = new ss('xcx');
        $ss->execute('xcx', 'valid', 'xcx');
    ?>
    
    <?php
        // 小程序验证入口文件
        public  function xcx(){
            $type = $token;    //Token(令牌)
            if ($this->checkSignature($type) && isset($_GET['echostr'])){
                echo $_GET['echostr'];
                exit();
            }
        }   
    
        /**
         * 校验微信加密签名
         * @return bool
         */
        private function checkSignature($type = ''){
            // 微信服务器配置Token
            $token = $type;
    
            // 1.将timestamp,token,nonce按字典序排序
            $timestamp = $_GET['timestamp'];
            $nonce = $_GET['nonce'];
            $signature = $_GET['signature'];
    
            $arr = array($timestamp, $token, $nonce);
            sort($arr, SORT_STRING);
    
            // 2.拼接为字符串并sha1加密
            $tmpStr = implode($arr);
            $tmpStr = sha1($tmpStr);
    
            // 3.与signature对比判断是否来自微信服务器
            return $tmpStr == $signature ? true:false;
        }     
    ?>

    可在https://mp.weixin.qq.com/debug/调试获取access_token

    3.微信公众平台-设置-开发设置配置消息推送(需要先将入口文件上传服务器)

    4.在微信公众平台获取相关参数:

    AppID(小程序ID)、AppSecret(小程序密钥)、Token(令牌)、TemplateId(模板id)、EncodingAESKey(消息加密密钥)

    4.1  小程序模板接口

        /*
         *小程序模板消息
         *@param uid 用户id
         *$param template_id 模板id
         *@param form_id 表单提交场景下formId(只能用一次)
         *@param emphasis_keyword 消息加密密钥
        */
        public function sendTemplateMessage($uid,$form_id,$template_id){
            // 检验uid合法性 防止非法越界
            $nickname = "nickname";  // 用户昵称
            // 此openid为小程序的openid切勿与微信自动登录的openid混淆
            $xcx_open['openid'] = "用户openid";
            // openid可以通过PHP接口或者小程序获取
            if ($xcx_open['openid']) {
                $temp_msg = array(
                    'touser' => "{$xcx_open['openid']}",
                    'template_id' => "{$template_id}",
                    'page' => "/pages/index/index",
                    'form_id' => "{$form_id}",
                    'data' => array(
                        'keyword1' => array(
                            'value' => "{$nickname}",
                        ),
                        'keyword2' => array(
                            'value' => date('Y-m-d H:i:s', time()),
                        ),
                        'keyword3' => array(
                            'value' => "好友已完成测试,快去看看吧!",
                        ),
                        'keyword4' => array(
                            'value' => "你收到1封新信件,快去看看吧~",
                        ),
                    ),
                    'emphasis_keyword'=> "{$emphasis_keyword}"
                );
                $res = $this->sendXcxTemplateMsg(json_encode($temp_msg));
                echo "<pre>";var_dump($res);exit;
            }
        }

    4.2 发送小程序模板消息

        /**
         * 发送小程序模板消息
         * @param $data
         * @return array
        */
        public function sendXcxTemplateMsg($data,$appid = "",$appsecret = "")
        {
            // 具体模板格式参考公众平台申请的template_id
            if (!$appid || !$appsecret)
            {
                $appid        = '';    //小程序id
                $appsecret    = '';    //小程序秘钥 
            }
            $access_token = $this->getXcxAccessToken($appid,$appsecret);
            $url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={$access_token}";
            return $this->http_request($url, $data);
        }

    请求数据格式如下:

    {
      "touser": "OPENID",
      "template_id": "TEMPLATE_ID",
      "page": "index",
      "form_id": "FORMID",
      "data": {
          "keyword1": {
              "value": "339208499"
          },
          "keyword2": {
              "value": "2015年01月05日 12:30"
          },
          "keyword3": {
              "value": "腾讯微信总部"
          } ,
          "keyword4": {
              "value": "广州市海珠区新港中路397号"
          }
      },
      "emphasis_keyword": "keyword1.DATA"
    }

    4.3 获取access_token

        /**
         * 获取微信接口调用凭证
         * @param string $appid
         * @param string $appsecret
         * @return mixed
        */
        public function getXcxAccessToken($appid = '', $appsecret = '')
        {
            if (!$appid || !$appsecret)
            {
                $appid        = '';
                $appsecret    = '';
            }
    
            // 缓存获取
            $cache = &factory::cache();
            if (!$cache->get($appid.'xcx_access_token'))
            {
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
                $res = $this->http_request($url);
                // access_token设置到缓存中
                $cache->set($appid.'xcx_access_token', $res['access_token'], 7000);
                return $res['access_token'];
            }
    
            return $cache->get($appid.'xcx_access_token');
        }

    4.4 CURL模拟HTTP请求(POST)

        /**
         * curl模拟http请求GET/POST
         * @param $url
         * @param null $data
         * @return array
         */
        public function http_request($url, $data = null)
        {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            // 以文件流形式返回
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
            if (!empty($data))
            {
                // POST请求
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            }
    
            $output = curl_exec($ch);
            curl_close($ch);
    
            // 返回数组
            return json_decode($output, true);
        }

    传递参数:根据定义接口传递相关参数,用户uid  通过uid获取openid,此openid为小程序的openid, formId 为表单提交场景下,为 submit 事件带上的 formId,formid在安卓和ios下的数据格式和长度不一致,而且小程序获取formid只支持真机调试。

    接口调试:errcode 的合法值

    值	说明
    40037	template_id不正确
    41028	form_id不正确,或者过期
    41029	form_id已被使用
    41030	page不正确
    45009	接口调用超过限额(目前默认每个帐号日调用限额为100万)

    请求成功:

    {
        "state": 1,
        "data": {
            "errcode": 0,
            "errmsg": "ok"
        },
        "info": "successful!"
    }

    至此,推送功能完整实现!

    帮助文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/template-message/sendTemplateMessage.html

     

    【PHPer技术栈】专注后端开发,倡导开源文化,做一个好玩、有趣、有灵魂的PHPer工程师,欢迎大家关注!

    展开全文
  • go语言发送微信小程序模板消息

    千次阅读 2018-12-31 16:33:28
    为了发一条模板消息翻了无数个博客,很多都是把代码一放,其实代码这块很好弄,不就组装个数据调一下API吗,主要是前期工作。我把我遇到的坑给大家总结一下,希望后来人可以少走一些弯路。 微信发送模板消息文档:...

    PS:开发微信的东西是真的心累,一大堆坑!文档写的乱七八糟的,找个东西都得半天。

    为了发一条模板消息翻了无数个博客,很多都是把代码一放,其实代码这块很好弄,不就组装个数据调一下API吗,主要是前期工作。我把我遇到的坑给大家总结一下,希望后来人可以少走一些弯路。

    微信发送模板消息文档:点击查看

    1. 超级大坑!发送接口问题

    文档上是这个接口:

    https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
    

    实际不是的!!!!!是下面这个,看见没,多了一个wxopen,如果你碰到 48001 返回码,看看是不是这出问题了。

    https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN
    
    1. 域名问题

    他们这个必须要配置合法域名,必须是https的,要有SSL证书的,在微信开发工具上可以看到你目前配置的合法域名

    1. 内网穿透问题

    因为formID必须要在真机上才可以获取,所以你最好设置一个内网穿透,让手机能访问到你本地的服务。

    内网穿透工具可以去下面网站上下载,有免费的
    https://www.ngrok.cc

    1. 证书问题
      在腾讯云上下载的证书是下面这个样子的:

    这时你在go语言就不知道用哪个里面的证书了。。。我用的gofram框架,可以这样搞,
    将Apache里面的

    这两个东西,通过下面网站生成一个 .pem证书然后再用到go语言中就好使了。
    https://www.myssl.cn/tools/merge-pem-cert.html
    go语言中这样用

    s.EnableHTTPS("https/ssl.pem", "https/3_pibigstar.com.key")
    s.SetHTTPSPort(7777)
    

    还有一个坑就是,端口不能是443,可能是我本机是Windows,把443端口屏蔽了,如果你一直出现404情况,换个端口!

    大概就些坑,如果你碰到其他的坑可以给我留言,或关注我的微信公众号,希望可以帮到你。

    放代码

    go后端

    import (
    	"bytes"
    	"encoding/json"
    	"fmt"
    	"io/ioutil"
    	"net/http"
    	"time"
    
    	"github.com/pibigstar/go-todo/config"
    	"github.com/pibigstar/go-todo/constant"
    	"github.com/pibigstar/go-todo/models/db"
    )
    
    // 发送模板消息
    
    var (
    	send_template_url    = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=%s"
    	get_access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"
    )
    
    // SendTemplate 发送模板消息
    func SendTemplate(msg *TemplateMsg) (*SendTemplateResponse, error) {
    	msg.Miniprogram.AppID = config.ServerConfig.Appid
    	accessToken, err := getAccessToken(msg.Touser)
    	if err != nil {
    		log.Error("获取accessToken失败")
    		return nil, err
    	}
    	url := fmt.Sprintf(send_template_url, accessToken.AccessToken)
    	data, err := json.Marshal(msg)
    	if err != nil {
    		log.Error("模板消息JSON格式错误", "err", err.Error())
    		return nil, err
    	}
    	client := http.Client{}
    	resp, err := client.Post(url, "application/json", bytes.NewBuffer(data))
    	if err != nil {
    		log.Error("网络错误,发送模板消息失败", "err", err.Error())
    		return nil, err
    	}
    	defer resp.Body.Close()
    	body, _ := ioutil.ReadAll(resp.Body)
    	var templateResponse SendTemplateResponse
    	err = json.Unmarshal(body, &templateResponse)
    	if err != nil {
    		log.Error("解析responseBody错误", "err", err.Error())
    		return nil, err
    	}
    	return &templateResponse, nil
    }
    
    func getAccessToken(openID string) (*GetAccessTokenResponse, error) {
    	var accessTokenResponse GetAccessTokenResponse
    	// 先从redis中拿
    	accessToken, err := getAccessTokenFromRedis(openID)
    	if accessToken != "" && err == nil {
    		accessTokenResponse = GetAccessTokenResponse{AccessToken: accessToken}
    		log.Info("从redis中获取到access_token", "access_token", accessToken)
    		return &accessTokenResponse, nil
    	}
    	appID := config.ServerConfig.Appid
    	secret := config.ServerConfig.Secret
    	url := fmt.Sprintf(get_access_token_url, appID, secret)
    	client := http.Client{}
    	resp, err := client.Get(url)
    	if err != nil {
    		log.Error("获取access_toke网络异常", "err", err.Error())
    		return nil, err
    	}
    	defer resp.Body.Close()
    	body, _ := ioutil.ReadAll(resp.Body)
    	err = json.Unmarshal(body, &accessTokenResponse)
    	if err != nil {
    		log.Error("解析AccessToken失败", "err", err.Error())
    		return nil, err
    	}
    	// 存到redis中
    	if _, err := setAccessTokenToRedis(openID, accessTokenResponse.AccessToken); err != nil {
    		log.Error("将access_token存储到redis中失败", "err", err.Error())
    	}
    	return &accessTokenResponse, nil
    }
    
    // 从redis中取access_token
    func getAccessTokenFromRedis(openID string) (string, error) {
    	key := fmt.Sprintf(constant.Access_Token_Redis_Prefix, openID)
    	accessToken, err := db.Redis.Get(key).Result()
    	return accessToken, err
    }
    
    // 将access_token存储到redis中
    func setAccessTokenToRedis(openID, token string) (string, error) {
    	key := fmt.Sprintf(constant.Access_Token_Redis_Prefix, openID)
    	b, err := db.Redis.Set(key, token, 7200*time.Second).Result()
    	return b, err
    }
    
    type TemplateMsg struct {
    	Touser      string        `json:"touser"`      //接收者的OpenID
    	TemplateID  string        `json:"template_id"` //模板消息ID
    	FormID      string        `json:"form_id"`
    	URL         string        `json:"url"`         //点击后跳转链接
    	Miniprogram Miniprogram   `json:"miniprogram"` //点击跳转小程序
    	Data        *TemplateData `json:"data"`
    }
    type Miniprogram struct {
    	AppID    string `json:"appid"`
    	Pagepath string `json:"pagepath"`
    }
    
    type TemplateData struct {
    	First    KeyWordData `json:"first,omitempty"`
    	Keyword1 KeyWordData `json:"keyword1,omitempty"`
    	Keyword2 KeyWordData `json:"keyword2,omitempty"`
    	Keyword3 KeyWordData `json:"keyword3,omitempty"`
    	Keyword4 KeyWordData `json:"keyword4,omitempty"`
    	Keyword5 KeyWordData `json:"keyword5,omitempty"`
    }
    
    type KeyWordData struct {
    	Value string `json:"value"`
    	Color string `json:"color,omitempty"`
    }
    
    type SendTemplateResponse struct {
    	Errcode int    `json:"errcode"`
    	Errmsg  string `json:"errmsg"`
    	MsgID   string `json:"msgid"`
    }
    
    type GetAccessTokenResponse struct {
    	AccessToken string `json:"access_token"`
    	ExpiresIn   int    `json:"expires_in"`
    }
    

    controller例子

    仅仅是个例子,供大家参考

    func init() {
    	s := g.Server()
    	s.BindHandler("/send", sendTemplate)
    }
    
    func sendTemplate(r *ghttp.Request) {
    	templateMsg := &utils.TemplateMsg{}
    	tempData := &utils.TemplateData{}
    	tempData.First.Value = "测试模板消息"
    	tempData.Keyword1.Value = "大家记得买票啊"
    	tempData.Keyword2.Value = "马上就要放假了,大家记得买回家的票啊"
    	tempData.Keyword3.Value = "2018-12-30 15:59"
    	tempData.Keyword4.Value = "派大星"
    	tempData.Keyword5.Value = "记得按时完成"
    	templateMsg.Data = tempData
    	formID := r.GetString("formID")
    	log.Info("formID", "formID", formID)
    	templateMsg.FormID = formID
    	openID, _ := middleware.GetOpenID(r)
    	templateMsg.Touser = openID
    	templateMsg.TemplateID = constant.Tmeplate_Receive_Task_ID
    	response, err := utils.SendTemplate(templateMsg)
    	if err != nil {
    		fmt.Println("发送模板消息失败", err.Error())
    	}
    	r.Response.WriteJson(response)
    }
    

    小程序端

    <view>
     <form bindsubmit="templateSend" report-submit="true">
          <button type='primary' formType="submit" size='mini'>发送模板消息</button>
        </form>
    </view>
    
      templateSend: function (e) {
        // 表单需设置report-submit="true"
        var formId = e.detail.formId;
        // 发送随机模板消息
        util.apiRequest("send","get",{
          formID: formId,
          }).then(data => {
             console.log(data)
          })
      }
    
    展开全文
  • 50个微信小程序模板
  • 100个微信小程序模板

    2020-10-21 10:55:34
    快速开发,模板用起来很方便,包含读书,购物车,播放器,备忘录,大转盘,电商,闹钟,二维码,im聊天,汇率转换,麻将,天气预报,答题,知乎,公交,电话簿,等等等等
  • 做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。...这不,微信小程序模板消...

    在这里插入图片描述
    做过微信开发的应该都有一点感触,就是他的开发文档不是一成不变的,接口有时候会被下线,但也不是一下子就不能用了,一般会兼容旧接口,然后提醒你使用新接口有更多好处。如果接口真的直接下线了,也会提供另一种能够实现相同功能的接口给你替换。所以有天你以为代码都写好了,没有bug了,悠哉悠哉的时候,忽然产品经理说微信的哪个接口不能用了,快去改一下,不要惊讶,老老实实去改就对了哈。

    这不,微信将小程序的模板消息接口下线了,之前用formid来调这个接口的功能都就用不了了。
    在这里插入图片描述
    看官方文档提示,是提供了订阅消息的功能来替换,顾名思义,要用户主动订阅了才可以发送成功,像下面这样:
    在这里插入图片描述
    除了这种订阅消息外,还有没有其他方法来实现同等效果呢,答案是of course。

    翻阅小程序开发文档发现,官方还提供了一个统一服务消息的接口。为便于开发者对用户进行服务消息触达,简化小程序和公众号模板消息下发流程,小程序提供统一的服务消息下发接口。就是在小程序里发送公众号模板消息,这个好处就是不需要formid的,文档地址:

    https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html

    要注意:以下几类消息是目前不允许发的模板消息

    1、模板内容与服务场景(含标题、关键词)不一致的模板

    2、涉嫌广告营销类消息模板

    3、发送频率过高,有骚扰用户倾向类消息模板

    4、涉及红包、卡券、优惠券、代金券、会员卡、积分类消息模板
    在这里插入图片描述
    接下来我们就来实现下,效果在文末
    在这里插入图片描述
    1、准备

    调用这个接口的前提是公众号和小程序有绑定且是同主体的,这个好办,登录公众号后台 -> 小程序 -> 小程序管理 -> 添加即可绑定小程序
    在这里插入图片描述
    因为实质上还是发的公众号模板消息,所以还是要在公众号后台添加消息模板获取模板id
    在这里插入图片描述
    2、开发

    好了,做好以上两个准备就可以开发了,主要代码如下面:

    /**
         * 在小程序里使用同主体的关联公众号发送模板消息
         * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
         * @param vo
         * @return   {"errcode":0,"errmsg":"ok"}   向没有关注公众号的用户发送会返回{"errcode":43004,"errmsg":"require subscribe hint: [LGcpYa05528672]"}
         */
        public static JSONObject uniformSend(SendVo vo){
            boolean flag = false;
            JSONObject object = new JSONObject();
            JSONObject mpTemplateMsg = new JSONObject();
            JSONObject miniprogram = new JSONObject();
            String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token="+vo.getToken();
            object.put("touser", vo.getToUser());
            mpTemplateMsg.put("appid", vo.getPublicAppId());
            mpTemplateMsg.put("url", vo.getUrl());
            mpTemplateMsg.put("template_id", vo.getTemplateId());
            miniprogram.put("appid",vo.getMiniAppId());
            miniprogram.put("pagepath",vo.getPagePath());
            mpTemplateMsg.put("miniprogram",miniprogram);
            List<String> list = vo.getValue();
            JSONObject jsonObject = null;
            if (list != null && list.size() > 0) {
                int size = list.size();
                JSONObject data = new JSONObject();
                for (int i = 0; i < size; i++) {
                    if (i == 0) {
                        JSONObject first = new JSONObject();
                        first.put("value",list.get(0));
                        first.put("color",vo.getColor());
                        data.put("first",first);
                    } else if (i == size-1) {
                        JSONObject remark = new JSONObject();
                        remark.put("value",list.get(0));
                        remark.put("color",vo.getColor());
                        data.put("remark",remark);
                    } else {
                        JSONObject keyword = new JSONObject();
                        keyword.put("value",list.get(i));
                        keyword.put("color",vo.getColor());
                        data.put("keyword"+i,keyword);
                    }
                }
                mpTemplateMsg.put("data",data);
                object.put("mp_template_msg",mpTemplateMsg);
                jsonObject = CommonUtil.httpsRequestJson(url, "POST", object.toJSONString());
                logger.info("统一消息推送模板json======{}",jsonObject);
            }
            return jsonObject;
        }
    

    针对入参要说下mpTemplateMsg.put(“data”,data)里面的data这个参数,它是first.DATA,

    (keyword1.DATA,keyword2.DATA。。。),remark.DATA组成的,所以for循环里面

    拼接数据的时候要分三个,分别对应first.DATA,(keyword1.DATA,keyword2.DATA。。。),remark.DATA的字段值。

    3、效果
    在这里插入图片描述

    展开全文
  • java代码实现用户操作微信小程序端,后台发送模板消息
  • 微信小程序模板文件,包含源码,仅供学习使用,下载可以直接导入使用,部分数据需要在小程序管理页面配置request地址。
  • 主要介绍了详解微信小程序开发之formId使用(模板消息),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • AxureUX微信小程序模板

    2019-04-05 09:21:52
    此文档整合了微信小程序相关的元件类型和界面模板,适合小程序开发的产品经理
  • 微信小程序模板消息测试- formId 的获取 找到官方文档中 form 组件的位置: 点击“在开发工具预览” 选中 index 文件夹,右键,选择“磁盘打开”。把这个index文件夹拷贝出来并重命名为 formtest,同时把...

    微信小程序模板消息测试- formId 的获取

    • 找到官方文档中 form 组件的位置:
      • 在这里插入图片描述
    • 点击“在开发工具预览”
      • 在这里插入图片描述
      • 在这里插入图片描述
    • 选中 index 文件夹,右键,选择“磁盘打开”。把这个index文件夹拷贝出来并重命名为 formtest,同时把文件夹中的所有文件也重命名为 formtest。最后把这个 formtest 文件夹拷贝到自己的小程序项目中:
      • 在这里插入图片描述
    • 编辑 formtest.wxml 、 formtest.js 和 app.json :
      • 在这里插入图片描述
      • 在这里插入图片描述
      • 在这里插入图片描述
    • 上传代码并点击编译:
      • 在这里插入图片描述
      • 在这里插入图片描述
    • 选择真机调试,手机上点击 submit ,可以看到以下信息
      • 在这里插入图片描述
    展开全文
  • 微信小程序模板欢迎下载。。。。。。。。。。。。。。。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,414
精华内容 15,365
关键字:

微信小程序模板消息

微信小程序 订阅