/***
* 微信客服发送信息
* 微信客服信息推送失败 微信重复推送客服消息 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('&nbsp;', '\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的更多相关文章

  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. Sharepoint 2013企业内容管理学习笔记(一) 半自动化内容管理

    大家好,今天我来与大家分享一个关于sharepoint2013文档管理方面的一个知识,我相信也许早就有人了解并熟知这项技术了,呵呵,众所周知,sharepoint 有一个很亮的功能,什么?没错,就是文 ...

  2. 某虚拟定位APP从破解到原理分析

    工具环境ida7.0iphone 6ios 10.2 0x00:基本情况 1. 该app可以修改模拟手机地理位置(gps.基站.WIFI),拥有全局定位.指定应用定位.模拟扫街等功能,只能在已越狱的I ...

  3. 【Leetcode】【Easy】Reverse Integer

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have you ...

  4. 【Leetcode】【Easy】Remove Nth Node From End of List

    Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...

  5. /etc/hosts.allow和/etc/hosts.deny详解

    今天遇到一台服务器22端口正常,但是通过ssh连接的问题.排查了防火墙和端口问题,半天没有找出来原因,后来求助大神,终于明白了通过etc目录下hosts.deny和hosts.allow文件可以限制远 ...

  6. ORA-01795: 列表中的最大表达式数为1000的解决方法

    IN中的数据量不能超过1000条. 解决方案:把条件分成多个少于1000的IN即: DELETEFROMT_MM_SECTION_SITE_UPDATEWHERE T.T_MM_SECTION_SL_ ...

  7. 第二次scrum冲击

    1.小组第二次冲刺任务及其完成情况描述. 本次冲刺我们小组经过讨论,实现的使我们爱上长大系统中的失物招领功能,由于在实际的实现中,对于本功能的逐渐深入和了解,渐渐发现这个功能实现起来需要由很多部分组成 ...

  8. 从产品展示页面谈谈Hybris系列之二: DTO, Converter和Populator

    文章作者:张健(Zhang Jonathan) 上一篇文章 从产品展示页面谈谈Hybris的特有概念和设计结构 我们讲解了Hybris一些特有的概念以及大体架构,并且介绍了Facade层里是如何定义D ...

  9. OAuth 2.0协议在SAP产品中的应用

    阮一峰老师曾经在他的博文理解OAuth 2.0里对这个概念有了深入浅出的阐述. http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 本文会结合我 ...

  10. 每天一个linux命令(21):chgrp,chown,chmod

    这三个命令都是改变文件属性与权限的,就放一起写了 charp:改变文件所属用户组 chown:改变文件所属者 chmod:改变文件的权限 一个文件对于owner,group ,others有不同的权限 ...