微信小程序发送模板消息,php发送模板消息
微信小程序开发交流qq群 173683895
承接微信小程序开发。扫码加微信。
formId 在安卓系统是纯数字,在IOS系统是一串加密字符,如图:
发送模板消息(服务通知)效果图:
前端
wxml
<form bindsubmit="submitForm" report-submit ><button form-type="submit">发送</button>
</form>
js
submitForm(e){console.log(e.detail.formId);var formId = e.detail.formId == 'the formId is a mock one' ? 1546946903765 : e.detail.formId;util.request('http://localhost/sendTemplateMessage.php', 'get', { formId}, '', function (res) {console.log('sendTemplateMessage:',res)})},
后端php
<?phpheader("Content-Type:text/html;charset=utf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header('Access-Control-Allow-Methods:GET');// 响应类型 header('Access-Control-Allow-Headers:*'); // 响应头设置 $link=mysql_connect("localhost","root","root"); mysql_select_db("6677onechat", $link); //选择数据库mysql_query("SET NAMES utf8");//解决中文乱码问题//$openid = $_GET['openid'];$form_id =getFormId();getModel($form_id);/* https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + that.data.access_token; * 微信规定:不能直接在小程序调用,只能在后台发起* -xzz0704 */function getModel($form_id){$access_token = getWxAccessToken();$navopenid = $_GET['navopenid'];$template_id='dd0ws5CfJdjAyNUNDIf9jRa-xZprclpmiJdeqlWDAOU';$value = array("keyword1"=>array("value"=>$_GET['name'],//"value"=>'woshihaoren',"color"=>"#4a4a4a"),"keyword2"=>array("value"=>$_GET['txt'],"color"=>"#9b9b9b"));$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;$dd = array();$dd['touser']=$navopenid;$dd['template_id']=$template_id;$dd['page']='pages/index/index'; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,该字段不填则模板无跳转。$dd['form_id']=$form_id;$dd['data']=$value; //模板内容,不填则下发空模板$dd['color']=''; //模板内容字体的颜色,不填默认黑色//$dd['color']='#ccc';$dd['emphasis_keyword']=''; //模板需要放大的关键词,不填则默认无放大//$dd['emphasis_keyword']='keyword1.DATA';//$send = json_encode($dd); //二维数组转换成json对象/* curl_post()进行POST方式调用api: api.weixin.qq.com*/$result = https_curl_json($url,$dd,'json');if($result){echo json_encode(array('state'=>5,'msg'=>$result));}else{echo json_encode(array('state'=>5,'msg'=>$result));}}//获取access_tokenfunction getWxAccessToken(){$appid='wxd51fee07a27977f2';//填你的appid$appsecret='f9207c1e65ca6c7f0450822bb0a46f19';//填你的appsecret$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$access_token = makeRequest($url);$access_token = json_decode($access_token['result'],true);return $access_token['access_token'];}//获取formidfunction getFormId(){$navopenid = $_GET['navopenid'];$result = mysql_query("SELECT * FROM chatuser");$form_id;while($row = mysql_fetch_array($result)){if($row['openid']== $navopenid){$form_id =$row['fromId'];}}return $form_id;}/* 发送json格式的数据,到api接口 -xzz0704 */function https_curl_json($url,$data,$type){if($type=='json'){//json $_POST=json_decode(file_get_contents('php://input'), TRUE);$headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");$data=json_encode($data);}$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS,$data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_HTTPHEADER, $headers );$output = curl_exec($curl);if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);//捕抓异常}curl_close($curl);return $output;}/*** 发起http请求* @param string $url 访问路径* @param array $params 参数,该数组多于1个,表示为POST* @param int $expire 请求超时时间* @param array $extend 请求伪造包头参数* @param string $hostIp HOST的地址* @return array 返回的为一个请求状态,一个内容*/function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = ''){if (empty($url)) {return array('code' => '100');}$_curl = curl_init();$_header = array('Accept-Language: zh-CN','Connection: Keep-Alive','Cache-Control: no-cache');// 方便直接访问要设置host的地址if (!empty($hostIp)) {$urlInfo = parse_url($url);if (empty($urlInfo['host'])) {$urlInfo['host'] = substr(DOMAIN, 7, -1);$url = "http://{$hostIp}{$url}";} else {$url = str_replace($urlInfo['host'], $hostIp, $url);}$_header[] = "Host: {$urlInfo['host']}";}// 只要第二个参数传了值之后,就是POST的if (!empty($params)) {curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));curl_setopt($_curl, CURLOPT_POST, true);}if (substr($url, 0, 8) == 'https://') {curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);}curl_setopt($_curl, CURLOPT_URL, $url);curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);if ($expire > 0) {curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间}// 额外的配置if (!empty($extend)) {curl_setopt_array($_curl, $extend);}$result['result'] = curl_exec($_curl);$result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);$result['info'] = curl_getinfo($_curl);if ($result['result'] === false) {$result['result'] = curl_error($_curl);$result['code'] = -curl_errno($_curl);}curl_close($_curl);return $result;}
?>
番外笔记,可以忽略
php, 查找表里面该openid 的formid,前端传发送信息的昵称和信息,然后通过模板消息发送给对方。
<?phpheader("Content-Type:text/html;charset=utf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header('Access-Control-Allow-Methods:GET');// 响应类型 header('Access-Control-Allow-Headers:*'); // 响应头设置 $link=mysql_connect("localhost","root","root"); mysql_select_db("6677onechat", $link); //选择数据库mysql_query("SET NAMES utf8");//解决中文乱码问题//$openid = $_GET['openid'];$form_id =getFormId();getModel($form_id);/* https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + that.data.access_token; * 微信规定:不能直接在小程序调用,只能在后台发起* -xzz0704 */function getModel($form_id=''){$access_token = getWxAccessToken();$openid = 'oZ5S45bCh2a';$template_id='dd0ws5CfJdjAyNUNewetwewer3asd-AOU';//$form_id=$_GET['formId'];$value = array("keyword1"=>array("value"=>$_GET['name'],//"value"=>'woshihaoren',"color"=>"#4a4a4a"),"keyword2"=>array("value"=>$_GET['txt'],"color"=>"#9b9b9b"));$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;$dd = array();$dd['touser']=$openid;$dd['template_id']=$template_id;//$dd['page']=$page; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,该字段不填则模板无跳转。$dd['form_id']=$form_id;$dd['data']=$value; //模板内容,不填则下发空模板$dd['color']=''; //模板内容字体的颜色,不填默认黑色//$dd['color']='#ccc';$dd['emphasis_keyword']=''; //模板需要放大的关键词,不填则默认无放大//$dd['emphasis_keyword']='keyword1.DATA';//$send = json_encode($dd); //二维数组转换成json对象/* curl_post()进行POST方式调用api: api.weixin.qq.com*/$result = https_curl_json($url,$dd,'json');if($result){echo json_encode(array('state'=>5,'msg'=>$result));}else{echo json_encode(array('state'=>5,'msg'=>$result));}}//获取access_tokenfunction getWxAccessToken(){$appid='wxd51fee07a27977f2';//填你的appid$appsecret='f9207c1e65ca6c7f0450822bb0a46f19';//填你的appsecret$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;$access_token = makeRequest($url);$access_token = json_decode($access_token['result'],true);return $access_token['access_token'];}//获取formidfunction getFormId(){$navopenid = $_GET['navopenid'];$result = mysql_query("SELECT * FROM chatuser");$form_id;while($row = mysql_fetch_array($result)){if($row['openid']== $navopenid){$form_id =$row['fromId'];}}return $form_id;}/* 发送json格式的数据,到api接口 -xzz0704 */function https_curl_json($url,$data,$type){if($type=='json'){//json $_POST=json_decode(file_get_contents('php://input'), TRUE);$headers = array("Content-type: application/json;charset=UTF-8","Accept: application/json","Cache-Control: no-cache", "Pragma: no-cache");$data=json_encode($data);}$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);if (!empty($data)){curl_setopt($curl, CURLOPT_POST, 1);curl_setopt($curl, CURLOPT_POSTFIELDS,$data);}curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);curl_setopt($curl, CURLOPT_HTTPHEADER, $headers );$output = curl_exec($curl);if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);//捕抓异常}curl_close($curl);return $output;}/*** 发起http请求* @param string $url 访问路径* @param array $params 参数,该数组多于1个,表示为POST* @param int $expire 请求超时时间* @param array $extend 请求伪造包头参数* @param string $hostIp HOST的地址* @return array 返回的为一个请求状态,一个内容*/function makeRequest($url, $params = array(), $expire = 0, $extend = array(), $hostIp = ''){if (empty($url)) {return array('code' => '100');}$_curl = curl_init();$_header = array('Accept-Language: zh-CN','Connection: Keep-Alive','Cache-Control: no-cache');// 方便直接访问要设置host的地址if (!empty($hostIp)) {$urlInfo = parse_url($url);if (empty($urlInfo['host'])) {$urlInfo['host'] = substr(DOMAIN, 7, -1);$url = "http://{$hostIp}{$url}";} else {$url = str_replace($urlInfo['host'], $hostIp, $url);}$_header[] = "Host: {$urlInfo['host']}";}// 只要第二个参数传了值之后,就是POST的if (!empty($params)) {curl_setopt($_curl, CURLOPT_POSTFIELDS, http_build_query($params));curl_setopt($_curl, CURLOPT_POST, true);}if (substr($url, 0, 8) == 'https://') {curl_setopt($_curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($_curl, CURLOPT_SSL_VERIFYHOST, FALSE);}curl_setopt($_curl, CURLOPT_URL, $url);curl_setopt($_curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($_curl, CURLOPT_USERAGENT, 'API PHP CURL');curl_setopt($_curl, CURLOPT_HTTPHEADER, $_header);if ($expire > 0) {curl_setopt($_curl, CURLOPT_TIMEOUT, $expire); // 处理超时时间curl_setopt($_curl, CURLOPT_CONNECTTIMEOUT, $expire); // 建立连接超时时间}// 额外的配置if (!empty($extend)) {curl_setopt_array($_curl, $extend);}$result['result'] = curl_exec($_curl);$result['code'] = curl_getinfo($_curl, CURLINFO_HTTP_CODE);$result['info'] = curl_getinfo($_curl);if ($result['result'] === false) {$result['result'] = curl_error($_curl);$result['code'] = -curl_errno($_curl);}curl_close($_curl);return $result;}
?>
发送信息时调用发送模板消息
navopenid 对方的openid
// 发送模板消息sendmsg() {var name = wx.getStorageSync('userInfo').nickName;var txt = this.data.inputValue ? this.data.inputValue:'你好';util.request(app.onechatRul + '/sendTemplateMessage.php', 'GET', {navopenid,openid: wx.getStorageSync('openid'),name,txt}, '', function(res) {console.log('sendTemplateMessage:', res)})},
相关文章:

使用TypeScript映射和条件类型使React组件更出色
by Deepu K Sasidharan通过Deepu K Sasidharan 使用TypeScript映射和条件类型使React组件更出色 (Make your React components great with TypeScript mapped and conditional types) You’ve probably heard about TypeScript. You may have heard someone claiming how grea…

2017年6月16号课堂笔记
2017年6月16号 星期五 空气质量:中度污染~轻度污染 内容:jQuery:remove,bind,attr,on和live,同辈和父辈节点的操作, keyup/keypress/keydown,focus-blur应用,表单事件/键…

大宗商品(Bulk Stock)交易
大宗商品(Bulk Stock)是指可进入流通领域,但非零售环节,具有商品属性用于工农业生产与消费使用的大批量买卖的物质商品。在金融投资市场,大宗商品指同质化. 可交易. 被广泛作为工业基础原材料的商品大宗商品电子交易主…

【Ant Design Pro 二】 创建页面,组件,并在页面调用
开发交流qq群 173683895 路由里面的参数作用介绍: {path: "/a_nowdayserver/nowdayserver", //随便取名,显示在访问路径url中,如果是子路由,需要和父路径匹配icon: "file", //菜单栏显示的图标name: "你好", //菜单栏显示的标题component…

安卓收取费用_作为自由职业者应收取的费用:以价值为基础的定价是否能达到炒作的目的?...
安卓收取费用by Benek Lisefski由Benek Lisefski 作为自由职业者应收取的费用:以价值为基础的定价是否能达到炒作的目的? (What to charge as a freelancer: does value-based pricing live up to the hype?) 定价很难。 (Pricing is hard.) Even afte…

Java笔记(25):设计模式概述
1、设计模式的概述和分类 设计模式: 经验的总结。 A:创建型 创建对象 B:结构型 对象的组成 C:行为型 对象的功能创建型模式:1)简单工厂模式 2)工厂方法模式 3)设计模式 2、简单工厂模式概述和使用 1 package cn.itcast_01; 2 3 public abstract class A…

