美文网首页程序员
小程序消息模板_03

小程序消息模板_03

作者: 过桥 | 来源:发表于2018-04-04 09:46 被阅读102次

简述

本文介绍 “公众空气质量” 小程序中尝试加入消息模板实现过程

需求分析

目前小程序查看空气质量均需主动打开后才能查看,后续考虑,如果能每天早晨主动推送,好提醒用户是否戴口罩。

实现过程

检查梳理API

模板消息

技术

WebAPI构建服务端 + 微信小程序

步骤简述

选择“模板” (微信公众平台操作)
——> wx.login() 获取临时登录凭证(微信小程序) 
——> 通过 appid、secret、临时登录凭证,验证获取 openid(后台服务)
——> 通过 appid、secret,验证获取 access_token (后台服务)
——> 通过 access_token、openid、template_id、form_id 及对应的消息数据,提交发送消息请求(后台服务)

选择“模板”

image.png

wx.login() 获取临时登录凭证

wxml
<form report-submit bindsubmit="formSubmit">
      <button class="weui-agree__link" size="mini" form-type="submit">推送</button>
</form>

js
  formSubmit: function (e) {
    var that = this
    wx.login({
      success: function (res) {
        wx.request({
          url: 'https://xxxxxxxx/WebApi/api/Trend/' + res.code + '|' + e.detail.formId + '|' + that.data.city, //e.detail.formId 后续需使用
          success: function (res) {
            wx.showToast({
              title: '推送成功',
              icon: 'success',
              duration: 2000
            })
          }
        })
      }
    })
  }

通过 appid、secret、临时登录凭证,验证获取 openid

小程序appid查看、AppSecret查看
            string userId = "userId";
            string appid = "wxxxxxxxxxxx";
            string secret = "8xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + userId + "&grant_type=authorization_code";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            JObject jo = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
            string openid = jo["openid"].ToString();

通过 appid、secret,验证获取 access_token

            url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret + "";
            request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "GET";
            response = (HttpWebResponse)request.GetResponse();
            sr = new StreamReader(response.GetResponseStream());
            jo = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
            string access_token = jo["access_token"].ToString();

通过 access_token、openid、template_id、form_id 及对应的消息数据,提交发送消息请求

template_id
            string url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + access_token;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "Post";
            request.ContentType = "application/x-www-form-urlencoded;charset=gb2312"; // 必须指明字符集!

            //获取城市最新小时数据
            DataTable dt = xxxxxxxxxxx;

            string d = "{\"touser\":\"" + openid +
                   "\",\"template_id\":\"vTwsk-10bvQt0xJbrUUrxYeya7tHruC8U0oFkV6wC4M\",\"page\":\"/pages/board/board\",\"form_id\":\"" + formId
                   + "\",\"data\":{\"keyword1\":{\"value\":\"" + dt.Rows[0]["time"].ToString()
                   + "\",\"color\":\"#4a4a4a\"},\"keyword2\":{\"value\":\"" + dt.Rows[0]["city"].ToString()
                   + "\",\"color\":\"#4a4a4a\"},\"keyword3\":{\"value\":\"" + dt.Rows[0]["aqi"].ToString() + "," + dt.Rows[0]["quality"].ToString()
                   + "\",\"color\":\"#4a4a4a\"},\"keyword4\":{\"value\":\"" + aqi_getHealth(dt.Rows[0]["quality"].ToString()) + aqi_getMeasures(dt.Rows[0]["quality"].ToString())
                   + "\",\"color\":\"#4a4a4a\"}},\"color\":\"#ccc\",\"emphasis_keyword\": \"keyword3.DATA\" }";

            byte[] data = Encoding.UTF8.GetBytes(d);
            request.ContentLength = data.Length;
            Stream reqStream = request.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            new StreamReader(response.GetResponseStream());
消息提醒

经验总结

https 不可直接添加至 request 合法域名

https://api.weixin.qq.com 相关请求、验证都需在后台实现

image.png
另官方推荐,appid、secret建议存储于服务器使用

消息模板发送限制

允许开发者向用户在7天内推送有限条数的模板消息(1次提交表单可下发1条,多次提交下发条数独立,相互不影响)

推送消息乱码

检查设置提交API中字符集

request.ContentType = "application/x-www-form-urlencoded;charset=gb2312"; // 必须指明字符集!

byte[] data = Encoding.UTF8.GetBytes(d);

推送测试成功,上线后失败

实际使用中,开发调试、体验版均实时推送成功,审核发布后推送失败,暂未发现原因

相关文章

  • 小程序消息模板_03

    简述 本文介绍 “公众空气质量” 小程序中尝试加入消息模板实现过程 需求分析 目前小程序查看空气质量均需主动打开后...

  • 微信小程序之模板消息

    模板消息 参考:官方文档 微信小程序网页上创建模板消息模板 创建完的模板消息如下: 小程序前台页面准备 官方文档原...

  • 小程序消息:模板消息

    请注意,小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能基于微信的通知渠道,我们为开发者提...

  • 微信小程序&PHP 发送模板消息通知

    注意    模板消息接口需写在后台服务器上。【追加:目前微信小程序只能给本人反馈】    模板消息模板需要在小程序...

  • 小程序订阅消息推送(含源码)java实现小程序推送,spring

    前面写过一篇云开发实现小程序订阅消息(模板消息)推送的文章,《借助云开发实现小程序订阅消息和模板消息的推送功能》是...

  • 小程序模板消息

    微信小程序模板消息官方文档 一、简介 基于微信的通知渠道,提供了可以高效触达用户的模板消息能力,以便实现服务的闭环...

  • 小程序云开发 · 消息推送功能

    参考官方文档:小程序订阅消息 首先看一下效果图: 一、选择合适的模板消息 在小程序管理后台功能-订阅消息-公共模板...

  • 小程序接入订阅消息操作指南

    最近,微信对小程序模板消息下发条件进行了调整,订阅消息已经登场,小程序模板消息将退出舞台,作为开发者的你,跟上微信...

  • 微信小程序:订阅消息

    1. 什么是小程序订阅消息 用户在小程序页面点击按钮,确认订阅消息,小程序可以按照消息模板格式在后续的任意时间发送...

  • 使用WePush批量发送模板消息

    WePush是什么 WePush是一款专注批量推送的小而美的工具, 目前支持:模板消息-公众号、模板消息-小程序、...

网友评论

    本文标题:小程序消息模板_03

    本文链接:https://www.haomeiwen.com/subject/uqrchftx.html