官方文档

https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messages.html

1:结合上篇继续再services目录下的WechatService.php继续封装  

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

<?php

namespace app\services;

use think\Log;

class WechatService
{ protected static $_token_key = 'wxdev:wechat:token'; /*
* 微信公众号获取access_token
* */
public static function getToken()
{
$accessToken = cache(self::$_token_key);
if (!$accessToken) {
$accessTokenUrl = sprintf(config('wechat.access_token_url'), config('wechat.appid'), config('wechat.appsecret'));
$accessTokenArr = json_decode(file_get_contents($accessTokenUrl), true);
if (isset($accessTokenArr['errcode'])) {
// 记录日记
Log::info($accessTokenArr['errmsg']);
return false;
} else {
$accessToken = $accessTokenArr['access_token'];
cache(self::$_token_key, $accessToken, $accessTokenArr['expires_in'] - 200);
}
}
return $accessToken;
} /*
* 基础消息能力-文本消息
* */
public static function testReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$msgType = $postObj->MsgType;
$keyword = trim((string)$postObj->Content);
$time = time();
if ($keyword == '你好') {
$replyContent = "欢迎来到我的公众号!";
} else {
$replyContent = "厉害了,我的哥!!!!!";
}
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0</FuncFlag>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, $msgType, $replyContent);
return $sendBackXml;
} /*
* 基础消息能力-图片消息
* */
public static function imageReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$replyContent = "图片picUrl:{$postObj->PicUrl},图片的MediaId:{$postObj->MediaId}";
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, 'text', $replyContent);
return $sendBackXml;
} /*
* 掌握基础消息能力-语音消息
* */
public static function voiceReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$replyContent = "语音消息MediaId为:{$postObj->MediaId}'具体内容为:{$postObj->Recognition}";
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, 'text', $replyContent);
return $sendBackXml;
} /*
* 基础消息能力-视频消息
* */
public static function videoReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$replyContent = "视频消息MediaId为:{$postObj->MediaId}'体文件下载接口拉取数据:{$postObj->ThumbMediaId}";
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, 'text', $replyContent);
return $sendBackXml;
} /*
* -地理位置消息
* */
public static function locationReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$replyContent = "经度为:{$postObj->Location_Y}'维度:{$postObj->Location_X},具体地址:{$postObj->Label}";
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, 'text', $replyContent);
return $sendBackXml;
} /*
* -基础消息能力-链接消息
* */
public static function linkReplay($postObj)
{
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$time = time();
$replyContent = "消息的标题为:{$postObj->Title},描述:{$postObj->Description}";
$sendXml = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$sendBackXml = sprintf($sendXml, $fromUsername, $toUsername, $time, 'text', $replyContent);
return $sendBackXml;
} }

2:控制器进行调用:

<?php
declare (strict_types=1); namespace app\controller; use app\BaseController;
use app\services\WechatService;
use think\Request; class Wechat extends BaseController
{
/*
* 域名解析首方法
* */
public function valid()
{
//获取随机字符串
$echoStr = input("echostr");
if ($echoStr) {
// 验证接口的有效性,由于接口有效性的验证必定会传递echostr 参数
if ($this->checkSignature()) {
echo $echoStr;
exit;
}
} else {
return $this->responseMsg();
}
} /*
* 解析文本、图片、语音.视频、地理、链接
* */
private function responseMsg()
{
$postStr = file_get_contents('php://input');
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); switch ($postObj->MsgType) {
// 如果发过来的信息是文本,调用WechatService的testReplay方法
case 'text':
$sendBackXml = WechatService::testReplay($postObj); return $sendBackXml; break;
// 如果发过来的信息是图片,调用WechatService的imgReplay方法
case 'image':
$sendBackXml = WechatService::imageReplay($postObj); return $sendBackXml; break;
// 如果发过来的信息是语音,调用WechatService的voiceReplay方法
case 'voice':
$sendBackXml = WechatService::voiceReplay($postObj); return $sendBackXml; break; // 如果发过来的信息是视屏,调用WechatService的videoReplay方法
case 'video':
$sendBackXml = WechatService::videoReplay($postObj); return $sendBackXml; break; // 如果发过来的信息是地理位置消息,调用WechatService的videoReplay方法
case 'location':
$sendBackXml = WechatService::locationReplay($postObj); return $sendBackXml; break;
// 如果发过来的信息是地理位置消息,调用WechatService的videoReplay方法
case 'link':
$sendBackXml = WechatService::linkReplay($postObj); return $sendBackXml; break; } } /*
* 获取token
* */
protected function checkSignature()
{
// 微信加密签名
$signature = input("signature");
$timestamp = input("timestamp");//时间戳
$nonce = input("nonce");//随机数
$token = "yanbing"; //token值,必须和你设置的一样
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
} else {
return false;
}
} /*
* 获取access_token
* */
public function getToken()
{
$accessToken = WechatService::getToken();
echo $accessToken;
}
}