Ant Design Pro 使用图表 charts bizcharts
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 淌了一下午坑,都是辛酸泪 总结:首先要知道, 它不能直接使用 charts ,需要安装 bizcharts 插件,然后导入 bizcharts 中的 charts; 点击跳转到 bizcharts 官方文档,建议看完整个流程再跳转 首先,…

【剑指offer 面试题47】不用加减乘除做加法
思路: 利用位运算 C: 1 #include <iostream>2 using namespace std;3 4 int main()5 {6 int a 11, b 17;7 int sum, carry;8 do9 { 10 sum a ^ b; 11 carry (a & b) << 1; 12 a sum; 13 …

travis-ci自动部署_如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用
travis-ci自动部署by Robin Bobbitt罗宾波比(Robin Bobbitt) 如何使用Travis CI部署(几乎)零恐惧的Cloud Foundry应用 (How to deploy your Cloud Foundry app with (almost) zero fear using Travis CI) Application deployments to the cloud should be painless. We should…

Activiti 规则任务(businessRuleTask)
Activiti 规则任务(businessRuleTask) 作者:邓家海 目前国内研究Activiti规则任务businessRuleTask)的文章在网上应该不超出3篇 小觑夜漫酒作伴,破晓黎明当笑言 前言: 最近一直在研究Activiti工作流的自动化…

