1,参考上篇博客,获取access_token

https://www.cnblogs.com/xiaoyantongxue/p/15803334.html

2:控制器写以下代码

    /*
* 获取普通access_token
* */
public function getToken()
{
$accessToken = WechatService::getToken();
echo $accessToken;
}
/**
* @return string
* 菜单
*/
public function menu()
{
// 获取accessToken
$accessToken = WechatService::getToken();
//组装请求的url地址
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $accessToken;
// $url=sprintf(config('wechat.menu_url'),$accessToken);
$data = array(
// button下的每一个元素
"button" => array(
//第一个一级菜单
array('type' => 'click', "name" => "个人简介", "key" => "info"),
array(
"name" => "语言排行",
"sub_button" => array(
array("name" => 'HTML', "type" => "view",
'url' => "http://119.45.22.188/cms/"),
array('name' => 'js', 'type' => 'pic_sysphoto', 'key' => 'sysptoto'),
array('name' => 'php', 'type' => 'pic_weixin', 'key' => 'pic_weixin')
)
),
array('type' => 'click', 'name' => '日记纪要', 'key' => 'content')
)
);
// 将数据转换为json格式
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
// 发送post请求
$result = curlPost($url, $data);
dump($result);
}

3:再tp6 common 公共函数中进行封装一份post请求

function curlPost($url, $data = '')
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// POST数据
curl_setopt($ch, CURLOPT_POST, 1);
// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output,true);
}

4:网页路由进行访问

5:打开微信公众号,进行查看效果

模板消息的使用:

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

官方文档:

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#3

控制器:

1:测试页面进行模板页面的设置

网址:

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

2:控制器调用

 /**
*模板消息
*/
public function sendTemplateMsg(){
// 获取access_token
$accessToken = WechatService::getToken();
// 请求接口
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=$accessToken";
$data = [
//touser就是测试号的微信号
"touser"=>"oCsrJ6UIuOq8PEd2b7YDgpt2WaX0",
//模板id
"template_id"=>"mhOLKr6gU5-ZZkRdkz4ikj9iockb2H5PfGwya36IXqY",
"data"=>[
"result"=>[
"value"=>"某某某",
// 颜色
"color"=>"red"
],
"withdrawMoney"=>[
"value"=>"998"
],
"withdrawTime"=>[
"value"=>date("Y-m-d H:i:s",time())
],
"cardInfo"=>[
"value"=>"工商银行(尾号2345)"
],
"arrivedTime"=>[
"value"=>date("Y-m-d H:i:s",time())
],
"remark"=>[
"value"=>"欢迎参与活动",
"color"=>"red"
],
]
];
$res = curlPost($url,json_encode($data));
print_r($res);die; }

3:走路由

4:微信看效果

tp6微信公众号开发者模式自定义菜单的更多相关文章

  1. 微信公众号开发者模式自定义菜单 node

    纯属分享 var config = require('./admin/wx/config/config'); var API = require('wechat-api'); var api = ne ...

  2. tp6微信公众号开发者模式token认证

      微信公众号开发完整教程(一) PHP7.0版本,TP5.0框架 技术标签: 微信公众号开发         因为工作的需要,这一两年对微信公众号和小程序,项目制作的比较多.所以我才打算写一篇全面的 ...

  3. tp6微信公众号开发者模式基础消息

    官方文档 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages ...

  4. tp6微信公众号开发者模式获取access_token

    1:config 文件下新建一个文件wechat.php,将个人id和秘钥写入配置文件 网址: https://developers.weixin.qq.com/doc/offiaccount/Bas ...

  5. php 开启微信公众号开发者模式

    php 开启微信公众号开发者模式<pre><?php/** * wechat php test */header('Content-type:text');//define your ...

  6. .NET开发微信公众号之创建自定义菜单

    一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能为公众账号的会话界面底部增加自定义菜单,用户点击菜单中的选项,可以调出相应的回复信息或网页链接.自 ...

  7. node微信公众号开发--设置自定义菜单

    var request = require("request"); const querystring = require("querystring"); re ...

  8. 微信公众号开发——创建自定义菜单(PHP版)

    <?php include "TokenUtil.php"; //TokenUtil::build_access_token(); $access_token = Token ...

  9. Java微信公众平台开发_04_自定义菜单

    一.本节要点 1.菜单相关实体类的封装 参考官方文档中的请求包的内容,对菜单相关实体类进行封装. 2.数据传输格式—JSON 自定义菜单中请求包的数据是Json字符串格式的,请参见:  Java_数据 ...

随机推荐

  1. 使用Hot Chocolate和.NET 6构建GraphQL应用(5) —— 实现Query过滤功能

    系列导航 使用Hot Chocolate和.NET 6构建GraphQL应用文章索引 需求 对于查询来说,还有一大需求是针对查询的数据进行过滤,本篇文章我们准备实现GraphQL中基本的查询过滤. 思 ...

  2. Ajax使用post方式发送数据注意事项

    Ajax使用post方式给服务器传递数据时,需要将传递的字符串转化为模拟from表单发送数据的XML格式 在open之后奢姿头协议信息,模拟from表单传递数据 xhr.setRequestHeade ...

  3. 前端常见原生方法的实现(bind,promise,new,extends,深拷贝,函数防抖,函数节流)

    前端原生方法的实现,这里写一下常见的一些实现: 1.bind Function.prototype.bind2 = function (context) { var self = this; retu ...

  4. js _proto_和prototype 区别 剖析

    首先,要明确几个点: 1.在JS里,万物皆对象.方法(Function)是对象,方法的原型(Function.prototype)是对象.因此,它们都会具有对象共有的特点. 即:对象具有属性__pro ...

  5. Linux发行版·常见Linux系统下载

    本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...

  6. 关于linux shell编程,alias rm='cp $@ ~/backup; rm $@'

    书上的这个例子需要在ubuntu的低版本的系统才支持,现在基本上都不支持了,想实现也很简单自己写一个脚本先备份再删除. alias也只是做了一次替换alias rm='cp $@ ~/backup; ...

  7. 部署YUM仓库及NFS共享服务

    部署YUM仓库及NFS共享服务 目录 部署YUM仓库及NFS共享服务 一.YUM仓库服务 1. YUM概述 2. 部署YUM软件仓库 (1)准备安装源 ①YUM仓库的种类 ②RPM软件包的来源 ③构建 ...

  8. Docker使用Dockerfile构建新的镜像

    构建镜像步骤; 1.创建Dockerfile文件,该文件是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. vim Dockerfile //每一个指令都会在镜像上创建一个新 ...

  9. python篇第3天【编码规范】

    第二天加班去了! 语法约定: 多行语句 Python语句中一般以新行作为为语句的结束符. 但是我们可以使用斜杠( \)将一行的语句分为多行显示,如下所示: total = item_one + \ i ...

  10. fork_join

    在systemverilog中可以用fork-- join.fork --join_any.fork--join_none来实现多个线程的并发执行. 1.父线程.子线程 调用fork--join的线程 ...