{"id":28577,"date":"2024-11-25T08:13:10","date_gmt":"2024-11-25T00:13:10","guid":{"rendered":"https:\/\/fwq.ai\/blog\/28577\/"},"modified":"2024-11-25T08:13:10","modified_gmt":"2024-11-25T00:13:10","slug":"%e8%af%a6%e8%a7%a3%e4%bd%bf%e7%94%a8php%e8%b0%83%e7%94%a8%e5%be%ae%e4%bf%a1%e6%8e%a5%e5%8f%a3%e4%b8%8a%e4%bc%a0%e6%b0%b8%e4%b9%85%e7%b4%a0%e6%9d%90","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/28577\/","title":{"rendered":"\u8be6\u89e3\u4f7f\u7528php\u8c03\u7528\u5fae\u4fe1\u63a5\u53e3\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u8be6\u89e3\u4f7f\u7528php\u8c03\u7528\u63a5\u53e3\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750\uff0c<\/p>\n<p><strong>\u529f\u80fd\u9700\u6c42<\/strong><\/p>\n<p>\u516c\u53f8\u65b0\u5f00\u7684\u516c\u4f17\u53f7\u9700\u8981\u5c06\u516c\u53f8\u5e73\u53f0\u73b0\u5728\u7684\u6240\u6709\u7cbe\u54c1\u6587\u7ae0\u90fd\u5bfc\u5165\uff0c\u624b\u52a8\u5bfc\u5165\u4f1a\u6709\u5f88\u591a\u7684\u5de5\u4f5c\u91cf\uff0c\u6240\u4ee5\u91c7\u7528\u81ea\u52a8\u5316\u540c\u6b65\u6587\u7ae0\u7684\u65b9\u5f0f\u6765\u8fbe\u5230\u6548\u679c<\/p>\n<p><strong>\u5f00\u53d1\u8bf4\u660e<\/strong><\/p>\n<p>\u5fae\u4fe1open api\u63d0\u4f9b\u4e86\u65b0\u589e\u6c38\u4e45\u7d20\u6750\u7684\u63a5\u53e3\uff0c\u672c\u6b21\u529f\u80fd\u662f\u57fa\u4e8e\u8fd9\u4e2a\u63a5\u53e3\u8fdb\u884c\u6570\u636e\u540c\u6b65\u7684<\/p>\n<p><span>\u7acb\u5373\u5b66\u4e60<\/span>\u201c\u201d\uff1b<\/p>\n<p>\u4f7f\u7528\u5230\u7684\u63a5\u53e3<\/p>\n<ol>\n<li>\n<p>\u83b7\u53d6\u6c38\u4e45\u7d20\u6750\u5217\u8868\u63a5\u53e3\uff1amaterial\/batchget_material<\/p>\n<\/li>\n<li>\n<p>\u65b0\u589e\u6c38\u4e45\u7d20\u6750\u63a5\u53e3\uff1amaterial\/add_news<\/p>\n<\/li>\n<li>\n<p>\u65b0\u589e\u5a92\u4f53\u6587\u4ef6\u63a5\u53e3\uff1amaterial\/add_material<\/p>\n<\/li>\n<li>\n<p>\u56fe\u6587\u7c7b\u578b<\/p>\n<\/li>\n<li>\n<p>\u5355\u56fe\u6587\uff08\u8981\u6c42\u6709\u9ed8\u8ba4\u7684\u5c01\u9762\uff0c\u9700\u8981\u63d0\u524d\u4e0a\u4f20\u5230\u5fae\u4fe1\u516c\u4f17\u53f7\u540e\u53f0\uff09<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u73af\u5883\u8981\u6c42<br \/><\/strong><\/p>\n<p>php\u7248\u672c\uff1a5.5\u4ee5\u4e0b\uff08\u56e0\u4e3a\u4e0b\u9762\u4ee3\u7801\u4e2d\u7684\u4e0a\u4f20\u5a92\u4f53\u6587\u4ef6\u5fc5\u987b\u8981\u6c42\u5728\u6b64\u73af\u5883\uff0c\u5426\u5219\u4f1a\u8c03\u7528\u5fae\u4fe1\u63a5\u53e3\u5931\u8d25\uff09<\/p>\n<p>\u5f00\u53d1\u6d41\u7a0b<\/p>\n<p>1\u3001\u4ece\u516c\u53f8\u5e73\u53f0\u83b7\u53d6\u6240\u6709\u7684\u6587\u7ae0\u5217\u8868<br \/>2\u3001\u904d\u5386\u6587\u7ae0\u5217\u8868\uff0c\u67e5\u770b\u6587\u7ae0\u662f\u5426\u6709\u56fe\u7247\u9644\u4ef6\uff0c\u82e5\u6709\u8fdb\u884c\u7b2c\u4e09\u6b65\uff0c\u5426\u5219\u8fdb\u884c\u7b2c\u56db\u6b65<br \/>3\u3001\u68c0\u6d4b\u6240\u6709\u7684\u9644\u4ef6\uff0c\u53d6\u51fa\u7b2c\u4e00\u4e2a\u56fe\u7247\u9644\u4ef6\uff0c\u5e76\u8c03\u7528\u65b0\u589e\u5a92\u4f53\u6587\u4ef6\u63a5\u53e3\u4e0a\u4f20\u56fe\u7247\u83b7\u5f97\u8fd4\u56de\u540e\u7684media_id<br \/>4\u3001\u8c03\u7528\u7d20\u6750\u5217\u8868\u63a5\u53e3\u83b7\u53d6\u9ed8\u8ba4\u7684\u5c01\u9762\u56fe\u7247\uff0c\u5e76\u4ece\u4e2d\u5f97\u5230\u7684\u6570\u636e\u4e2d\u83b7\u53d6media_id<br \/>5\u3001\u6839\u636e\u8fd4\u56de\u83b7\u53d6\u5230\u7684media_id\u5f00\u59cb\u8c03\u7528\u4e0a\u4f20\u56fe\u6587\u63a5\u53e3\u4e0a\u4f20\u7d20\u6750<br \/>6\u3001\u8bb0\u5f55\u8fd4\u56de\u4fe1\u606f<\/p>\n<p><strong>\u63a5\u53e3\u8bbe\u8ba1<\/strong><\/p>\n<p>\u83b7\u53d6\u5fae\u4fe1\u7d20\u6750\u5217\u8868\u63a5\u53e3<\/p>\n<p>\u6b64\u63a5\u53e3\u662f\u7528\u4e8e\u83b7\u53d6\u9ed8\u8ba4\u7684\u56fe\u7247media_id\u540c\u6b65\u5e73\u53f0\u6570\u636e\u63a5\u53e3<\/p>\n<p>\u6b64\u63a5\u53e3\u662f\u7528\u6237\u540c\u6b65\u6211\u4eec\u81ea\u5df1\u7684\u6587\u7ae0\u6570\u636e\u5230\u5fae\u4fe1\u529f\u80fd\u5b9e\u73b0<\/p>\n<p>\u63a5\u53e3\u5e38\u91cf<\/p>\n<p><\/p>\n<pre>private&nbsp;$app_id&nbsp;=&nbsp;'wx189ae9fa8816b131';\r\nprivate&nbsp;$app_secret&nbsp;=&nbsp;'36f5f430c591acbae3505fe877733283';\r\nconst&nbsp;API_URL_PREFIX&nbsp;=&nbsp;'https:\/\/api.weixin.qq.com\/cgi-bin';\r\nconst&nbsp;MEDIA_FOREVER_UPLOAD_URL&nbsp;=&nbsp;'\/material\/add_material?';\r\nconst&nbsp;MEDIA_FOREVER_NEWS_UPLOAD_URL&nbsp;=&nbsp;'\/material\/add_news?';\r\nconst&nbsp;MEDIA_FOREVER_NEWS_UPDATE_URL&nbsp;=&nbsp;'\/material\/update_news?';\r\nconst&nbsp;MEDIA_FOREVER_GET_URL&nbsp;=&nbsp;'\/material\/get_material?';\r\nconst&nbsp;MEDIA_FOREVER_DEL_URL&nbsp;=&nbsp;'\/material\/del_material?';\r\nconst&nbsp;MEDIA_FOREVER_COUNT_URL&nbsp;=&nbsp;'\/material\/get_materialcount?';\r\nconst&nbsp;MEDIA_FOREVER_BATCHGET_URL&nbsp;=&nbsp;'\/material\/batchget_material?';<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\u83b7\u53d6\u5fae\u4fe1\u7d20\u6750\u5217\u8868\u63a5\u53e3<\/strong><\/p>\n<p>action\u63a5\u53e3\u65b9\u6cd5<\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u6b64\u63a5\u53e3\u7684\u5165\u53e3\u65b9\u6cd5<\/p>\n<p>\u8c03\u7528\u65b9\u5f0f\uff1ahttp:\/\/${domain}\/weixin\/get_articles\/<\/p>\n<p><\/p>\n<pre>&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;*&nbsp;\u83b7\u53d6\u56fe\u7247\u7d20\u6750\u63a5\u53e3\r\n&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;public&nbsp;function&nbsp;get_articles_action(){\r\n&nbsp;&nbsp;&nbsp;$token&nbsp;=&nbsp;$this-&amp;gt;get_access_token();\r\n&nbsp;&nbsp;&nbsp;$list&nbsp;=&nbsp;$this-&amp;gt;getForeverList($token,'image',0,20);\r\n&nbsp;&nbsp;&nbsp;echo&nbsp;json_encode($list);\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;get_access_token\u65b9\u6cd5\r\n&nbsp;&nbsp;\r\n&nbsp;&nbsp;private&nbsp;function&nbsp;get_access_token()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;$access_token&nbsp;=&nbsp;AWS_APP::cache()-&amp;gt;get('access_token');\r\n&nbsp;&nbsp;&nbsp;if(!$access_token){\r\n&nbsp;&nbsp;&nbsp;&nbsp;error_log('get&nbsp;access_token&nbsp;from&nbsp;weixin&nbsp;');\r\n&nbsp;&nbsp;&nbsp;&nbsp;$appId&nbsp;=&nbsp;$this-&amp;gt;app_id;\r\n&nbsp;&nbsp;&nbsp;&nbsp;$appSecret&nbsp;=&nbsp;$this-&amp;gt;app_secret;\r\n&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;\"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=$appId&amp;amp;secret=$appSecret\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;$res&nbsp;=&nbsp;json_decode($this&nbsp;-&amp;gt;&nbsp;httpGet($url));\r\n&nbsp;&nbsp;&nbsp;&nbsp;$access_token&nbsp;=&nbsp;$res&nbsp;-&amp;gt;&nbsp;access_token;\r\n&nbsp;&nbsp;&nbsp;&nbsp;AWS_APP::cache()-&amp;gt;set('access_token',$access_token,time()+3600);\r\n&nbsp;&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;&nbsp;error_log('get&nbsp;access_token&nbsp;from&nbsp;cache&nbsp;');\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;error_log('access_token&nbsp;is&nbsp;:'.$access_token);\r\n&nbsp;&nbsp;&nbsp;return&nbsp;$access_token;\r\n&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\u8c03\u7528\u5fae\u4fe1\u7d20\u6750\u63a5\u53e3\u65b9\u6cd5<\/strong><\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u8c03\u7528\u5fae\u4fe1\u83b7\u53d6\u6c38\u4e45\u7d20\u6750\u5217\u8868\u63a5\u53e3\u65b9\u6cd5<\/p>\n<p><\/p>\n<pre>&nbsp;\/**\r\n&nbsp;&nbsp;*&nbsp;\u83b7\u53d6\u6c38\u4e45\u7d20\u6750\u5217\u8868\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;$token\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;$type&nbsp;\u7c7b\u578b\u6709image,vedio\u548caudio\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;$offset&nbsp;\u8d77\u59cb\u4f4d\u7f6e\uff0c0\u8868\u793a\u4ece\u7b2c\u4e00\u4e2a\r\n&nbsp;&nbsp;*&nbsp;@param&nbsp;$count&nbsp;\u4e2a\u6570\uff0c\u533a\u95f4\u4e3a0~20\r\n&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;public&nbsp;function&nbsp;getForeverList($token,$type,$offset,$count){\r\n&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;&nbsp;'type'&nbsp;=&amp;gt;&nbsp;$type,\r\n&nbsp;&nbsp;&nbsp;&nbsp;'offset'&nbsp;=&amp;gt;&nbsp;$offset,\r\n&nbsp;&nbsp;&nbsp;&nbsp;'count'&nbsp;=&amp;gt;&nbsp;$count,\r\n&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$this-&amp;gt;http_post(\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self::API_URL_PREFIX.self::MEDIA_FOREVER_BATCHGET_URL.'access_token='.$token,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self::json_encode($data)\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;&nbsp;error_log('forever&nbsp;list&nbsp;is&nbsp;:'.$result);\r\n&nbsp;&nbsp;&nbsp;if&nbsp;($result)\r\n&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;$json&nbsp;=&nbsp;json_decode($result,true);\r\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isset($json['errcode']))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;errCode&nbsp;=&nbsp;$json['errcode'];\r\n&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;errMsg&nbsp;=&nbsp;$json['errmsg'];\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$json;\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\u540c\u6b65\u6587\u7ae0\u5230\u5fae\u4fe1\u63a5\u53e3<\/strong><\/p>\n<p>action\u65b9\u6cd5<\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u6b64\u63a5\u53e3\u7684\u5165\u53e3\u65b9\u6cd5<\/p>\n<p>\u8c03\u7528\u65b9\u5f0f\uff1ahttp:\/\/${domain}\/weixin\/upload_article\/<\/p>\n<p><\/p>\n<pre>\/**\r\n&nbsp;*&nbsp;\u540c\u6b65\u95ee\u7b54\u7684\u6587\u7ae0\u5230\u8ba2\u9605\u53f7\u4e0a\u63a5\u53e3\r\n&nbsp;*\/\r\npublic&nbsp;function&nbsp;index_action(){\r\n&nbsp;$article_list&nbsp;=&nbsp;$this-&amp;gt;model('article')-&amp;gt;get_articles_list(null,&nbsp;1,&nbsp;18,&nbsp;'add_time&nbsp;DESC');\r\n&nbsp;$access_token&nbsp;=&nbsp;$this-&amp;gt;get_access_token();\r\n&nbsp;$base_url&nbsp;=&nbsp;'http:\/\/wenda.qiezilife.com\/article\/';\r\n&nbsp;foreach&nbsp;($article_list&nbsp;as&nbsp;$key&nbsp;=&amp;gt;&nbsp;$article){\r\n\r\n&nbsp;&nbsp;if($article['has_attach']){\r\n&nbsp;&nbsp;&nbsp;$attaches&nbsp;=&nbsp;$this-&amp;gt;model('publish')-&amp;gt;get_attach('article',&nbsp;$article['id'],&nbsp;'max');\r\n&nbsp;&nbsp;&nbsp;foreach&nbsp;($attaches&nbsp;as&nbsp;$i&nbsp;=&amp;gt;&nbsp;$a){\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u8fc7\u6ee4\u83b7\u53d6\u7b2c\u4e00\u5f20\u56fe\u7247\r\n&nbsp;&nbsp;&nbsp;&nbsp;if($a['is_image']){\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$attache&nbsp;=&nbsp;$a;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;&nbsp;$img&nbsp;=&nbsp;$attache['path'];\r\n&nbsp;&nbsp;&nbsp;$size&nbsp;=&nbsp;filesize($img);\r\n&nbsp;&nbsp;&nbsp;echo&nbsp;$img.',size&nbsp;is&nbsp;:'.$size;\r\n&nbsp;&nbsp;&nbsp;echo&nbsp;'&lt;br&gt;';\r\n&nbsp;&nbsp;&nbsp;$file_info&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;&nbsp;'filename'&nbsp;=&amp;gt;&nbsp;$img,\r\n&nbsp;&nbsp;&nbsp;&nbsp;'content-type'&nbsp;=&amp;gt;&nbsp;'image\/jpg',&nbsp;\/\/\u6587\u4ef6\u7c7b\u578b\r\n&nbsp;&nbsp;&nbsp;&nbsp;'filelength'&nbsp;=&amp;gt;&nbsp;$size\r\n&nbsp;&nbsp;&nbsp;);\r\n&nbsp;&nbsp;&nbsp;$upload_img_result&nbsp;=&nbsp;$this-&amp;gt;upload_meterial($file_info,$access_token);\r\n&nbsp;&nbsp;&nbsp;$media_id&nbsp;=&nbsp;$upload_img_result;\r\n&nbsp;&nbsp;&nbsp;error_log('media_id&nbsp;is&nbsp;===============&amp;gt;'.$media_id);\r\n&nbsp;&nbsp;}else{\r\n&nbsp;&nbsp;&nbsp;$media_id&nbsp;=&nbsp;'1PoTp0SqruwWu_HX0HR_jUp4STX5HSpYkibb1Ca8ZQA';\r\n&nbsp;&nbsp;}\r\n\r\n&nbsp;&nbsp;$articles&nbsp;=array();\r\n&nbsp;&nbsp;\/\/\u4e0a\u4f20\u56fe\u7247\u6210\u529f\u4e86\u5c31\u5f00\u59cb\u4e0a\u4f20\u56fe\u6587\r\n&nbsp;&nbsp;$upload_article_data&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;'title'&nbsp;=&amp;gt;&nbsp;$article['title'],\r\n&nbsp;&nbsp;&nbsp;'thumb_media_id'&nbsp;=&amp;gt;&nbsp;$media_id,\r\n&nbsp;&nbsp;&nbsp;'author'&nbsp;=&amp;gt;&nbsp;'\u8304\u5b50\u8425\u517b\u5e08',\r\n&nbsp;&nbsp;&nbsp;'digest'&nbsp;=&amp;gt;&nbsp;'\u8304\u5b50\u751f\u6d3b\uff0c\u4f60\u7684\u54c1\u8d28\u751f\u6d3b\u6307\u5357',\r\n&nbsp;&nbsp;&nbsp;'show_cover_pic'&nbsp;=&amp;gt;&nbsp;1,\r\n&nbsp;&nbsp;&nbsp;'content'&nbsp;=&amp;gt;&nbsp;$article['message'],\r\n&nbsp;&nbsp;&nbsp;'content_source_url'&nbsp;=&amp;gt;&nbsp;$base_url.$article['id']\r\n&nbsp;&nbsp;);\r\n\r\n&nbsp;&nbsp;$articles[]&nbsp;=&nbsp;$upload_article_data;\r\n\r\n&nbsp;&nbsp;$data&nbsp;=&nbsp;array(\r\n&nbsp;&nbsp;&nbsp;'articles'&nbsp;=&amp;gt;&nbsp;$articles\r\n&nbsp;&nbsp;);\r\n&nbsp;&nbsp;$result=&nbsp;$this-&amp;gt;uploadForeverArticles($access_token,$data);\r\n&nbsp;&nbsp;echo&nbsp;self::json_encode($result);\r\n&nbsp;&nbsp;error_log('upload_article&nbsp;result&nbsp;is&nbsp;:&nbsp;'.json_encode($result));\r\n&nbsp;&nbsp;error_log('============================upload&nbsp;end============================');\r\n\r\n&nbsp;&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>uploadForeverArticles\u65b9\u6cd5<\/strong><\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u8c03\u7528\u5fae\u4fe1\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750\u63a5\u53e3\u65b9\u6cd5<\/p>\n<p><\/p>\n<pre>\/**\r\n&nbsp;*&nbsp;\u4e0a\u4f20\u6c38\u4e45\u56fe\u6587\u7d20\u6750(\u8ba4\u8bc1\u540e\u7684\u8ba2\u9605\u53f7\u53ef\u7528)\r\n&nbsp;*&nbsp;\u65b0\u589e\u7684\u6c38\u4e45\u7d20\u6750\u4e5f\u53ef\u4ee5\u5728\u516c\u4f17\u5e73\u53f0\u5b98\u7f51\u7d20\u6750\u7ba1\u7406\u6a21\u5757\u4e2d\u770b\u5230\r\n&nbsp;*&nbsp;@param&nbsp;array&nbsp;$data&nbsp;\u6d88\u606f\u7ed3\u6784{\"articles\":[{...}]}\r\n&nbsp;*&nbsp;@return&nbsp;boolean|array\r\n&nbsp;*\/\r\npublic&nbsp;function&nbsp;uploadForeverArticles($access_token,$data){\r\n&nbsp;error_log('post&nbsp;data&nbsp;is=======&amp;gt;&nbsp;'.self::json_encode($data));\r\n&nbsp;$url&nbsp;=&nbsp;self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPLOAD_URL.'access_token='.$access_token;\r\n&nbsp;$result&nbsp;=&nbsp;HTTP::request($url,&nbsp;'POST',&nbsp;self::json_encode($data));\r\n&nbsp;error_log('weixin&nbsp;return&nbsp;result&nbsp;is&nbsp;=====&amp;gt;'.$result);\r\n&nbsp;if&nbsp;($result)\r\n&nbsp;{\r\n&nbsp;&nbsp;$json&nbsp;=&nbsp;json_decode($result,true);\r\n&nbsp;&nbsp;if&nbsp;(!$json&nbsp;||&nbsp;!empty($json['errcode']))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;$this-&amp;gt;errCode&nbsp;=&nbsp;$json['errcode'];\r\n&nbsp;&nbsp;&nbsp;$this-&amp;gt;errMsg&nbsp;=&nbsp;$json['errmsg'];\r\n&nbsp;&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;return&nbsp;$json;\r\n&nbsp;}\r\n&nbsp;return&nbsp;false;\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>upload_meterial\u65b9\u6cd5<\/strong><\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u8c03\u7528\u5fae\u4fe1\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750\u63a5\u53e3\u65b9\u6cd5<\/p>\n<p><\/p>\n<pre>&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;*&nbsp;\u8bf7\u6ce8\u610f\u8be5\u65b9\u6cd5\u5fc5\u987b\u4fdd\u8bc1php\u7684\u7248\u672c\u57285.6\u4ee5\u4e0b\uff0c\u5426\u5219\u4f1a\u720640015\u9519\u8bef\r\n&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;function&nbsp;upload_meterial($file_info,$access_token){\r\n&nbsp;&nbsp;&nbsp;$url=\"https:\/\/api.weixin.qq.com\/cgi-bin\/material\/add_material?access_token={$access_token}&amp;amp;type=image\";\r\n&nbsp;&nbsp;&nbsp;$ch1&nbsp;=&nbsp;curl_init&nbsp;();\r\n&nbsp;&nbsp;&nbsp;$timeout&nbsp;=&nbsp;5;\r\n&nbsp;&nbsp;&nbsp;$real_path=\"{$file_info['filename']}\";\r\n&nbsp;&nbsp;&nbsp;\/\/$real_path=str_replace(\"\/\",&nbsp;\"\\\",&nbsp;$real_path);\r\n&nbsp;&nbsp;&nbsp;$data=&nbsp;array(\"media\"=&amp;gt;\"@{$real_path}\",'form-data'=&amp;gt;$file_info);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_URL,&nbsp;$url&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_POST,&nbsp;1&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_CONNECTTIMEOUT,&nbsp;$timeout&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;FALSE&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_SSL_VERIFYHOST,&nbsp;false&nbsp;);\r\n&nbsp;&nbsp;&nbsp;curl_setopt&nbsp;(&nbsp;$ch1,&nbsp;CURLOPT_POSTFIELDS,&nbsp;$data&nbsp;);\r\n&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;curl_exec&nbsp;(&nbsp;$ch1&nbsp;);\r\n&nbsp;&nbsp;&nbsp;echo&nbsp;'&lt;br&gt;';\r\n&nbsp;&nbsp;&nbsp;echo&nbsp;'reulst&nbsp;is&nbsp;==========&amp;gt;'.$result;\r\n&nbsp;&nbsp;&nbsp;curl_close&nbsp;(&nbsp;$ch1&nbsp;);\r\n&nbsp;&nbsp;&nbsp;if(curl_errno()==0){\r\n&nbsp;&nbsp;&nbsp;&nbsp;$result=json_decode($result,true);\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/var_dump($result);\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$result['media_id'];\r\n&nbsp;&nbsp;&nbsp;}else&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>http_post\u65b9\u6cd5<\/strong><\/p>\n<p>\u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u8c03http post\u8bf7\u6c42\u65b9\u6cd5<\/p>\n<p><\/p>\n<pre>\/**\r\n&nbsp;*&nbsp;POST&nbsp;\u8bf7\u6c42\r\n&nbsp;*&nbsp;@param&nbsp;string&nbsp;$url\r\n&nbsp;*&nbsp;@param&nbsp;array&nbsp;$param\r\n&nbsp;*&nbsp;@param&nbsp;boolean&nbsp;$post_file&nbsp;\u662f\u5426\u6587\u4ef6\u4e0a\u4f20\r\n&nbsp;*&nbsp;@return&nbsp;string&nbsp;content\r\n&nbsp;*\/\r\nprivate&nbsp;function&nbsp;http_post($url,$param,$post_file=false){\r\n&nbsp;$oCurl&nbsp;=&nbsp;curl_init();\r\n&nbsp;if(stripos($url,\"https:\/\/\")!==FALSE){\r\n&nbsp;&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;FALSE);\r\n&nbsp;&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_SSL_VERIFYHOST,&nbsp;false);\r\n&nbsp;&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_SSLVERSION,&nbsp;1);&nbsp;\/\/CURL_SSLVERSION_TLSv1\r\n&nbsp;}\r\n&nbsp;if&nbsp;(is_string($param)&nbsp;||&nbsp;$post_file)&nbsp;{\r\n&nbsp;&nbsp;$strPOST&nbsp;=&nbsp;$param;\r\n&nbsp;}&nbsp;else&nbsp;{\r\n&nbsp;&nbsp;$aPOST&nbsp;=&nbsp;array();\r\n&nbsp;&nbsp;foreach($param&nbsp;as&nbsp;$key=&amp;gt;$val){\r\n&nbsp;&nbsp;&nbsp;$aPOST[]&nbsp;=&nbsp;$key.\"=\".urlencode($val);\r\n&nbsp;&nbsp;}\r\n&nbsp;&nbsp;$strPOST&nbsp;=&nbsp;join(\"&amp;amp;\",&nbsp;$aPOST);\r\n&nbsp;}\r\n&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_URL,&nbsp;$url);\r\n&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1&nbsp;);\r\n&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_POST,true);\r\n&nbsp;curl_setopt($oCurl,&nbsp;CURLOPT_POSTFIELDS,$strPOST);\r\n&nbsp;$sContent&nbsp;=&nbsp;curl_exec($oCurl);\r\n&nbsp;$aStatus&nbsp;=&nbsp;curl_getinfo($oCurl);\r\n&nbsp;curl_close($oCurl);\r\n&nbsp;if(intval($aStatus[\"http_code\"])==200){\r\n&nbsp;&nbsp;return&nbsp;$sContent;\r\n&nbsp;}else{\r\n&nbsp;&nbsp;return&nbsp;false;\r\n&nbsp;}\r\n}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p><strong>\u9047\u5230\u7684\u95ee\u9898<\/strong><\/p>\n<p>\u5728\u5f00\u53d1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5728\u8c03\u7528\u5fae\u4fe1\u4e0a\u4f20\u5a92\u4f53\u6587\u4ef6\u65f6\u5019\u59cb\u7ec8\u5f97\u5230\u7684\u8fd4\u56de\u6570\u636e\u4e3a<\/p>\n<p><\/p>\n<pre>{\"errcode\":41005,\"errmsg\":\"media&nbsp;data&nbsp;missing&nbsp;hint:&nbsp;[3fSt_0048e297]\"}<\/pre>\n<p> \u767b\u5f55\u540e\u590d\u5236 <\/p>\n<p>\u539f\u56e0\uff1aphp\u7248\u672c\u7684\u95ee\u9898\uff0c\u6211\u672c\u673a\u7684\u7248\u672c5.6\uff0c\u800c\u5e26\u6709@\u8bc6\u522b\u7684php\u65b9\u6cd5\u5fc5\u987b\u662f5.5\u4ee5\u4e0b\u624d\u80fd\u8bc6\u522b\uff0c5.5\u4ee5\u4e0a\u7684\u7248\u672c\u5c06\u8fd9\u4e2a\u7279\u6027\u53bb\u9664\u4e86\u3002<\/p>\n<p>\u89e3\u51b3\u65b9\u6cd5\uff1a\u66f4\u6362php\u7684\u7248\u672c\u52305.5\u6216\u80055.5\u4ee5\u4e0b\uff0c\u4e0d\u66f4\u6362php\u7684\u7248\u672c\u7684\u65b9\u6cd5\u6682\u65f6\u6ca1\u6709\u627e\u5230<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u672c\u6587\u7684\u5168\u90e8\u5185\u5bb9\uff0c\u5e0c\u671b\u5bf9\u5927\u5bb6\u7684\u5b66\u4e60\u6709\u6240\u5e2e\u52a9\uff0c\u4e5f\u5e0c\u671b\u5927\u5bb6\u591a\u591a\u652f\u6301\u811a\u672c\u4e4b\u5bb6\u3002<\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u8be6\u89e3\u4f7f\u7528php\u8c03\u7528\u63a5\u53e3\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u4e3b\u8981\u4ecb\u7ecd\u4e86\u8be6\u89e3\u4f7f\u7528php\u8c03\u7528\u63a5\u53e3\u4e0a\u4f20\u6c38\u4e45\u7d20\u6750\uff0c \u529f\u80fd\u9700\u6c42 \u516c\u53f8\u65b0\u5f00\u7684\u516c\u4f17\u53f7\u9700\u8981\u5c06\u516c\u53f8\u5e73\u53f0\u73b0\u5728\u7684\u6240\u6709\u7cbe\u54c1\u6587\u7ae0\u90fd\u5bfc\u5165\uff0c\u624b\u52a8\u5bfc\u5165\u4f1a\u6709\u5f88\u591a\u7684\u5de5\u4f5c\u91cf\uff0c\u6240\u4ee5\u91c7\u7528\u81ea\u52a8\u5316\u540c\u6b65\u6587\u7ae0\u7684\u65b9\u5f0f\u6765\u8fbe\u5230\u6548\u679c \u5f00\u53d1\u8bf4\u660e \u5fae\u4fe1open api\u63d0\u4f9b\u4e86\u65b0\u589e\u6c38\u4e45\u7d20\u6750\u7684\u63a5\u53e3\uff0c\u672c\u6b21\u529f\u80fd\u662f\u57fa\u4e8e\u8fd9\u4e2a\u63a5\u53e3\u8fdb\u884c\u6570\u636e\u540c\u6b65\u7684 \u7acb\u5373\u5b66\u4e60\u201c\u201d\uff1b \u4f7f\u7528\u5230\u7684\u63a5\u53e3 \u83b7\u53d6\u6c38\u4e45\u7d20\u6750\u5217\u8868\u63a5\u53e3\uff1amaterial\/batchget_material \u65b0\u589e\u6c38\u4e45\u7d20\u6750\u63a5\u53e3\uff1amaterial\/add_news \u65b0\u589e\u5a92\u4f53\u6587\u4ef6\u63a5\u53e3\uff1amaterial\/add_material \u56fe\u6587\u7c7b\u578b \u5355\u56fe\u6587\uff08\u8981\u6c42\u6709\u9ed8\u8ba4\u7684\u5c01\u9762\uff0c\u9700\u8981\u63d0\u524d\u4e0a\u4f20\u5230\u5fae\u4fe1\u516c\u4f17\u53f7\u540e\u53f0\uff09 \u73af\u5883\u8981\u6c42 php\u7248\u672c\uff1a5.5\u4ee5\u4e0b\uff08\u56e0\u4e3a\u4e0b\u9762\u4ee3\u7801\u4e2d\u7684\u4e0a\u4f20\u5a92\u4f53\u6587\u4ef6\u5fc5\u987b\u8981\u6c42\u5728\u6b64\u73af\u5883\uff0c\u5426\u5219\u4f1a\u8c03\u7528\u5fae\u4fe1\u63a5\u53e3\u5931\u8d25\uff09 \u5f00\u53d1\u6d41\u7a0b 1\u3001\u4ece\u516c\u53f8\u5e73\u53f0\u83b7\u53d6\u6240\u6709\u7684\u6587\u7ae0\u5217\u88682\u3001\u904d\u5386\u6587\u7ae0\u5217\u8868\uff0c\u67e5\u770b\u6587\u7ae0\u662f\u5426\u6709\u56fe\u7247\u9644\u4ef6\uff0c\u82e5\u6709\u8fdb\u884c\u7b2c\u4e09\u6b65\uff0c\u5426\u5219\u8fdb\u884c\u7b2c\u56db\u6b653\u3001\u68c0\u6d4b\u6240\u6709\u7684\u9644\u4ef6\uff0c\u53d6\u51fa\u7b2c\u4e00\u4e2a\u56fe\u7247\u9644\u4ef6\uff0c\u5e76\u8c03\u7528\u65b0\u589e\u5a92\u4f53\u6587\u4ef6\u63a5\u53e3\u4e0a\u4f20\u56fe\u7247\u83b7\u5f97\u8fd4\u56de\u540e\u7684media_id4\u3001\u8c03\u7528\u7d20\u6750\u5217\u8868\u63a5\u53e3\u83b7\u53d6\u9ed8\u8ba4\u7684\u5c01\u9762\u56fe\u7247\uff0c\u5e76\u4ece\u4e2d\u5f97\u5230\u7684\u6570\u636e\u4e2d\u83b7\u53d6media_id5\u3001\u6839\u636e\u8fd4\u56de\u83b7\u53d6\u5230\u7684media_id\u5f00\u59cb\u8c03\u7528\u4e0a\u4f20\u56fe\u6587\u63a5\u53e3\u4e0a\u4f20\u7d20\u67506\u3001\u8bb0\u5f55\u8fd4\u56de\u4fe1\u606f \u63a5\u53e3\u8bbe\u8ba1 \u83b7\u53d6\u5fae\u4fe1\u7d20\u6750\u5217\u8868\u63a5\u53e3 \u6b64\u63a5\u53e3\u662f\u7528\u4e8e\u83b7\u53d6\u9ed8\u8ba4\u7684\u56fe\u7247media_id\u540c\u6b65\u5e73\u53f0\u6570\u636e\u63a5\u53e3 \u6b64\u63a5\u53e3\u662f\u7528\u6237\u540c\u6b65\u6211\u4eec\u81ea\u5df1\u7684\u6587\u7ae0\u6570\u636e\u5230\u5fae\u4fe1\u529f\u80fd\u5b9e\u73b0 \u63a5\u53e3\u5e38\u91cf private&nbsp;$app_id&nbsp;=&nbsp;&#8216;wx189ae9fa8816b131&#8242;; private&nbsp;$app_secret&nbsp;=&nbsp;&#8217;36f5f430c591acbae3505fe877733283&#8217;; const&nbsp;API_URL_PREFIX&nbsp;=&nbsp;&#8216;https:\/\/api.weixin.qq.com\/cgi-bin&#8217;; const&nbsp;MEDIA_FOREVER_UPLOAD_URL&nbsp;=&nbsp;&#8216;\/material\/add_material?&#8217;; const&nbsp;MEDIA_FOREVER_NEWS_UPLOAD_URL&nbsp;=&nbsp;&#8216;\/material\/add_news?&#8217;; const&nbsp;MEDIA_FOREVER_NEWS_UPDATE_URL&nbsp;=&nbsp;&#8216;\/material\/update_news?&#8217;; const&nbsp;MEDIA_FOREVER_GET_URL&nbsp;=&nbsp;&#8216;\/material\/get_material?&#8217;; const&nbsp;MEDIA_FOREVER_DEL_URL&nbsp;=&nbsp;&#8216;\/material\/del_material?&#8217;; const&nbsp;MEDIA_FOREVER_COUNT_URL&nbsp;=&nbsp;&#8216;\/material\/get_materialcount?&#8217;; const&nbsp;MEDIA_FOREVER_BATCHGET_URL&nbsp;=&nbsp;&#8216;\/material\/batchget_material?&#8217;; \u767b\u5f55\u540e\u590d\u5236 \u83b7\u53d6\u5fae\u4fe1\u7d20\u6750\u5217\u8868\u63a5\u53e3 action\u63a5\u53e3\u65b9\u6cd5 \u8bf4\u660e\uff1a\u8be5\u65b9\u6cd5\u4e3a\u6b64\u63a5\u53e3\u7684\u5165\u53e3\u65b9\u6cd5 \u8c03\u7528\u65b9\u5f0f\uff1ahttp:\/\/${domain}\/weixin\/get_articles\/ &nbsp;\/** &nbsp;&nbsp;&nbsp;*&nbsp;\u83b7\u53d6\u56fe\u7247\u7d20\u6750\u63a5\u53e3 &nbsp;&nbsp;&nbsp;*\/ &nbsp;&nbsp;public&nbsp;function&nbsp;get_articles_action(){ &nbsp;&nbsp;&nbsp;$token&nbsp;=&nbsp;$this-&amp;gt;get_access_token(); &nbsp;&nbsp;&nbsp;$list&nbsp;=&nbsp;$this-&amp;gt;getForeverList($token,&#8217;image&#8217;,0,20); &nbsp;&nbsp;&nbsp;echo&nbsp;json_encode($list); &nbsp;&nbsp;} &nbsp;&nbsp;get_access_token\u65b9\u6cd5 &nbsp;&nbsp; &nbsp;&nbsp;private&nbsp;function&nbsp;get_access_token()&nbsp;{ &nbsp;&nbsp;&nbsp;$access_token&nbsp;=&nbsp;AWS_APP::cache()-&amp;gt;get(&#8216;access_token&#8217;); &nbsp;&nbsp;&nbsp;if(!$access_token){ &nbsp;&nbsp;&nbsp;&nbsp;error_log(&#8216;get&nbsp;access_token&nbsp;from&nbsp;weixin&nbsp;&#8216;); &nbsp;&nbsp;&nbsp;&nbsp;$appId&nbsp;=&nbsp;$this-&amp;gt;app_id; &nbsp;&nbsp;&nbsp;&nbsp;$appSecret&nbsp;=&nbsp;$this-&amp;gt;app_secret; &nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;&#8220;https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=$appId&amp;amp;secret=$appSecret&#8221;; &nbsp;&nbsp;&nbsp;&nbsp;$res&nbsp;=&nbsp;json_decode($this&nbsp;-&amp;gt;&nbsp;httpGet($url)); [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-28577","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=28577"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28577\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=28577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=28577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=28577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}