10年工作经验老程序员推荐的7个开发类工具
做.NET软件工作已经10年了,从程序员做到高级程序员,再到技术主管,技术总监。见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio Team System 2008, Visual Studio 2010 Ultimate,Visual Studio 2013一系列近5个版本的变化与亲…

PHP SSL certificate: unable to get local issuer certificate的解决办法
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 当本地curl需要访问https时,出现SSL certificate: unable to get local issuer certificate错误信息 解决办法: 到http://curl.haxx.se/ca/cacert.pem下载pem文件,并…

辞职前为什么挣扎_当您感到自己像开发人员一样挣扎时,为什么学得最多
辞职前为什么挣扎by Walt Schlender由Walt Schlender 当您感到自己像开发人员一样挣扎时,为什么学得最多 (Why you learn the most when you feel like you’re struggling as a developer) The times when I have made the greatest leaps in my development skil…

Hadoop学习之Mapreduce执行过程详解
一、MapReduce执行过程 MapReduce运行时,首先通过Map读取HDFS中的数据,然后经过拆分,将每个文件中的每行数据分拆成键值对,最后输出作为Reduce的输入,大体执行流程如下图所示: 整个流程图具体来说ÿ…

汇编试验十五:安装新的int 9中断例程
安装新的int 9中断例程(按A键后显示满屏幕的A) int 9 是外中断,同样,程序编写还是和其他中断例程类似,安装(复制),调用; 不同点是在于,他要从端口读取数据60h…

