上传图片到微信服务器获得media_id和url (临时&永久性)

写在前面:php>=5.6,使用curlFile类,php<5.6使用@realpath(file)

其他接口类:https://www.cnblogs.com/gjw-hsf/p/7375261.html

转载地址:https://blog.csdn.net/httIsAWang/article/details/71576880

临时3天内有效;post请求url:

临时3天接口:
$url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$token."&type=".$type;
永久素材接口:
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$token."&type=".$type;

如果是本地选择图片并上传可能需要上传到服务器并在服务端进行post;

0、先是获取token;

function get_token($id, $s){
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='$id'&secret='$s'"; $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$jsoninfo = json_decode($output, true);
$token = $jsoninfo["access_token"];
return $token;
}

1、获取media_id和url   --- $filepath 必须得是 realpath(public_path('images/a1.png'))绝对路径

PHP的cURL支持通过给CURL_POSTFIELDS传递关联数组(而不是字符串)来生成multipart/form-data的POST请求。

传统上,PHP的cURL支持通过在数组数据中,使用“@+文件全路径”的语法附加文件,供cURL读取上传。这与命令行直接调用cURL程序的语法是一致的:

$type = "image";  //声明上传的素材类型,这里为image
$token = get_access_token();//调用接口需要获取token,这里使用一个封装好的调取access_token的函数
$url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=".$token."&type=".$type;
//这里是请求地址,token和素材类型通过get方式传递
$file_path = dirname(__FILE__)."/pro.jpg";
//这里声明文件的路径,使用绝对路径
$file_data = array('media' => '@'.$file_path);
//传递的数组,方式一:使用'@'符号加上文件的绝对路径来指引文件。这种方式适合PHP5.5之前的版本,
$file_data = array("media" => new \CURLFile($file_path));
//传递的数组,方式二:从PHP5.5版本以后,引入了新的CURLFile 类来指向文件,参数传入的也是绝对路径

$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, );
curl_setopt($ch , CURLOPT_POST, );
//发送一个POST请求
curl_setopt($ch , CURLOPT_POSTFIELDS, $file_data);
//传递一个关联数组,生成multipart/form-data的POST请求
$output = curl_exec($ch);//发送请求获取结果
curl_close($ch);//关闭会话
return $output;//返回结果
返回结果: {"media_id":"Y-wN-hbQ42QYeA5-956YrLgmGDTnl4bWqJr6AjsgoGk", "url":"http:\/\/mmbiz.qpic.cn\/mmbiz_jpg\/gyNXEoR9bg5UfM2wEFcz3tYO4a0adXo8Y4treMlnStHt8E0mDZazhxmGiamfU06tDkzCt55YR681Npd9sasH0xg\/0?wx_fmt=jpeg" }

文档:https://mp.weixin.qq.com/wiki/10/10ea5a44870f53d79449290dfd43d006.html

测试工具接口:https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload

【微信上传素材接口--永久性】微信永久性上传、获取返回的medie_id 和url的更多相关文章

  1. 微信公众号平台接口开发:基础支持,获取access_token

    新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessTo ...

  2. 微信公众号平台接口开发:基础支持,获取微信服务器IP地址

    官方说明 目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用 访问接口 修改WeCharBase.cs,新增以下2个方法 public static string Serve ...

  3. java微信接口之四—上传素材

    一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...

  4. 微信小程序客服消息新增临时素材接口java实现

    今天想在微信小程序的客服信息窗口里回复用户一个图片信息,发现还需要上传素材,但是微信文档的上传临时素材接口写的模模糊糊,无奈去百度,网上清一色的PHP实现方式,难道我穿越了?PHP已经把java给超越 ...

  5. C# 调用微信接口上传素材和发送图文消息

    using Common;using Newtonsoft.Json.Linq;using System;using System.IO;using System.Net;using System.T ...

  6. 微信上传素材 {"errcode":41005,"errmsg":"media data missing"} 解决方法和思路

    哎lol 连跪两把  就来写写博客    今天遇到一个问题 ,微信公众号开发上传素材是提示报错   41005    errcode":41005,"errmsg":&q ...

  7. 微信JS-SDK接口 + FLASK实现图片上传

    最近在做一个项目从全球各地采集图片,考虑采用微信JS-SDK来简化开发.图片会首先上传到微信的服务器,返回一个id,然后根据这个id去微信服务器获取图片.微信提供可选择的压缩图片功能.图片首先上传到微 ...

  8. 在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误

    这是 微信支付-统一下单 接口文档 一.问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二.排错过程 1.多 ...

  9. Java企业微信开发_07_素材管理之上传本地临时素材文件

    一.本节要点 1.临时素材有效期 media_id是可复用的,同一个media_id可用于消息的多次发送(3天内有效) 2.上传文件时的http请求里都有啥 具体原理可参看: 为什么上传文件的表单需要 ...

随机推荐

  1. System.getenv()和System.getProperty() 的区别

    1.System.getenv() 方法是获取指定的环境变量的值.它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null.另外一种是不接受参数,那么返回的是 ...

  2. Centos7安装OpenLDAP

    https://www.cnblogs.com/zhaijunming5/p/9522756.html

  3. 记一次Oracle分区表错误:ORA-14400: 插入的分区关键字未映射到任何分区

    https://blog.csdn.net/xdyzgjy/article/details/42238735

  4. 【前端基础系列】理解GET与POST请求区别

    语义区别 GET请求用于获取数据 POST请求用于提交数据 缓存 GET请求能被缓存,以相同的URL再去GET请求会返回304 POST请求不能缓存 数据长度 HTTP协议从未规定过GET/POST请 ...

  5. 【AtCoder】ARC080

    C - 4-adjacent 我们挑出来4的倍数和不是4的倍数而是2的倍数,和奇数 然后就是放一个奇数,放一个4,如果一个奇数之后无法放4,然后它又不是最后一个,那么就不合法 #include < ...

  6. MySQL普通用户无法本地登录的解决方法及MySQL的用户认证算法

    在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库.在使用普通用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况. 例如,我的MySQL中的用户为: mysql> ...

  7. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (六)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 23 图像变换 23.1 傅里叶变换目标本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • ...

  8. Linux学习之文件属性chattr权限与sudo权限(十二)

    Linux学习之文件属性chattr权限与sudo权限 文件属性chattr Linux文件的隐藏属性在保护系统文件的安全性上非常重要,是防止误操作的,对root用户也同样有效.chattr命令只能在 ...

  9. 使用 Spring Boot 搭建一套增删改查(无多余代码)

    前言 这是我学习 Spring Boot 的第三篇文章,终于可以见到效果了.错过的同学可以看看之前的文章 我们为什么要学习 Spring Boot Spring Boot 入门详细分析 在入门的基础上 ...

  10. shell 安装使用VIM

    安装:http://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html ubuntu系统: 普通用户下输入命令:sudo apt-get i ...