国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 微信開發(fā) 詳解使用php呼叫微信介面上傳永久素材

詳解使用php呼叫微信介面上傳永久素材

Apr 12, 2017 pm 03:23 PM
php 上傳 微信 介面 呼叫

這篇文章主要介紹了詳解使用php調(diào)用微信接口上傳永久素材,

功能需求

公司新開的公眾號需要將公司平臺現(xiàn)在的所有精品文章都導(dǎo)入,手動導(dǎo)入會有很多的工作量,所以采用自動化同步文章的方式來達(dá)到效果

開發(fā)說明

微信open api提供了新增永久素材的接口,本次功能是基于這個接口進(jìn)行數(shù)據(jù)同步的

使用到的接口

  1. 獲取永久素材列表接口:material/batchget_material

  2. 新增永久素材接口:material/add_news

  3. 新增媒體文件接口:material/add_material

  4. 圖文類型

  5. 單圖文(要求有默認(rèn)的封面,需要提前上傳到微信公眾號后臺)

環(huán)境要求

php版本:5.5以下(因為下面代碼中的上傳媒體文件必須要求在此環(huán)境,否則會調(diào)用微信接口失敗)

開發(fā)流程

1、從公司平臺獲取所有的文章列表
2、遍歷文章列表,查看文章是否有圖片附件,若有進(jìn)行第三步,否則進(jìn)行第四步
3、檢測所有的附件,取出第一個圖片附件,并調(diào)用新增媒體文件接口上傳圖片獲得返回后的media_id
4、調(diào)用素材列表接口獲取默認(rèn)的封面圖片,并從中得到的數(shù)據(jù)中獲取media_id
5、根據(jù)返回獲取到的media_id開始調(diào)用上傳圖文接口上傳素材
6、記錄返回信息

接口設(shè)計

獲取微信素材列表接口

此接口是用于獲取默認(rèn)的圖片media_id同步平臺數(shù)據(jù)接口

此接口是用戶同步我們自己的文章數(shù)據(jù)到微信功能實現(xiàn)

接口常量


private $app_id = 'wx189ae9fa8816b131';
private $app_secret = '36f5f430c591acbae3505fe877733283';
const API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin';
const MEDIA_FOREVER_UPLOAD_URL = '/material/add_material?';
const MEDIA_FOREVER_NEWS_UPLOAD_URL = '/material/add_news?';
const MEDIA_FOREVER_NEWS_UPDATE_URL = '/material/update_news?';
const MEDIA_FOREVER_GET_URL = '/material/get_material?';
const MEDIA_FOREVER_DEL_URL = '/material/del_material?';
const MEDIA_FOREVER_COUNT_URL = '/material/get_materialcount?';
const MEDIA_FOREVER_BATCHGET_URL = '/material/batchget_material?';

獲取微信素材列表接口

action接口方法

說明:該方法為此接口的入口方法

調(diào)用方式:http://${domain}/weixin/get_articles/


 /**
   * 獲取圖片素材接口
   */
  public function get_articles_action(){
   $token = $this->get_access_token();
   $list = $this->getForeverList($token,'image',0,20);
   echo json_encode($list);
  }
  get_access_token方法
  
  private function get_access_token() {
   $access_token = AWS_APP::cache()->get('access_token');
   if(!$access_token){
    error_log('get access_token from weixin ');
    $appId = $this->app_id;
    $appSecret = $this->app_secret;
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
    $res = json_decode($this -> httpGet($url));
    $access_token = $res -> access_token;
    AWS_APP::cache()->set('access_token',$access_token,time()+3600);
   }else{
    error_log('get access_token from cache ');
   }
   error_log('access_token is :'.$access_token);
   return $access_token;
  }

調(diào)用微信素材接口方法

說明:該方法為調(diào)用微信獲取永久素材列表接口方法


 /**
  * 獲取永久素材列表
  * @param $token
  * @param $type 類型有image,vedio和audio
  * @param $offset 起始位置,0表示從第一個
  * @param $count 個數(shù),區(qū)間為0~20
  */
  public function getForeverList($token,$type,$offset,$count){
   $data = array(
    'type' => $type,
    'offset' => $offset,
    'count' => $count,
   );
   $result = $this->http_post(
         self::API_URL_PREFIX.self::MEDIA_FOREVER_BATCHGET_URL.'access_token='.$token,
         self::json_encode($data)
         );
   error_log('forever list is :'.$result);
   if ($result)
   {
    $json = json_decode($result,true);
    if (isset($json['errcode'])) {
    $this->errCode = $json['errcode'];
    $this->errMsg = $json['errmsg'];
    return false;
    }
    return $json;
   }
   return false;
  }