php判断前端传的多个字段与数据库匹配
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 代码 <?phpheader("Content-Type:text/html;charsetutf8"); header("Access-Control-Allow-Origin: *"); //解决跨域header(Access-Control-Allow-Methods:POST);// 响应类型 …

javascript编写_用JavaScript深入探讨:为什么对编写好的代码至关重要。
javascript编写Using simple terminology and a real world example, this post explains what this is and why it is useful.这篇文章使用简单的术语和一个真实的例子,解释了this是什么以及为什么有用。 这是给你的吗 (Is this for you) I have noticed that man…

peak num
class Solution {public: int findPeakElement(vector<int>& nums) { int i0; int nnums.size(); while(i<n){ if(i0){ //处理第一位 if(nums[1] < nums[0]) return 0; else { …

用Eclipse的snippets功能实现代码重用
snippets功能实现代码重用 Snippets 代码片段是Eclipse的一个插件。 很多时候可以通过这个功能,重复使用常用的代码片段,加快开发效率。 创建一个代码段的步骤: 在Eclipse的editor中选中一块代码段,右键点击【Add to Snippets…

JS删除选中的数组
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 js // 删除数组deleteArr: function (e) {let middlearr [{a:1},{b:2}];//全部数组let items [{a:1}];//选中的数组for (var i 0; i < items.length; i) {for (var j 0; j < middlearr.lengt…

Git合并和变基简介:它们是什么,以及如何使用它们
by Vali Shah通过瓦利沙阿 Git合并和Git变基简介:它们做什么以及何时使用它们 (An Introduction to Git Merge and Git Rebase: What They Do and When to Use Them) As a Developer, many of us have to choose between Merge and Rebase. With all the reference…

[转]单点登录原理与简单实现
一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次…

[JAVA] DUMP
jmap -dump:live,formatb,fileD:\heap.bin 31563156是PID转载于:https://www.cnblogs.com/MasterMonkInTemple/p/4655547.html

ThinkPHP 5.0 入门教程 一:安装ThinkPHP并在Web浏览器访问
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 严格来说,ThinkPHP无需安装过程,这里所说的安装其实就是把ThinkPHP框架放入WEB运行环境(前提是你的WEB运行环境已经OK) 下面我们开始安装ThinkPHP的运行环…

以太坊区块链同步_以太坊69:如何在10分钟内建立完全同步的区块链节点
以太坊区块链同步by Lukas Lukac卢卡斯卢卡奇(Lukas Lukac) Ethereu M 69:如何在10分钟内建立完全同步的区块链节点 (Ethereum 69: how to set up a fully synced blockchain node in 10 mins) Welcome in the first article of our new go-ethereum series!欢迎来…

微信小程序客服实现自动回复图文消息链接,点击去关注公众号
微信小程序开发交流qq群 173683895 承接微信小程序开发。扫码加微信。 用户打开客服消息,发送任意消息自动回复图文链接,达到关注公众号的目的。 先看效果: 打开芝麻小客服的后台,选择一键接入小程序智能客服 点击跳转 1.授权…

HtmlUnit、httpclient、jsoup爬取网页信息并解析
转载:http://tianxingzhe.blog.51cto.com/3390077/1755511转载于:https://www.cnblogs.com/puhongtao/p/7063563.html

《Maven 实战》笔记之setting.xml介绍
maven是什么?有什么用? Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建,依赖管理和项目信息管理。项目构建包括创建项目框架、清理、编译、测试、到生成报告,再到打包和部署,项目信息包括项目描述,开发者列表,版本…

框架依赖注入和普通依赖注入_依赖注入快速入门:它是什么,以及何时使用它...
框架依赖注入和普通依赖注入by Bhavya Karia通过Bhavya Karia 介绍 (Introduction) In software engineering, dependency injection is a technique whereby one object (or static method) supplies the dependencies of another object. A dependency is an object that ca…

微信小程序自定义弹出框组件,模拟wx.showModal
微信小程序开发交流qq群 173683895 效果图: 代码 wxml <view wx:if{{showModal}}><view classmask_layer bindtapmodal_click_Hidden /><view classmodal_box><view class"title">取消订单</view><view classconte…