首先我们来看官方文档

这TM的搞笑呢 什么破玩意儿!

需要条件

1 需要有一个客服的账号 (废话)

2 一致jpg格式的图片(扯蛋)

完整流程

1 获取access_token

2获取账号

3 $url地址拼接

 $url = 'https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=' . $access_token . '&kf_account=' . $kf_account;

4 使用curl 模拟 post 文件提交(重点)

5获取curl 返回判断

下面是代码

PHP 业务逻辑

 /**
* 设置微信头像
* @param $app_id
* @param $kf_account
* @param $file $_FILES 文件哈
* @return int|mixed
*/
public static function upload_head_img($app_id, $kf_account, $file)
{
$access_token = self::get_access_token($app_id); $url = 'https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=' . $access_token . '&kf_account=' . $kf_account;
$path = $file['tmp_name']; //文件地址
$type = $file['type']; //文件类型 只支持 jpg类型的 image/jpg | image/jpeg 的注意
$file_name = $file['name']; //文件名 $result = wx_tools::curl_post_file($url, $path, $type, $file_name);
return $result;
}

curl 模拟提交

 /**
* 使用curl 文件上传 版本大于5.5
* @param $url
* @param $file_name
* @param $type
* @param $path
* @return int|mixed
*/
public static function curl_post_file($url, $path, $type, $file_name)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true);
$data = ['file' => new \CURLFile($path, $type, $file_name)];
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERAGENT, "TEST");
$result = curl_exec($curl);
$status = curl_getinfo($curl);
if (intval($status["http_code"]) == 200) {
curl_close($curl);
return $result;
}
$error = curl_errno($curl);
curl_close($curl);
return $error;
}

值得注意一点 因为PHP 版本大于5.5 之后不能够在使用@文件的方式传输

只能够实例化  CURLFile这个文件类 但是很坑的一点就是那些所谓的网上文档全是错误的

他们所有的写法 都是  $file = new \CURLFile($file_name);

但是我在使用的时候curl 执行一直是false

我们来看这个类的源码

    /**
* Create a CURLFile object
* @link http://www.php.net/manual/en/curlfile.construct.php
* @param string $filename <p>Path to the file which will be uploaded.</p>
* @param string $mimetype [optional] <p>Mimetype of the file.</p>
* @param string $postname [optional] <p>Name of the file.</p>
* @since 5.5.0
*/
function __construct($filename, $mimetype, $postname) {
}

看看别人的介绍 很清楚指出 文件类型 和文件名称都是需要的

PHP 微信公众号真正正确的客服头像上传的更多相关文章

  1. 从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

    目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较 ...

  2. 5-网页,网站,微信公众号基础入门(配置网站--PHP配置上数据库)

    https://www.cnblogs.com/yangfengwu/p/11037653.html php和数据库打交道,这样整个网页就完美了,有了数据存储,交互,动态网页才完美 首先修改下php. ...

  3. C# 客服端上传文件与服务器器端接收 (简单代码)

    简单代码: /*服务器端接收写入 可以实现断点续传*/ public string ConnectUpload(string newfilename,string filepath,byte[] fi ...

  4. VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)

    VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...

  5. PHP开发微信公众号(二)消息接受与推送

    上一篇文章我们知道怎么获取二维码,这样别人就可以扫描二维码来关注我们,但是别人关注后,发送消息,我们怎么进行相关处理? 这里我们就来学习下怎么处理处理这些消息,以及推送消息. 学习之前首先你需要有一个 ...

  6. weixin-java-mp集成微信公众号自带客服功能

    电脑端登录公众号管理后台,[添加功能插件]开通客服功能,输入"人工客服"接入客服热线 底部有我的微信二维码,如有问题,可加好友进行技术交流! ​ ​ ​ ​ ​ ​ ​ weixi ...

  7. 使用小书匠及markdown here编辑博客和微信公众号

    1. 使用小书匠连接Evernote并发布笔记到博客园 1.1 小书匠初探 我平时的信息收集的主要方法是采用Pocket+Evernote. 简单来说: 如果访问到非常有用,而且是必须要立刻记录的内容 ...

  8. JAVA微信公众号网页开发——将接收的消息转发到微信自带的客服系统

    如果公众号处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,无法直接推送给微信自带的客服功能.如果需要把用户推送的普通消息推送到客服功能中,就需要进行代码 ...

  9. 微信公众号支付JSAPI网页,total_fee错误不正确,header重定向参数丢失,无法获取订单号和金额解决

    微信公众号支付官方demo错误, 公众号支付只能用在微信里,也就是微信内部浏览器. 1.到WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode ...

随机推荐

  1. [转]javascript之数组操作

    javascript之数组操作 .数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个 ...

  2. IDEA配置 tomcat server

  3. HDU6315 Naive Operations(线段树 复杂度分析)

    题意 题目链接 Sol 这题关键是注意到题目中的\(b\)是个排列 那么最终的答案最多是\(nlogn\)(调和级数) 设\(d_i\)表示\(i\)号节点还需要加\(d_i\)次才能产生\(1\)的 ...

  4. 使用 Satis 搭建私有的 Composer 包仓库

    简述 iBrand 产品立项时是商业性质的项目,但是在搭建架构时考虑后续的通用性,因此每个模块都设计成一个 Package,作为公司内部用,因此这些包并不能提交到 packagist.org 上去. ...

  5. [转]用jwplayer+Nginx搭建视频点播服务器,解决拖动加载慢的问题

    flv视频可以采用两种方式发布: 一.普通的HTTP下载方式 二.基于Flash Media Server或Red5服务器的rtmp/rtmpt流媒体方式. 多数知名视频网站都采用的是前一种方式. 两 ...

  6. 02、体验Spark shell下RDD编程

    02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...

  7. April 4 2017 Week 14 Tuesday

    Problems are not stop signs, they are guidelines. 问题不是休止符,而是引向标. It is ture during our explorations ...

  8. Altium_Designer-怎么将“原理图的更改”更新到“pcb图”?

    打开原理图,直击菜单栏>>Design,选择第一项,>>Update PCB Document...在弹出的对话框里面选择执行更改即可将原理图更新到工程下面对应的PCB.也可以 ...

  9. 2018年Linux运维人员必会开源运维工具体系总结

    操作系统:Centos,Ubuntu,Redhat,suse,Freebsd 网站服务:nginx,apache,lighttpd,php,tomcat,resin数据库:MySQL,MariaDB, ...

  10. 使用taobao cnpm 源解决npm无法安装module问题

    npm 安装nativescript时出现异常,一直停着不动.应该是源被墙了的问题可以使用淘宝仓库,执行下面的命令: alias cnpm="npm --registry=https://r ...