1. <?php
  2. /*
  3. +----------------------------------------------------------------------
  4. + Title : PHP微信开发 上传临时素材
  5. + Author : 小黄牛
  6. + Version : 无
  7. + Initial-Time : 2016-10-29 10:53:00
  8. + Last-time : 2016-10-29 10:53:00 + 小黄牛
  9. + Desc : 这个接口跟微信支付一样重要,分销功能一定会用到,并且10个微网站,8个会用到
  10. +
  11. + 注意事项
  12. + 上传的临时多媒体文件有格式和大小限制,如下:
  13. + 图片(image): 1M,支持JPG格式
  14. + 语音(voice):2M,播放长度不超过60s,支持AMRMP3格式
  15. + 视频(video):10MB,支持MP4格式
  16. + 缩略图(thumb):64KB,支持JPG格式
  17. + 媒体文件在后台保存时间为3天,即3天后media_id失效。
  18. +----------------------------------------------------------------------------------------------------------------------------------------------
  19. */
  20. # 引入Access_Token更新文件
  21. require_once 'Access_Token.php';
  22. $AccessToken = new Access_Token();
  23. # 定义Access_Token常量
  24. define('ACCESS_TOKEN',$AccessToken->GetToken());
  25. $WeiXin = new WeiXin();
  26. $WeiXin->Url();
  27. class WeiXin{
  28. public function Url(){
  29. # 上传类型
  30. $type = 'image';//媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
  31. # 接口地址
  32. $url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.ACCESS_TOKEN.'&type='.$type;
  33. # 参数
  34. $data= array(
  35. 'media' => '@'.'1.jpg',//前头必须带个@
  36. );
  37. $result = self::https_request($url, $data);//一定要转成JSON
  38. $res = json_decode($result,true);
  39. $this->Error_Log(array(
  40. '接口地址' => $url,
  41. '图片类型' => $res['type'],
  42. '唯一标识' => $res['media_id'],
  43. '上传时间' => $res['created_at']
  44. ));//记录日志,以防报错
  45. }
  46. # 作者:焰哥 - 用于微信接口数据传输的万能函数
  47. private static function https_request($url, $data = null){
  48. # 初始化一个cURL会话
  49. $curl = curl_init();
  50. //设置请求选项, 包括具体的url
  51. curl_setopt($curl, CURLOPT_URL, $url);
  52. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); //禁用后cURL将终止从服务端进行验证
  53. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  54. if (!empty($data)){
  55. curl_setopt($curl, CURLOPT_POST, 1); //设置为post请求类型
  56. curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //设置具体的post数据
  57. }
  58. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  59. $response = curl_exec($curl); //执行一个cURL会话并且获取相关回复
  60. curl_close($curl); //释放cURL句柄,关闭一个cURL会话
  61. return $response;
  62. }
  63. /**
  64. * @Title : 记录错误信息与查看部分信息
  65. * @Author : 小黄牛
  66. * @param array : $Arr_Title 一个一维数组自定义内容
  67. * @param bool : $Arr_Error 是否插入系统错误信息
  68. * @param string : $File 日志名
  69. * @return : 无
  70. */
  71. private function Error_Log($Arr_Title,$Arr_Error=false,$File='Error_log.log'){
  72. # 不是数组中断程序
  73. if (!is_array($Arr_Title)) {return false;}
  74. # 定义一个空的变量,用于存放日志TXT实体
  75. $Error_TXT = "自定义信息如下:rn";
  76. # 解析Arr_Title 自定义日志内容
  77. foreach ($Arr_Title as $key=>$val){
  78. $Error_TXT .= $key.':'.$val."rn";
  79. }
  80. # 判断系统错误显示是否开启
  81. if ($Arr_Error === true) {
  82. # 获取刚发生的错误信息,并返回数组,无错返回null
  83. $Arr_Error = error_get_last();
  84. # 不为空则执行错误解析
  85. if (isset($Arr_Error)) {
  86. $Error_TXT .= "系统错误信息如下:rn";
  87. # 解析$Arr_Errore 系统错误信息
  88. foreach ($Arr_Title as $key=>$val){
  89. $Error_TXT .= $key.':'.$val."rn";
  90. }
  91. }
  92. }
  93. # 最后再写入两个换行符,以便追加查看
  94. $Error_TXT .= "rnrn";
  95. # 最后写入日志
  96. error_log($Error_TXT,3,$File);
  97. }
  98. }