/***
* 微信客服发送信息
* 微信客服信息推送失败 微信重复推送客服消息 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. 通知:即日起本博客暂停更新,请移步至yanxin8.com获取最新文章

    通知:即日起本博客暂停更新,请移步至yanxin8.com与博主交流及获取最新文章

  2. 在Android Studio上进行OpenCV 3.1开发环境配置

    开发环境: Windows 7 x 64 家庭版 Android Studio 1.5.1(Gradle版本2.8) JDK 1.8.0 Android 6.0(API 23) OpenCV 3.1. ...

  3. (转)防止ViewPager中的Fragment被销毁的方法

    在使用ViewPager与Fragment的时候,ViewPager会自动缓存1页内的数据,如下图: 当我们当前处在页面2的时候,页面1和页面3的View实际上已经创建好了,所以在我们拖动的时候是可以 ...

  4. 如何用css将一个div设置为一个圆

    直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...

  5. C# 调用第三方DLL z

    http://blog.163.com/da7_1@126/blog/static/104072678201311721326318/ 以下代码为本人在实际项目中编写的调用第三方DLL接口程序的完整代 ...

  6. JSP简要

    本篇知识导图 说起JSP,当年做课程设计什么的都用的这个,虽然技术比较古老,但是还是挺广泛使用的. JSP是一种前台的展现语言,在mvc里面属于表现层.它主要由静态,动态两部分组成,静态包括HTML, ...

  7. May 14th 2017 Week 20th Sunday

    A smooth sea never made a skillful mariner. 平静的海洋练不出熟练的水手. A smooth sea never made a skillful marine ...

  8. 解决SQLite打开已有路径下的db问题

    最近遇到的需要加载已有路径下(sd card下)db的问题,找了一下资料,以下是解决的方法,仅供参考(转载自eoe): SQLiteOpenHelper 是Android框架为我们提供的一个非常好的数 ...

  9. Android(java)学习笔记42:Map集合的获取功能

    1. Map集合的获取功能:  package cn.itcast_01; import java.util.Collection; import java.util.HashMap; import ...

  10. 「bzoj3687: 简单题」

    题目 发现需要一个\(O(n\sum a_i )\)的做法 于是可以直接做一个背包,\(dp[i]\)表示和为\(i\)的子集是否有奇数种 \(bitset\)优化一下就好了 #include< ...