php上傳有多張圖片的圖文訊息給微信公眾平台時內容遺失該如何解決?

WBOY
發布: 2016-08-08 09:06:38
原創
1690 人瀏覽過

1,問題:
將wordpress中的一篇文章作為永久素材上傳到微信:
當文章中只有一張圖片時,可以正常上傳,且在微信公眾平台查看此素材時,文字內容、圖片都可以完整顯示。
在文章中再增加一張圖片(文章圖片大於1張時),在微信後台查看此素材時發現文章不完整:從第一張圖片開始以後的內容全部遺失。
補充說明:
(1)自己寫了個插件,可以將wordpress文章上傳到微信素材庫。
主要流程:curl抓取文章中的圖片並上傳到微信素材庫,取得url然後將wordpress文章中的圖片src做相應替換。
然後建構圖文訊息json字串上傳到微信。
(2)wordpress文章中不添加任何樣式,僅

php上傳有多張圖片的圖文訊息給微信公眾平台時內容遺失該如何解決?標籤
2,代碼:

<code>// 上传图文消息代码
$raw = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token='
    . $token, self::json_article( $post_ids, $token ), false );

/**
 * 将文章内容构造成json字符串
 *
 * @param array $post_ids
 * @param string $token
 * @return string json
 */
private function json_article( $post_ids, $token ) {
    $mp_article = '{"articles":[';
    foreach ( $post_ids as $post_id ) {
        $post = get_post( $post_id );
        $post_urls = self::preg_match_src( $post->post_content );
        if ( $post_urls ) {
            // 如果文章中有图片,将文章中的图片上传至微信素材库
            foreach ( $post_urls as $post_url ) {
                if ( strpos( $post_url, 'qpic.cn' ) === false ) {
                    // 如果图片没有上传到微信服务器
                    $res = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_material?'
                        . 'access_token=' . $token . '&type=image', false, Curl::curl_get_img( $post_url ) );
                    //替换文章内容img中的src地址
                    $post->post_content = str_replace( $post_url, $res['url'], $post->post_content );
                }
                $post->post_content = str_replace( '"', '\"', $post->post_content );
            }
        }

        // 获取缩略图并上传
        // 相应的code省略

        // 构造json
        $mp_article .= '{
            "title": "' . $post->post_title . '",
            "content_source_url": "' . get_permalink( $post_id, false ) . '",
            "thumb_media_id": "' . $thumb_res['media_id'] . '",
            "content": "' . htmlspecialchars_decode( $post->post_content ) . '",
            "show_cover_pic": 0,
        ';
        if ( !empty($post->post_excerpt ) ) {
            $mp_article .= '"digest": "' . $post->post_excerpt . '",';
        }
        $mp_article .= '},';
    }

    return rtrim($mp_article, ',') . ']}';
}</code>
登入後複製
登入後複製

3,報錯訊息:微信未回傳錯誤訊息。
4,截圖:無。
5,其他參考:
在CSDN上看過tilun_099遇到類似的問題:http://bbs.csdn.net/topics/39...。
tilun_099的問題是:「在上傳多圖文素材時如果content的內容是純文字是,可以上傳成功,得到media_id,然後透過群發接口,手機可以正確獲得多圖文資訊。可是如果content裡面的內容含有html的標籤,如

,

,等等時,上傳後雖然也能獲得media_id,群發後,手機得到的是單圖文,而且這個單圖文有圖片,標題,鏈接,就是沒有具體內容。一下轉義。

<code>foreach ($news as &$item){
    foreach ($item as $k=>$v){
        if($k =='content'){
            $item[$k] = urlencode(htmlspecialchars(str_replace("\"","'",$v)));
            }else{
                $item[$k] = urlencode($v);
            }
        }
    }</code>
登入後複製
登入後複製

就是要將html裡面的「」引號先轉成單引號,然後再轉成html實體,這樣在進行urlencode的時候就不會影響到標籤了。
<code>$data=array("articles"=>$news);
    $data=json_encode($data);
    $end_data= urldecode($data);
    $end_data= htmlspecialchars_decode($end_data);</code>
登入後複製
登入後複製

上傳之前再對內容進行urldecode和將html實體轉成html標籤,這樣就OK了。

測試過的! 」


我和他遇到的問題有點相似,但是不完全相同,我是直接構造的json。

