基于PHP实现微信小程序客服消息功能


Posted in PHP onAugust 12, 2019

项目说明:

本项目是一个简单微信小程序客服消息类,实现客服消息相关功能。官方给的php示例有误,这里就不再吐槽了。

本示例是采用开发者服务器,没有采用云调用的形式。

官方文档:

客服消息指南

客服消息服务端

适用场景

基于PHP实现微信小程序客服消息功能

客户消息流程图

基于PHP实现微信小程序客服消息功能

使用步骤

1、开启客服消息

https://mp.weixin.qq.com/wxam...

登录-开发-开发设置-消息推送

[]( https://raw.githubusercontent...

点击“启动”

[]( https://raw.githubusercontent...

URL(服务器地址):填开发者服务器对应的url,如 https://xxxxxx/demo.php

Token(令牌):这个随便填,要求3-32位。

EncodingAESKey(消息加密密钥):这个点击“随机生成”即可。

消息加密方式:可以根据自己需要选择,本例选择”兼容模式“。

数据格式:json相对于xml来说,从压缩效率及传输效率更具优势,这里我们选json。

注意:以上操作完后先不要提交,等配置好开发者服务端后再提交。

2、配置开发者服务端

检验signature的PHP示例代码:

$signature = $_GET["signature"];
 $timestamp = $_GET["timestamp"];
 $nonce = $_GET["nonce"];
 $echostr=$_GET["echostr"];

 $token = TOKEN;//这里改成你第一步操作时填写的token
 $tmpArr = array($token, $timestamp, $nonce);
 sort($tmpArr, SORT_STRING);
 $tmpStr = implode( $tmpArr );
 $tmpStr = sha1( $tmpStr );

 if ($tmpStr == $signature ) {
 return $echostr;
 } else {
 return false;
 }

官方示例没有返回 $echostr ,这个检验开发者服务端是否成功的关键,必须返回。

3、提交消息推送配置

如果没有报错,证明配置成功。

基于PHP实现微信小程序客服消息功能

4、开发者服务端demo

<?php
//验证signature
//$signature = $_GET["signature"];
//$timestamp = $_GET["timestamp"];
//$nonce = $_GET["nonce"];
//$echostr=$_GET["echostr"];
//
//$token = TOKEN;//这里改成你第一步操作时填写的token
//$tmpArr = array($token, $timestamp, $nonce);
//sort($tmpArr, SORT_STRING);
//$tmpStr = implode( $tmpArr );
//$tmpStr = sha1( $tmpStr );
//
//if ($tmpStr == $signature ) {
// return $echostr;
//} else {
// return false;
//}
include_once './Xcxmsg.php';
$xcxmsg = new Xcxmsg();
$postStr = file_get_contents('php://input');
if (!$postStr)
 return false;
$postArr = json_decode($postStr, true);
if (!isset($postArr['MsgType']) || !isset($postArr['FromUserName']))
 return false;
$data = ["touser" => $postArr['FromUserName']];
$accessToken = $xcxmsg->getAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $accessToken;
switch ($postArr['MsgType']) {
 case "text":
 //如用户发送的是文字信息,这里处理
 //回复图文链接,也可以回复别的类型,根据需要
 $data['msgtype'] = "link";
 $data['link'] = [
  "title" => "hello",
  "description" => "Is Really A Happy Day",
  "url" => "LINK_URL",//连接url
  "thumb_url" =>"THUMB_URL" //图片url
 ];
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 case "image": //如用户发送图片消息,进入这里
 //服务端回复 图片,也可以回复别的类型,根据需要
 $data['msgtype'] = "image";
 $data['image'] = ['media_id' => 'media_id值']; // 执行 $xcxmsg->upload($accessToken)返回的 media_id
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 case "miniprogrampage":
 //如用户发送小程序卡片,进入这里
 //这里服务端回复小卡片,也可以回复别的类型,根据需要
 $data['msgtype'] = "miniprogrampage";
 $data['miniprogrampage'] = [
  "title" => "title",
  "pagepath" => "pages/index/index",
  "thumb_media_id" => "media_id值"];// 执行 $xcxmsg->upload($accessToken)返回的 media_id
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 case "event":
 //如用户进入会话事件
 //这里可以回复文本
 $data['msgtype'] = "text";
 $data['text'] = [
  "content" => "Hello World",
  ];
 $json = json_encode($data, JSON_UNESCAPED_UNICODE);
 $xcxmsg->curl($json, $url);
 break;
 default:
}

5、小程序前端

在需要的地方添加以下代码:

<button open-type="contact" >客服消息</button>

用微信开发工具的预览,生成二维码,扫描测试是否成功。

项目地址: https://github.com/guyan0319/...

总结

以上所述是小编给大家介绍的基于PHP实现微信小程序客服消息功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

PHP 相关文章推荐
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
php数组函数序列之array_flip() 将数组键名与值对调
Nov 07 PHP
PHP语言中global和$GLOBALS[]的分析 之二
Feb 02 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php中随机函数mt_rand()与rand()性能对比分析
Dec 01 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php图片上传类 附调用方法
May 15 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
详解php协程知识点
Sep 21 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 #PHP
PHP基于swoole多进程操作示例
Aug 12 #PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 #PHP
php使用pecl方式安装扩展操作示例
Aug 12 #PHP
PHP实现与java 通信的插件使用教程
Aug 11 #PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 #PHP
thinkPHP和onethink微信支付插件分享
Aug 11 #PHP
You might like
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JS之相等操作符详解
2016/09/13 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
React-Native中禁用Navigator手势返回的示例代码
2017/09/09 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python对于requests的封装方法详解
2019/01/03 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python日志处理模块logging用法解析
2020/05/19 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
学生会主席事迹材料
2014/01/28 职场文书
篮球赛口号
2014/06/18 职场文书
产品委托授权书范本
2014/09/16 职场文书
学历证明范文
2015/06/16 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
护理自荐信
2019/05/14 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL