php 微信客服信息推送失败 微信重复推送客服消息 40001 45047
- /***
- * 微信客服发送信息
- * 微信客服信息推送失败 微信重复推送客服消息 40001 45047
- * 递归提交到微信 直到提交成功
- * @param $openid
- * @param int $is_repeat 是否递归
- * @return bool
- */
- function wx_kf_sendh($openid, $is_repeat = 0)
- {
- $result = M('Reply')->where("is_open=1")->order('listorder desc')->select();
- if(!$is_repeat) {
- $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
- if($logarr && $logarr['createtime'] > time()-10) {
- return false;
- }
- $dddata['openid'] = $openid;
- $dddata['createtime'] = time();
- $dddata['text'] = 0; //1 发送成功 0失败
- $dddata['image'] = 0; //1 发送成功 0失败
- $dddata['diy'] = 0; //1 发送成功 0失败
- $dddata['number'] = 0;
- //$dddata['name'] = getVip($openid, 'nickname');
- M('wx_kf_sendlog')->add($dddata);
- }
- foreach ($result as $k => $v) {
- if (empty($v['type'])) {
- continue;
- }
- if ($v['type'] == 'text') {
- $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
- if($logarr['text'] == '1') {
- continue;
- }
- $str = str_replace("<br/>", '\n', $v['description']);
- $str = str_replace(' ', '\r', $str);
- $str = str_replace('href="', "href='", $str);
- $str = str_replace('"', "'", $str);
- $data = '{
- "touser":"' . $openid . '",
- "msgtype":"text",
- "text":
- {
- "content":"' . $str . '"
- }
- }';
- //发送信息
- $appid = getids('config', 56, 'value');
- $appsecret = getids('config', 57, 'value');
- $accesstokenarr = getAccessToken($appid, $appsecret);
- $access_token = $accesstokenarr['access_token'];
- //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
- $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
- $rest = https_request($url, $data);
- $jsonsarr = json_decode($rest, true);
- if($jsonsarr['errcode'] != '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>0, 'number'=>$logarr['number']+1,'logtime'=>$logarr['logtime'].'|text:'.date('Y-m-d H:i:s')));
- wx_kf_send($openid,1);exit;
- } else {
- if($logarr['text'] == '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>1));
- }
- }
- } elseif ($v['type'] == 'image') {
- $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
- if($logarr['image'] == '1') {
- continue;
- }
- $data = '{
- "touser":"' . $openid . '",
- "msgtype":"image",
- "image":
- {
- "media_id":"' . $v['media_id'] . '"
- }
- }';
- //发送信息
- $appid = getids('config', 56, 'value');
- $appsecret = getids('config', 57, 'value');
- $accesstokenarr = getAccessToken($appid, $appsecret);
- $access_token = $accesstokenarr['access_token'];
- //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
- $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
- $rest = https_request($url, $data);
- $jsonsarr = json_decode($rest, true);
- $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
- if($jsonsarr['errcode'] != '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('image'=>0, 'number'=>$logarr['number']+1,'logtime'=>$logarr['logtime'].'|image:'.date('Y-m-d H:i:s')));
- wx_kf_send($openid,1);exit;
- } else {
- if($logarr['text'] == '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>1));
- }
- }
- } elseif ($v['type'] == 'diy') {
- $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
- if($logarr['diy'] == '1') {
- continue;
- }
- $data = '{
- "touser":"' . $openid . '",
- "msgtype":"image",
- "image":
- {
- "media_id":"' . down_share_img($openid) . '"
- }
- }';
- //发送信息
- $appid = getids('config', 56, 'value');
- $appsecret = getids('config', 57, 'value');
- $accesstokenarr = getAccessToken($appid, $appsecret);
- $access_token = $accesstokenarr['access_token'];
- //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
- $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
- $rest = https_request($url, $data);
- $jsonsarr = json_decode($rest, true);
- if($jsonsarr['errcode'] != '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>0, 'number'=>$logarr['number']+1,'logtime'=>$logarr['logtime'].'|diy:'.date('Y-m-d H:i:s')));
- wx_kf_send($openid,1);exit;
- } else {
- if($logarr['diy'] == '0') {
- M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('diy'=>1));
- }
- }
- }
- }
- }
如果本文章已帮助到您!
php 微信客服信息推送失败 微信重复推送客服消息 40001 45047的更多相关文章
- 从苹果apns的feedback服务器获取推送失败的token
在开发自己的苹果推送服务时候,要合理的控制ios设备的Token,而这个Token是由苹果服务器Apns产生的,就是每次app问Apns要Token,由苹果服务器产生的Token会记录到Apns里面, ...
- 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息
原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows ph ...
- 【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)
作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- ...
- Android推送服务——百度云推送
一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...
- iOS8自定义推送显示按钮及推送优化
http://www.jianshu.com/p/803bfaae989e iOS8自定义推送显示按钮及推送优化 字数1435 阅读473 评论0 喜欢2 导语 在iOS8中,推送消息不再只是简单地点 ...
- Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
- PhoneGap 的消息推送插件JPush极光推送
一. 什么是极光推送 极光推送,使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动, 从而有效地提高留存率,提升用户体验.平台提供整合了 Android 推送.iOS 推送的统一推 ...
- 百度收录检测并主动推送API(实时 mip推送通用)
简要描述: 百度收录检测并主动推送API(实时) 请求URL: api.bigjiji.com/baiduCheck_123456 调用方式: img标签 参数: 参数名 必选 类型 说明 site ...
- atitit.极光消息推送服务器端开发实现推送 jpush v3. 总结o7p
atitit.极光消息推送服务器端开发实现推送 jpush v3. 总结o7p 1. 推送所设计到底功能1 1.1. 内容压缩1 1.2. 多引擎1 2. reg ,设置appkey and pw ...
随机推荐
- 图解JavaScript中的原型链
转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...
- javascript typeof()的用法与运算符用法
typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算 ...
- Linux学习笔记之Linux第一课-基本介绍
Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...
- 加深理解HTTP请求---网络基础TCP/IP
为了了解HTTP,必须的了解TCP/IP协议族. 通常使用的网络实在TCP/IP协议族的基础上运作的.而HTTP就属于他的一个子集. 1.TCP/IP 协议族 计算机与网络设备要相互通信,双方就必须基 ...
- python入门19 异常及异常处理 异常捕获
常见异常举例 """ 一些异常举例:""" '''模块不存在 ModuleNotFoundError: No module named 'd ...
- linux下vi的一些简单的操作
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...
- bzoj1264 [AHOI2006]基因匹配
Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...
- 动态规划(DP),最大矩阵和
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=74 http://poj.org/problem?id=1050 解题 ...
- Windows下同时安装Anaconda2与Anaconda3
1. 安装一个作为主版本,比如先安装Anaconda2,安装时选择[添加path环境变量].我的安装地址为:E:\ProgramData\Anaconda3 2. 安装另一个版本python,安装时注 ...
- JavaScript面向对象编程之创建对象
参考资料依旧<JavaScript高级程序设计>,不得不说这本书写的太好了,讲的极为清晰凝练,好书! 先给出重点笔记,好好理解下面的三条笔记,每一句话都很重要: 1.实例的指针仅指向原型, ...