回覆內容:

1,問題:

將wordpress中的一篇文章作為永久素材上傳到微信:

當文章中只有一張圖片時,可以正常上傳,且在微信公眾平台查看此素材時,文字內容、圖片都可以完整顯示。
在文章中再增加一張圖片(文章圖片大於1張時),在微信後台查看此素材時發現文章不完整:從第一張圖片開始以後的內容全部遺失。
補充說明:
(1)自己寫了個插件,可以將wordpress文章上傳到微信素材庫。
主要流程:curl抓取文章中的圖片並上傳到微信素材庫,取得url然後將wordpress文章中的圖片src做相應替換。
然後建構圖文訊息json字串上傳到微信。
(2)wordpress文章中不添加任何樣式,僅

php上傳有多張圖片的圖文訊息給微信公眾平台時內容遺失該如何解決?標籤
2,代碼:

<code>// 上传图文消息代码
$raw = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token='
    . $token, self::json_article( $post_ids, $token ), false );

/**
 * 将文章内容构造成json字符串
 *
 * @param array $post_ids
 * @param string $token
 * @return string json
 */
private function json_article( $post_ids, $token ) {
    $mp_article = '{"articles":[';
    foreach ( $post_ids as $post_id ) {
        $post = get_post( $post_id );
        $post_urls = self::preg_match_src( $post->post_content );
        if ( $post_urls ) {
            // 如果文章中有图片,将文章中的图片上传至微信素材库
            foreach ( $post_urls as $post_url ) {
                if ( strpos( $post_url, 'qpic.cn' ) === false ) {
                    // 如果图片没有上传到微信服务器
                    $res = Curl::curl_post_wx( 'https://api.weixin.qq.com/cgi-bin/material/add_material?'
                        . 'access_token=' . $token . '&type=image', false, Curl::curl_get_img( $post_url ) );
                    //替换文章内容img中的src地址
                    $post->post_content = str_replace( $post_url, $res['url'], $post->post_content );
                }
                $post->post_content = str_replace( '"', '\"', $post->post_content );
            }
        }

        // 获取缩略图并上传
        // 相应的code省略

        // 构造json
        $mp_article .= '{
            "title": "' . $post->post_title . '",
            "content_source_url": "' . get_permalink( $post_id, false ) . '",
            "thumb_media_id": "' . $thumb_res['media_id'] . '",
            "content": "' . htmlspecialchars_decode( $post->post_content ) . '",
            "show_cover_pic": 0,
        ';
        if ( !empty($post->post_excerpt ) ) {
            $mp_article .= '"digest": "' . $post->post_excerpt . '",';
        }
        $mp_article .= '},';
    }

    return rtrim($mp_article, ',') . ']}';
}</code>
登入後複製
登入後複製

3,報錯訊息:微信未回傳錯誤訊息。 4,截圖:無。

5,其他參考:
在CSDN上看過tilun_099遇到類似的問題:http://bbs.csdn.net/topics/39...。
tilun_099的問題是:「在上傳多圖文素材時如果content的內容是純文字是,可以上傳成功,得到media_id,然後透過群發接口,手機可以正確獲得多圖文資訊。可是如果content裡面的內容含有html的標籤,如

,

,等等時,上傳後雖然也能獲得media_id,群發後,手機得到的是單圖文,而且這個單圖文有圖片,標題,鏈接,就是沒有具體內容。一下轉義。

<code>foreach ($news as &$item){
    foreach ($item as $k=>$v){
        if($k =='content'){
            $item[$k] = urlencode(htmlspecialchars(str_replace("\"","'",$v)));
            }else{
                $item[$k] = urlencode($v);
            }
        }
    }</code>
登入後複製
登入後複製

就是要將html裡面的「」引號先轉成單引號,然後再轉成html實體,這樣在進行urlencode的時候就不會影響到標籤了。
<code>$data=array("articles"=>$news);
    $data=json_encode($data);
    $end_data= urldecode($data);
    $end_data= htmlspecialchars_decode($end_data);</code>
登入後複製
登入後複製

上傳之前再對內容進行urldecode和將html實體轉成html標籤,這樣就OK了。 測試過的! 」

我和他遇到的問題有點相似,但是不完全相同,我是直接構造的json。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!