1. /***
  2. * 微信客服发送信息
  3. * 微信客服信息推送失败 微信重复推送客服消息 40001 45047
  4. * 递归提交到微信 直到提交成功
  5. * @param $openid
  6. * @param int $is_repeat 是否递归
  7. * @return bool
  8. */
  9. function wx_kf_sendh($openid, $is_repeat = 0)
  10. {
  11. $result = M('Reply')->where("is_open=1")->order('listorder desc')->select();
  12.  
  13. if(!$is_repeat) {
  14. $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
  15. if($logarr && $logarr['createtime'] > time()-10) {
  16. return false;
  17. }
  18. $dddata['openid'] = $openid;
  19. $dddata['createtime'] = time();
  20. $dddata['text'] = 0; //1 发送成功 0失败
  21. $dddata['image'] = 0; //1 发送成功 0失败
  22. $dddata['diy'] = 0; //1 发送成功 0失败
  23. $dddata['number'] = 0;
  24. //$dddata['name'] = getVip($openid, 'nickname');
  25. M('wx_kf_sendlog')->add($dddata);
  26. }
  27.  
  28. foreach ($result as $k => $v) {
  29.  
  30. if (empty($v['type'])) {
  31. continue;
  32. }
  33.  
  34. if ($v['type'] == 'text') {
  35. $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
  36. if($logarr['text'] == '1') {
  37. continue;
  38. }
  39. $str = str_replace("<br/>", '\n', $v['description']);
  40. $str = str_replace('&nbsp;', '\r', $str);
  41. $str = str_replace('href="', "href='", $str);
  42. $str = str_replace('"', "'", $str);
  43. $data = '{
  44. "touser":"' . $openid . '",
  45. "msgtype":"text",
  46. "text":
  47. {
  48. "content":"' . $str . '"
  49. }
  50. }';
  51.  
  52. //发送信息
  53. $appid = getids('config', 56, 'value');
  54. $appsecret = getids('config', 57, 'value');
  55. $accesstokenarr = getAccessToken($appid, $appsecret);
  56. $access_token = $accesstokenarr['access_token'];
  57. //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
  58. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
  59.  
  60. $rest = https_request($url, $data);
  61. $jsonsarr = json_decode($rest, true);
  62. if($jsonsarr['errcode'] != '0') {
  63.  
  64. 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')));
  65. wx_kf_send($openid,1);exit;
  66. } else {
  67. if($logarr['text'] == '0') {
  68. M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>1));
  69. }
  70. }
  71.  
  72. } elseif ($v['type'] == 'image') {
  73.  
  74. $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
  75. if($logarr['image'] == '1') {
  76. continue;
  77. }
  78.  
  79. $data = '{
  80. "touser":"' . $openid . '",
  81. "msgtype":"image",
  82. "image":
  83. {
  84. "media_id":"' . $v['media_id'] . '"
  85. }
  86. }';
  87.  
  88. //发送信息
  89. $appid = getids('config', 56, 'value');
  90. $appsecret = getids('config', 57, 'value');
  91. $accesstokenarr = getAccessToken($appid, $appsecret);
  92. $access_token = $accesstokenarr['access_token'];
  93. //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
  94. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
  95.  
  96. $rest = https_request($url, $data);
  97. $jsonsarr = json_decode($rest, true);
  98. $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
  99. if($jsonsarr['errcode'] != '0') {
  100.  
  101. 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')));
  102. wx_kf_send($openid,1);exit;
  103. } else {
  104. if($logarr['text'] == '0') {
  105. M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('text'=>1));
  106. }
  107. }
  108.  
  109. } elseif ($v['type'] == 'diy') {
  110. $logarr = M('wx_kf_sendlog')->where("openid='".$openid."'")->order('createtime desc')->find();
  111. if($logarr['diy'] == '1') {
  112. continue;
  113. }
  114. $data = '{
  115. "touser":"' . $openid . '",
  116. "msgtype":"image",
  117. "image":
  118. {
  119. "media_id":"' . down_share_img($openid) . '"
  120. }
  121. }';
  122.  
  123. //发送信息
  124. $appid = getids('config', 56, 'value');
  125. $appsecret = getids('config', 57, 'value');
  126. $accesstokenarr = getAccessToken($appid, $appsecret);
  127. $access_token = $accesstokenarr['access_token'];
  128. //通过基础消息接口发送的数据是XML格式的,但是调用客服接口发送的数据是json数据格式,更易传输。
  129. $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $access_token;
  130.  
  131. $rest = https_request($url, $data);
  132. $jsonsarr = json_decode($rest, true);
  133. if($jsonsarr['errcode'] != '0') {
  134. 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')));
  135. wx_kf_send($openid,1);exit;
  136. } else {
  137. if($logarr['diy'] == '0') {
  138. M('wx_kf_sendlog')->where("id=".$logarr['id'])->save(array('diy'=>1));
  139. }
  140. }
  141.  
  142. }
  143. }
  144. }