同步文章到微信接口

action方法

說明:該方法為此接口的入口方法

調(diào)用方式:http://${domain}/weixin/upload_article/


/**
 * 同步問答的文章到訂閱號上接口
 */
public function index_action(){
 $article_list = $this->model('article')->get_articles_list(null, 1, 18, 'add_time DESC');
 $access_token = $this->get_access_token();
 $base_url = 'http://wenda.qiezilife.com/article/';
 foreach ($article_list as $key => $article){

  if($article['has_attach']){
   $attaches = $this->model('publish')->get_attach('article', $article['id'], 'max');
   foreach ($attaches as $i => $a){
    //過濾獲取第一張圖片
    if($a['is_image']){
     $attache = $a;
     break;
    }
   }

   $img = $attache['path'];
   $size = filesize($img);
   echo $img.',size is :'.$size;
   echo &#39;<br/>&#39;;
   $file_info = array(
    &#39;filename&#39; => $img,
    &#39;content-type&#39; => &#39;image/jpg&#39;, //文件類型
    &#39;filelength&#39; => $size
   );
   $upload_img_result = $this->upload_meterial($file_info,$access_token);
   $media_id = $upload_img_result;
   error_log(&#39;media_id is ===============>&#39;.$media_id);
  }else{
   $media_id = &#39;1PoTp0SqruwWu_HX0HR_jUp4STX5HSpYkibb1Ca8ZQA&#39;;
  }

  $articles =array();
  //上傳圖片成功了就開始上傳圖文
  $upload_article_data = array(
   &#39;title&#39; => $article[&#39;title&#39;],
   &#39;thumb_media_id&#39; => $media_id,
   &#39;author&#39; => &#39;茄子營養(yǎng)師&#39;,
   &#39;digest&#39; => &#39;茄子生活,你的品質(zhì)生活指南&#39;,
   &#39;show_cover_pic&#39; => 1,
   &#39;content&#39; => $article[&#39;message&#39;],
   &#39;content_source_url&#39; => $base_url.$article[&#39;id&#39;]
  );

  $articles[] = $upload_article_data;

  $data = array(
   &#39;articles&#39; => $articles
  );
  $result= $this->uploadForeverArticles($access_token,$data);
  echo self::json_encode($result);
  error_log(&#39;upload_article result is : &#39;.json_encode($result));
  error_log(&#39;============================upload end============================&#39;);

  }
}

uploadForeverArticles方法

說明:該方法為調(diào)用微信上傳永久素材接口方法


/**
 * 上傳永久圖文素材(認(rèn)證后的訂閱號可用)
 * 新增的永久素材也可以在公眾平臺官網(wǎng)素材管理模塊中看到
 * @param array $data 消息結(jié)構(gòu){"articles":[{...}]}
 * @return boolean|array
 */
public function uploadForeverArticles($access_token,$data){
 error_log(&#39;post data is=======> &#39;.self::json_encode($data));
 $url = self::API_URL_PREFIX.self::MEDIA_FOREVER_NEWS_UPLOAD_URL.&#39;access_token=&#39;.$access_token;
 $result = HTTP::request($url, &#39;POST&#39;, self::json_encode($data));
 error_log(&#39;weixin return result is =====>&#39;.$result);
 if ($result)
 {
  $json = json_decode($result,true);
  if (!$json || !empty($json[&#39;errcode&#39;])) {
   $this->errCode = $json[&#39;errcode&#39;];
   $this->errMsg = $json[&#39;errmsg&#39;];
   return false;
  }
  return $json;
 }
 return false;
}

upload_meterial方法

說明:該方法為調(diào)用微信上傳永久素材接口方法


  /**
   * 請注意該方法必須保證php的版本在5.6以下,否則會爆40015錯誤
   */
  function upload_meterial($file_info,$access_token){
   $url="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$access_token}&type=image";
   $ch1 = curl_init ();
   $timeout = 5;
   $real_path="{$file_info[&#39;filename&#39;]}";
   //$real_path=str_replace("/", "\\", $real_path);
   $data= array("media"=>"@{$real_path}",&#39;form-data&#39;=>$file_info);
   curl_setopt ( $ch1, CURLOPT_URL, $url );
   curl_setopt ( $ch1, CURLOPT_POST, 1 );
   curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
   curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
   curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
   curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
   curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );
   $result = curl_exec ( $ch1 );
   echo &#39;<br/>&#39;;
   echo &#39;reulst is ==========>&#39;.$result;
   curl_close ( $ch1 );
   if(curl_errno()==0){
    $result=json_decode($result,true);
    //var_dump($result);
    return $result[&#39;media_id&#39;];
   }else {
    return false;
   }
  }

http_post方法

說明:該方法為調(diào)http post請求方法


/**
 * POST 請求
 * @param string $url
 * @param array $param
 * @param boolean $post_file 是否文件上傳
 * @return string content
 */
private function http_post($url,$param,$post_file=false){
 $oCurl = curl_init();
 if(stripos($url,"https://")!==FALSE){
  curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
 }
 if (is_string($param) || $post_file) {
  $strPOST = $param;
 } else {
  $aPOST = array();
  foreach($param as $key=>$val){
   $aPOST[] = $key."=".urlencode($val);
  }
  $strPOST = join("&", $aPOST);
 }
 curl_setopt($oCurl, CURLOPT_URL, $url);
 curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
 curl_setopt($oCurl, CURLOPT_POST,true);
 curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST);
 $sContent = curl_exec($oCurl);
 $aStatus = curl_getinfo($oCurl);
 curl_close($oCurl);
 if(intval($aStatus["http_code"])==200){
  return $sContent;
 }else{
  return false;
 }
}

遇到的問題

在開發(fā)的過程中,在調(diào)用微信上傳媒體文件時候始終得到的返回數(shù)據(jù)為


{"errcode":41005,"errmsg":"media data missing hint: [3fSt_0048e297]"}

原因:php版本的問題,我本機(jī)的版本5.6,而帶有@識別的php方法必須是5.5以下才能識別,5.5以上的版本將這個特性去除了。

解決方法:更換php的版本到5.5或者5.5以下,不更換php的版本的方法暫時沒有找到

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

以上是詳解使用php呼叫微信介面上傳永久素材的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
超越燈堆:PHP在現(xiàn)代企業(yè)體系結(jié)構(gòu)中的作用 超越燈堆:PHP在現(xiàn)代企業(yè)體系結(jié)構(gòu)中的作用 Jul 27, 2025 am 04:31 AM

PHPisstillrelevantinmodernenterpriseenvironments.1.ModernPHP(7.xand8.x)offersperformancegains,stricttyping,JITcompilation,andmodernsyntax,makingitsuitableforlarge-scaleapplications.2.PHPintegrateseffectivelyinhybridarchitectures,servingasanAPIgateway

PHP中的對象關(guān)聯(lián)映射(ORM)性能調(diào)整 PHP中的對象關(guān)聯(lián)映射(ORM)性能調(diào)整 Jul 29, 2025 am 05:00 AM

避免N 1查詢問題,通過提前加載關(guān)聯(lián)數(shù)據(jù)來減少數(shù)據(jù)庫查詢次數(shù);2.僅選擇所需字段,避免加載完整實體以節(jié)省內(nèi)存和帶寬;3.合理使用緩存策略,如Doctrine的二級緩存或Redis緩存高頻查詢結(jié)果;4.優(yōu)化實體生命週期,定期調(diào)用clear()釋放內(nèi)存以防止內(nèi)存溢出;5.確保數(shù)據(jù)庫索引存在並分析生成的SQL語句以避免低效查詢;6.在無需跟蹤變更的場景下禁用自動變更跟蹤,改用數(shù)組或輕量模式提升性能。正確使用ORM需結(jié)合SQL監(jiān)控、緩存、批量處理和適當(dāng)優(yōu)化,在保持開發(fā)效率的同時確保應(yīng)用性能。

用PHP和RabbitMQ建造彈性微服務(wù) 用PHP和RabbitMQ建造彈性微服務(wù) Jul 27, 2025 am 04:32 AM

要構(gòu)建彈性的PHP微服務(wù),需使用RabbitMQ實現(xiàn)異步通信,1.通過消息隊列解耦服務(wù),避免級聯(lián)故障;2.配置持久化隊列、持久化消息、發(fā)布確認(rèn)和手動ACK以確??煽啃裕?.使用指數(shù)退避重試、TTL和死信隊列安全處理失??;4.通過supervisord等工具守護(hù)消費者進(jìn)程並啟用心跳機(jī)制保障服務(wù)健康;最終實現(xiàn)系統(tǒng)在故障中持續(xù)運作的能力。

python run shell命令示例 python run shell命令示例 Jul 26, 2025 am 07:50 AM

使用subprocess.run()可安全執(zhí)行shell命令並捕獲輸出,推薦以列表傳參避免注入風(fēng)險;2.需要shell特性時可設(shè)shell=True,但需警惕命令注入;3.使用subprocess.Popen可實現(xiàn)實時輸出處理;4.設(shè)置check=True可在命令失敗時拋出異常;5.簡單場景可直接鍊式調(diào)用獲取輸出;日常應(yīng)優(yōu)先使用subprocess.run(),避免使用os.system()或已棄用模塊,以上方法覆蓋了Python中執(zhí)行shell命令的核心用法。

為PHP創(chuàng)建準(zhǔn)備生產(chǎn)的Docker環(huán)境 為PHP創(chuàng)建準(zhǔn)備生產(chǎn)的Docker環(huán)境 Jul 27, 2025 am 04:32 AM

使用正確的PHP基礎(chǔ)鏡像並配置安全、性能優(yōu)化的Docker環(huán)境是實現(xiàn)生產(chǎn)就緒的關(guān)鍵。 1.選用php:8.3-fpm-alpine作為基礎(chǔ)鏡像以減少攻擊面並提升性能;2.通過自定義php.ini禁用危險函數(shù)、關(guān)閉錯誤顯示並啟用Opcache及JIT以增強(qiáng)安全與性能;3.使用Nginx作為反向代理,限制訪問敏感文件並正確轉(zhuǎn)發(fā)PHP請求至PHP-FPM;4.採用多階段構(gòu)建優(yōu)化鏡像,移除開發(fā)依賴,設(shè)置非root用戶運行容器;5.可選Supervisord管理多個進(jìn)程如cron;6.部署前驗證無敏感信息洩

VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級或工作區(qū)級路徑,用於自定義VSCode設(shè)置。 1.用戶級路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級路徑:項目根目錄下的.vscode/settings

深入了解PHP的內(nèi)部垃圾收集機(jī)制 深入了解PHP的內(nèi)部垃圾收集機(jī)制 Jul 28, 2025 am 04:44 AM

PHP的垃圾回收機(jī)制基於引用計數(shù),但循環(huán)引用需靠週期性運行的循環(huán)垃圾回收器處理;1.引用計數(shù)在變量無引用時立即釋放內(nèi)存;2.循環(huán)引用導(dǎo)致內(nèi)存無法自動釋放,需依賴GC檢測並清理;3.GC在“可能根”zval達(dá)閾值或手動調(diào)用gc_collect_cycles()時觸發(fā);4.長期運行的PHP應(yīng)用應(yīng)監(jiān)控gc_status()、適時調(diào)用gc_collect_cycles()以避免內(nèi)存洩漏;5.最佳實踐包括避免循環(huán)引用、使用gc_disable()優(yōu)化性能關(guān)鍵區(qū)及通過ORM的clear()方法解引用對象,最

無服務(wù)器革命:使用BREF部署可擴(kuò)展的PHP應(yīng)用程序 無服務(wù)器革命:使用BREF部署可擴(kuò)展的PHP應(yīng)用程序 Jul 28, 2025 am 04:39 AM

Bref使PHP開發(fā)者能無需管理服務(wù)器即可構(gòu)建可擴(kuò)展、成本高效的應(yīng)用。 1.Bref通過提供優(yōu)化的PHP運行時層,將PHP帶入AWSLambda,支持PHP8.3等版本,並與Laravel、Symfony等框架無縫集成;2.部署步驟包括:使用Composer安裝Bref,配置serverless.yml定義函數(shù)和事件,如HTTP端點和Artisan命令;3.執(zhí)行serverlessdeploy命令即可完成部署,自動配置APIGateway並生成訪問URL;4.針對Lambda限制,Bref提供解決

See all articles