博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thinkphp利用微信多客服消息推送取货二维码消息
阅读量:6487 次
发布时间:2019-06-24

本文共 3188 字,大约阅读时间需要 10 分钟。

首先看微信官方的说法:

当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),

微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据

包来发送消息给普通用户,在48小时内不限制发送次数。

根据上面消息可以找到发消息的突破口【发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权】这些事件

可以给公众号48小时的权限无限给触发的了以上事件的关注用户发送包括:文字,图片,新闻,视频,音乐,卡券消息。下面开始做开发:

【本次功能是给给用户推送购买成功后的取货二维码】

1、首先清楚再用户支付购买了餐点的,微信通知的notify_url方法处理完支付状态后在推送多客服消息,因为此时用户触发了【支付事件】

所以此时接口可用。调用send_qrcode_msg()方法发送二维码。

2、import("@.ORG.QRCode.qrlib");引入二维码生成类

生成指定内容的二维码图片png(此二维码包含取餐处理地址)

3、最推送图片前置处理,先来看微信官方的要求

发送图片消息数据包格式:

{

"touser":"OPENID",
"msgtype":"image",
"image":
{
"media_id":"MEDIA_ID"
}
}
很显然此时需要显示图片的是MEDIA_ID而不是图片链接,或者是html代码去显示二维码,换个思路在推送图片之前先拿到此时取餐二维码图片

放置在本地项目中那么来看官方文档上传图片素材接口,其中有临时素材这个比较合理

/***********

http请求方式: POST/FORM,需使用https

https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):
curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"

***********/

在第二步上传二维码的时候一定记得图片在本地项目中存储,然后根据二维码路径上传临时素材,拿到MEDIA_ID,此时离成功已经不远了。

最后一步就是按照多客服的图片参数包格式组装数据,curl给微信ok大功告成!

where(array('orderid'=>$orderid))->order('time asc')->getField('id'); $jump_url = "http://xxx/id/" . $id; import("@.ORG.QRCode.qrlib");//二维码 $qrcode_img = date('Ymd',time()).'_'.$id.'.png'; $png_temp_dir = './uploads/qrcode/'; $filename = $png_temp_dir.$qrcode_img; if (!is_dir($png_temp_dir) && !mkdir($png_temp_dir, 0777, true)) { echo 3;$this->error('二维码保存目录不可写'); } QRcode::png($jump_url, $filename, 'M', 4, 2); /* 上传临时二维码素材 */ $file_info=array( 'filename'=>$png_temp_dir, //图片相对于网站根目录的路径 'content-type'=>'image/png', //文件类型 ); $sc_url="https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$access_token."&type=image";//临时素材保存3天 $real_path="{
$_SERVER['DOCUMENT_ROOT']}/uploads/qrcode/{
$qrcode_img}"; $data= array("media"=>"@{
$real_path}",'form-data'=>$file_info); $media_id = $this->add_material($sc_url, $data); $Qrcode = '{"touser":"'.$dataArr["wecha_id"].'","msgtype":"image","image":{"media_id":"'.$media_id.'"}}'; $this->postCurl($Msg_url,$Qrcode); } /* 上传临时素材 */ public function add_material($url,$data){ $ch1 = curl_init (); $timeout = 5; curl_setopt ( $ch1, CURLOPT_URL, $url ); curl_setopt ( $ch1, CURLOPT_POST, 1 ); curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false ); curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data ); $result = curl_exec ( $ch1 ); curl_close ( $ch1 ); if(curl_errno()==0){ $result=json_decode($result,true); return $result['media_id']; }else { return false; } }}?>

 

转载于:https://www.cnblogs.com/bieanju/p/5806553.html

你可能感兴趣的文章
中金易云:为出版社找到下一本《解忧杂货店》
查看>>
三篇文章了解 TiDB 技术内幕 —— 说计算
查看>>
copy strong weak assign的区别
查看>>
OpenCV 入门
查看>>
css 3D transform变换
查看>>
ele表格合并行之后的selection选中
查看>>
正则表达式分解剖析(一文悟透正则表达式)
查看>>
解决UILable标点符号居中的问题
查看>>
HTML5新特性教程
查看>>
ImageOptim-无损图片压缩Mac版
查看>>
JavaScript函数(二)
查看>>
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>