3:效果图:

tp6微信公众号开发者模式基础消息的更多相关文章

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

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

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

    1,参考上篇博客,获取access_token https://www.cnblogs.com/xiaoyantongxue/p/15803334.html 2:控制器写以下代码 /* * 获取普通a ...

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

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

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

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

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

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

  6. 微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription is canceled hint:解决办法【已解决】

    微信公众号发送客服消息提示errcode":45015,"errmsg":"response out of time limit or subscription ...

  7. PHP开发微信公众号(二)消息接受与推送

    上一篇文章我们知道怎么获取二维码,这样别人就可以扫描二维码来关注我们,但是别人关注后,发送消息,我们怎么进行相关处理? 这里我们就来学习下怎么处理处理这些消息,以及推送消息. 学习之前首先你需要有一个 ...

  8. Java微信公众号开发----关键字自动回复消息

    在配置好开发者配置后,本人第一个想要实现的是自动回复消息的功能,说明以下几点: 1. url 仍然不变,还是开发配置里的url 2. 微信采用 xml 格式传输数据 3.微信服务器传给我们的参数主要有 ...

  9. 解决升级PHP7后 微信公众号收不到消息

    服务器配置Linux+Nginx+PHP5.5+mysql index方法配置微信的关注回复.菜单事件.多客服.自动回复等 public function actionIndex() { if (is ...

随机推荐

  1. JS generator(生成器)

    笔记整理自:廖雪峰老师的JS教程 目录 简介 与函数的不同之处 函数写法 generator写法 generator调用 generator对象的`next()`方法调用 `for ... of`循环 ...

  2. 【转载】Locust实现集合点

    直接编写接口事务脚本对后台接口进行测试:有时测试需要让所有并发用户完成初始化后再进行压力测试,这就需要类似于LoadRunner中的集合点的概念,由于框架本身没有直接封装,有如下办法实现: from ...

  3. EasyExcel小试牛刀

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/12029411.html 某种偶然的机会遇到了这个插件, 听说很牛X, 我之前也不知道, 不过还 ...

  4. php程序员经验

    PHP 学习计划流程2008-10-22 17:23PHP 学习计划流程1.看教程 (2-3月)大概1天1个章节,比如<PHP圣经>有32章,1个多月就看完了,当然后面的章节每章1天肯定看 ...

  5. WebLogic11g- 集群化

    其实网上关于weblogic集群的资料非常多[大部分都是从创建新的domain开始,我这篇先介绍怎么样把原本普通的domain改造为集群环境],如果觉得不够,可以啃weblogic的官方文档.下面给几 ...

  6. 添加了tabBar之后就不能使用wx.navigateTo跳转页面

    我在app.json中添加了增加底部选项卡的代码如下:     { "pages": [ "pages/index/index", "pages/lo ...

  7. git本地仓库关联多个远程仓库及取消关联

    关联 本地和远程仓库关联步骤: 在网站上(如gitee.github等,这里以gitee为例)首先添加好自己的ssh公钥 本地创建一个空的项目,即文件夹. 在文件夹下git init初始化仓库 在gi ...

  8. 10、架构--keepalive、四层负载均衡

    笔记 1.晨考 1.HTTPS的作用,怎么实现的呢? 2.全栈部署HTTPS 只需在代理中部署HTTPS 3.反向代理 BBS 步骤 1.部署WEB机器 2.部署代理 4.如果 LB01 宕机了,怎么 ...

  9. MYSQL优化的一些性能与技巧

    1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一 ...

  10. 如何在 Flutter 中集成华为云函数服务

    介绍 云函数是一项 Serverless 计算服务,提供 FaaS(Function as a Service)能力,可以帮助开发者大幅简化应用开发与运维相关事务,降低应用功能的实现门槛,快速构建业务 ...