如果本文章已帮助到您!

php 微信客服信息推送失败 微信重复推送客服消息 40001 45047的更多相关文章

  1. 从苹果apns的feedback服务器获取推送失败的token

    在开发自己的苹果推送服务时候,要合理的控制ios设备的Token,而这个Token是由苹果服务器Apns产生的,就是每次app问Apns要Token,由苹果服务器产生的Token会记录到Apns里面, ...

  2. 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息

    原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows ph ...

  3. 【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)

    作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- ...

  4. Android推送服务——百度云推送

    一.推送服务简介 消息推送,顾名思义,是由一方主动发起,而另一方与发起方以某一种方式建立连接并接收消息.在Android开发中,这里的发起方我们把它叫做推送服务器(Push Server),接收方叫做 ...

  5. iOS8自定义推送显示按钮及推送优化

    http://www.jianshu.com/p/803bfaae989e iOS8自定义推送显示按钮及推送优化 字数1435 阅读473 评论0 喜欢2 导语 在iOS8中,推送消息不再只是简单地点 ...

  6. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  7. PhoneGap 的消息推送插件JPush极光推送

    一. 什么是极光推送 极光推送,使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动, 从而有效地提高留存率,提升用户体验.平台提供整合了 Android 推送.iOS 推送的统一推 ...

  8. 百度收录检测并主动推送API(实时 mip推送通用)

    简要描述: 百度收录检测并主动推送API(实时) 请求URL: api.bigjiji.com/baiduCheck_123456 调用方式: img标签 参数: 参数名 必选 类型 说明 site ...

  9. atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p

    atitit.极光消息推送服务器端开发实现推送  jpush v3. 总结o7p 1. 推送所设计到底功能1 1.1. 内容压缩1 1.2. 多引擎1 2. reg  ,设置appkey and pw ...

随机推荐

  1. 图解JavaScript中的原型链

    转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof o ...

  2. javascript typeof()的用法与运算符用法

    typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typeof[()expression[]] ; expression 参数是需要查找类型信息的任意表达式. 说明 typeof 运算 ...

  3. Linux学习笔记之Linux第一课-基本介绍

    Linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...

  4. 加深理解HTTP请求---网络基础TCP/IP

    为了了解HTTP,必须的了解TCP/IP协议族. 通常使用的网络实在TCP/IP协议族的基础上运作的.而HTTP就属于他的一个子集. 1.TCP/IP 协议族 计算机与网络设备要相互通信,双方就必须基 ...

  5. python入门19 异常及异常处理 异常捕获

    常见异常举例 """ 一些异常举例:""" '''模块不存在 ModuleNotFoundError: No module named 'd ...

  6. linux下vi的一些简单的操作

    前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...

  7. bzoj1264 [AHOI2006]基因匹配

    Description 基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱 ...

  8. 动态规划(DP),最大矩阵和

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=74 http://poj.org/problem?id=1050 解题 ...

  9. Windows下同时安装Anaconda2与Anaconda3

    1. 安装一个作为主版本,比如先安装Anaconda2,安装时选择[添加path环境变量].我的安装地址为:E:\ProgramData\Anaconda3 2. 安装另一个版本python,安装时注 ...

  10. JavaScript面向对象编程之创建对象

    参考资料依旧<JavaScript高级程序设计>,不得不说这本书写的太好了,讲的极为清晰凝练,好书! 先给出重点笔记,好好理解下面的三条笔记,每一句话都很重要: 1.实例的指针仅指向原型, ...