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

ホームページ WeChat アプレット WeChatの開発 PHP を使用して WeChat インターフェイスを呼び出し、永続的なマテリアルをアップロードする方法の詳細な説明

PHP を使用して WeChat インターフェイスを呼び出し、永続的なマテリアルをアップロードする方法の詳細な説明

Apr 12, 2017 pm 03:23 PM
php アップロード 微信 インターフェース 移行

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

功能需求

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

開發(fā)說明

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

使用到的接口

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

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

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

  4. 圖文類型

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

環(huán)境要求

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

開發(fā)流程

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

接口設(shè)計

獲取微信素材列表接口

此接口是用于獲取默認的圖片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)用微信上傳永久素材接口方法


/**
 * 上傳永久圖文素材(認證后的訂閱號可用)
 * 新增的永久素材也可以在公眾平臺官網(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版本的問題,我本機的版本5.6,而帶有@識別的php方法必須是5.5以下才能識別,5.5以上的版本將這個特性去除了。

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

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

以上がPHP を使用して WeChat インターフェイスを呼び出し、永続的なマテリアルをアップロードする方法の詳細な説明の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ランプスタックを超えて:現(xiàn)代のエンタープライズアーキテクチャにおけるPHPの役割 ランプスタックを超えて:現(xiàn)代のエンタープライズアーキテクチャにおけるPHPの役割 Jul 27, 2025 am 04:31 AM

phpisStillRelevantinModernenterpriseenvironments.1.modernphp(7.xand8.x)は、パフォーマンスゲイン、stricttyping、jit compilation、andmodernsyntaxを提供し、scaleApplications.2.phpintegrateSeffeCtiveTiveliveTiveliveTiveliveTiveTiveTiveliveTiveStures、

PHPとrabbitmqを使用した回復(fù)力のあるマイクロサービスを構(gòu)築します PHPとrabbitmqを使用した回復(fù)力のあるマイクロサービスを構(gòu)築します Jul 27, 2025 am 04:32 AM

柔軟なPHPマイクロサービスを構(gòu)築するには、RabbitMQを使用して非同期通信を?qū)g現(xiàn)する必要があります。 2。信頼性を確保するために、永続的なキュー、永続的なメッセージ、リリース確認、手動ACKを構(gòu)成します。 3.指數(shù)バックオフ再試行、TTL、およびデッドレターキューセキュリティ処理の障害を使用します。 4.監(jiān)督などのツールを使用して、消費者プロセスを保護し、ハートビートメカニズムを有効にしてサービスの健康を確保します。そして最終的に、システムが障害で継続的に動作する能力を?qū)g現(xiàn)します。

PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング Jul 29, 2025 am 05:00 AM

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの數(shù)を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結(jié)果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

Python Run Shellコマンドの例 Python Run Shellコマンドの例 Jul 26, 2025 am 07:50 AM

subprocess.run()を使用して、シェルコマンドを安全に実行し、出力をキャプチャします。注入リスクを避けるために、リストのパラメーターを渡すことをお勧めします。 2。シェル特性が必要な場合は、シェル= trueを設(shè)定できますが、コマンドインジェクションに注意してください。 3. subprocess.popenを使用して、リアルタイム出力処理を?qū)g現(xiàn)します。 4。Check = COMMATが失敗したときに例外をスローするためにtrueを設(shè)定します。 5.単純なシナリオで直接チェーンを呼び出して出力を取得できます。 os.system()または非推奨モジュールの使用を避けるために、日常生活の中でsubprocess.run()を優(yōu)先する必要があります。上記の方法は、Pythonでシェルコマンドを?qū)g行するコアの使用を上書きします。

PHP用の生産対応Docker環(huán)境の作成 PHP用の生産対応Docker環(huán)境の作成 Jul 27, 2025 am 04:32 AM

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環(huán)境を構(gòu)成することが、生産を?qū)g現(xiàn)するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本畫像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強化します。 3. NGINXを逆プロキシとして使用して、機密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化畫像を使用して開発依存関係を削除し、非ルートユーザーを設(shè)定してコンテナを?qū)g行します。 5. CRONなどの複數(shù)のプロセスを管理するためのオプションの監(jiān)督。 6.展開前に機密情報漏れがないことを確認します

vscode settings.jsonの場所 vscode settings.jsonの場所 Aug 01, 2025 am 06:12 AM

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設(shè)定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設(shè)定

PHPの內(nèi)部ガベージコレクションメカニズムに深く潛ります PHPの內(nèi)部ガベージコレクションメカニズムに深く潛ります Jul 28, 2025 am 04:44 AM

PHPのゴミ収集メカニズムは參照カウントに基づいていますが、周期的な円形のゴミコレクターによって円形の參照を処理する必要があります。 1。変數(shù)への參照がない場合、參照カウントはすぐにメモリを解放します。 2.參照參照により、メモリを自動的にリリースできなくなり、GCを検出およびクリーニングすることがGCに依存します。 3。GCは、「可能なルート」ZVALがしきい値に到達するか、GC_COLLECT_CYCLES()を手動で呼び出すとトリガーされます。 4.長期実行PHPアプリケーションは、メモリの漏れを避けるために、gc_status()を監(jiān)視し、gc_collect_cycles()を呼び出す必要があります。 5.ベストプラクティスには、gc_disable()を使用してパフォーマンスキー領(lǐng)域を最適化し、ormのclear()メソッドを介して繰り返しのオブジェクトを最適化する回路參照の回避が含まれます。

サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します Jul 28, 2025 am 04:39 AM

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費用対効果の高いアプリケーションを構(gòu)築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統(tǒng)合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関數(shù)とイベントを定義するためにserverless.ymlの構(gòu)成。 3. serverlessdeployコマンドを?qū)g行して、展開を完了し、Apigatewayを自動的に構(gòu)成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

See all articles