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

一、开发准备:

1. 在微信民众平台 – 小程序的模板中央申请新闻模板

二、实现原理:

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

小程序部门:

话不多说,先上效果图:

示例代码:

Submit

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 地址设置。

<?phpdefine ('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](https://learnku.com/users/31554)](https://learnku.com/users/31554) 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对比判断是否来自微信服务器if ($tmpStr == $signature){return true;}else{return 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 "

";var_dump($res);exit;}}

4.2 发送小程序模板新闻

/*** 发送小程序模板新闻* @param $data* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array*/public function sendXcxTemplateMsg($data,$appid = "",$appsecret = ""){// 详细模板花样参考民众平台申请的template_idif (!$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](https://learnku.com/users/31554)](https://learnku.com/users/31554) 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](https://learnku.com/users/31554)](https://learnku.com/users/31554) 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!"}

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

本文作者原创,转载请见告。

php模板新闻,微信小程序模板新闻实现(PHP+ 小程序)相关推荐

  1. 微信小程序编写新闻阅读列表

    微信小程序编写新闻阅读列表 本篇学习主要内容 Swiper 组件(轮播图) App.json 里的关于导航栏.标题的配置. Page 页面与应用程序的生命周期 数据绑定(核心知识) 数据绑定的运算与逻 ...

  2. 微信小程序模板消息(服务通知消息)原始post工具封装(不使用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题

    微信小程序模板消息(服务通知消息)原始post工具封装(不使用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题 参考文章: (1)微信小程序模板消息(服务通知消息)原始post工具 ...

  3. axure小程序模板_微信小程序模板案例收集

    微信小程序发布近四年来,诞生了各行各业的高质量小程序,其中有很多都是用微信小程序模板制作的.新手在制作自己的小程序时,就可以参考这些好看的小程序模板案例. 1.电商小程序 这是目前非常常见的小程序类型 ...

  4. 小程序测试用例模板_微信小程序样式:高质量小程序样式模板大全

    新手想要制作出美观的小程序,你需要多参考一些好看的微信小程序样式.今天就带大家分析几个高质量小程序的样式,看看别是怎么把小程序做得美观又吸引人的: 1.电商小程序样式 电商小程序首页一般是按照&quo ...

  5. 小程序统一服务消息_微信团队发布小程序模板消息能力调整通知:小程序订阅消息接口正式上线...

    10月13日,微信团队发布了小程序模板消息能力调整通知.微信团队表示,此前的模板消息接口将停止使用,小程序订阅消息接口正式上线.据了解,新上线的小程序订阅消息,同时支持一次性和长期性订阅消息,用户可以 ...

  6. 微信小程序模板消息群发解决思路

    基于微信的通知渠道,微信为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验.(微信6.5.2及以上版本支持模板功能.低于该版本将无法收到模板消息.) 模板推送位置:服务通 ...

  7. [荐] 微信小程序模板源码合集

    关注公众号 风色年代(itfantasycc) 200G 小程序资料合集送上~ wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组 ...

  8. 微信小程序傻瓜制作_微信小程序模板制作:手把手教你做一个生鲜小程序

    传统线下生鲜水果类商家如今正面临诸多问题,包括服务范围有限.客户源不稳定.缺少订单导致新鲜食材过期等等.新零售概念的提出,很多商家虽然懂得要打通线上渠道,但通常都是仅仅局限于普通O2O外卖平台,其实这 ...

  9. 【微信小程序模板】可以用微信小程序模板制作小程序吗?

    小程序作为电子商务营销和企业营销的一个重要方式,很多很多商家.公司已经建立了自己的小程序.那小程序怎么做呢?可以用微信小程序模板制作小程序吗? 答案是可以的,你可以使用小程序制作平台. 首先,是要申请 ...

最新文章

  1. SLAM精度测评——rpg_trajectory_evaluatio
  2. SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?
  3. ASP.NET中新建MVC项目并连接SqlServer数据库实现增删改查
  4. Shell 变量--shell教程
  5. 你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划
  6. 中筛选为某个列表中_关于Excel中“高级筛选”的这些技巧,必须掌握!
  7. putty+Xming使用方法
  8. 配置项目构建完成后文件移动---- Jenkins自动化部署学习笔记(三)
  9. 安卓平板微信和手机微信同时登陆_如何查看手机上的微信登陆记录
  10. 单龙芯3A3000-7A1000PMON研究学习-(28)撸起袖子干-再来一杯代码10-内存初始化1
  11. com词根词缀_英语词根词缀,cor和con分别代表什么意思
  12. 通过Python实现物联网金橙子自动打标
  13. 2022网络安全技术自学路线图及职业选择方向
  14. 20162330 2017-2018-1《程序设计与数据结构》课程总结
  15. 非暂态计算机可读存储介质是什么,检测空气质量方法及装置、空气净化器控制方法及装置与流程...
  16. 10月18---10月20号第一周总结
  17. 频数直方图的步骤_频数分布直方图的画法举例
  18. 笔记:百度地图 通过输入地名搜索位置 显示在地图上
  19. 建筑业数字化|数据推动建筑业变革与产业升级
  20. jpa级联添加_请教一个JPA多对多级联保存的问题

热门文章

  1. wmi服务或wmi提供程序_什么是WMI提供程序主机(WmiPrvSE.exe),为什么使用那么多的CPU?...
  2. 关于西安电子科技大学821电路的难点辨析(一)---受控源的处理
  3. 刚刚,2022中国大学工科排名出炉
  4. 信托资金将分辨用于向邢台依林山庄食物有限公司、唐山国泰纸业有限公司、唐山蓝猫饮品团体有限公司发放流动资金贷款1亿、1.5亿、1亿
  5. 一个CPP程序猿的第一篇博客
  6. java老版手机游戏合集破解
  7. Matlab2010与VS2010初吻(一)
  8. 如何更改自己电脑上的公网IP?
  9. 卡诺图的最简或与式化简
  10. 封神台-getshell