微信公眾號開發h5,上傳圖片


1.獲取微信開放功能的基礎參數配置,類似分享功能,定位功能也都需要獲取改參數,

  • 注意:需要配置授權域名鏈接
  • 需要配置ip白名單
    <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
        wx.config({
                debug: false, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
                appId: '{$weixin.appId}', // 必填,公眾號的唯一標識
                timestamp: '{$weixin.timestamp}', // 必填,生成簽名的時間戳
                nonceStr: '{$weixin.nonceStr}', // 必填,生成簽名的隨機串
                signature: '{$weixin.signature}', // 必填,簽名,見附錄1
                jsApiList: [
                    'onMenuShareTimeline',
                    'onMenuShareAppMessage',
                    'onMenuShareQQ',
                    'onMenuShareWeibo',
                    'openLocation',
                    'chooseWXPay',
                    'chooseImage',                  // 這里需有選擇圖片,上傳圖片的功能,
                    'uploadImage'
                ]
            });
            wx.ready(function () {

                // wx.onMenuShareAppMessage({
                //     title: '標題', // 分享標題
                //     desc: `描述`, // 分享描述
                //     link: `http://*******/wx.php`, // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
                //     imgUrl: 'https://cdn.caomall.net/15606006301896208141.jpg', // 分享圖標
                //     success: function () {
                //         // 用戶確認分享后執行的回調函數
                //     },
                //     cancel: function () {
                //         // 用戶取消分享后執行的回調函數
                //     }
                // });
        
                // wx.onMenuShareTimeline({
                //     title: '標題', // 分享標題
                //     desc: `描述`, // 分享描述
                //     link: `http://*******/wx.php`, // 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
                //     imgUrl: 'https://cdn.caomall.net/15606006301896208141.jpg', // 分享圖標
                //     success: function () {
                //         // 用戶確認分享后執行的回調函數
                //     },
                //     cancel: function () {
                //         // 用戶取消分享后執行的回調函數
                //     }
                // });      
                
            });
      </script>  

選擇圖片,上傳圖片

  • 注意:微信開發工具不可真正上傳,但流程都中轉參數都對的,仔細觀察會發現上傳的severId是不變的----這個就是微信的坑了!!!!!
  • 必須用手機上傳,沒張圖片上傳可能需要些時間;
var pics = [];
$('#add_btn_1').on('click',function(){
    let max_count = 3;
    if(pics.length >= max_count){
        return alert('最多3張');
    }

    //alert('sss');
    wx.chooseImage({
        count: max_count - pics.length, // 默認9
        sizeType: ['original', 'compressed'], // 可以指定是原圖還是壓縮圖,默認二者都有
        sourceType: ['album', 'camera'], // 可以指定來源是相冊還是相機,默認二者都有
        success: function (res) {
            console.log(res);
            var localIds = res.localIds; // 返回選定照片的本地ID列表,localId可以作為img標簽的src屬性顯示圖片                
            
            new Promise(function(resolve,reject){
                for(var i = 0;i< localIds.length;i++){
                    wx.uploadImage({
                        localId: localIds[i], // 需要上傳的圖片的本地ID,由chooseImage接口獲得
                        isShowProgressTips: 1, // 默認為1,顯示進度提示
                        complete: function (res) {
                            console.log('-----');
                            console.log(res);
                            var serverId = res.serverId; // 返回圖片的服務器端ID
        
                            $.ajax({
                                type      : 'POST',
                                dataType  : 'json',
                                url       : '/api.php/Upload/uploadServerId',
                                data      : { serverId },
                                success   : function(data){
                                    if(!data.errno){
                                        console.log(data);                           
                                        pics.push(data.data);                       
                                    } else {
                                        return alert(data.errdesc);
                                    }
                                },error   : function(){
                                    alert('網絡錯誤');
                                }
                            });  
        
                        }
                    });
                }

                setTimeout(function(){
                    resolve(pics);
                },1500 * localIds.length);      // 一張上傳時間比較長....2s

            }).then(function(pics){
                console.log('then---執行');
                let ejs_data = [];
                ejs_data.data = pics;
                console.log('ggggggggggggggggggggg');
                console.log(ejs_data);
                var ec_canvs = new EJS({ element: "ejs_pics_id"}).render(ejs_data);         // 這里用ejs,實現上傳多圖樣式拼接;
                $("#imageWrap").html(ec_canvs);                
            })
        }
    });   
      
});

上傳media_id,生成圖片,上傳到我們自己服務器功能

    /**
     * 微信公眾號 上傳圖片
     */
    public function uploadServerId() {
        if (!$serverId = $_POST['serverId']) {
            $this->json->E('缺少serverId',10001);
        }



        $url = C('PROXY_HOST') . 'Media/getMediaImg';
        $params = [
            'media_id' => $serverId
        ];

        $cdn_result = Http::newDoPost($url,$params);
        $cdn_result = json_decode($cdn_result, true);
        setlog($cdn_result,[],'','up.log');

        if ((int)$cdn_result['code'] === 1) {
            $this->json->S($cdn_result['data']);
        } else {
            $this->json->E('服務器繁忙');
        }
    }


<?php
namespace Proxy\Action;

use Vendor\Func\Func;
use Vendor\Func\Http;
use Vendor\Qiniu\Qiniu;

class MediaAction extends CommonAction
{
    // 獲取媒體數據
    //http://file.api.weixin.qq.com/cgi-bin/media/upload
    const API_MEDIA_GET = 'http://file.api.weixin.qq.com/cgi-bin/media/get';

    public function getMediaImg() {
        $access_token = $this->_get_access_token();
        // 獲取參數
        $media_id = $_POST['media_id'];
        $params = [
            'access_token'  => $access_token,
            'media_id'      => $media_id,
            'type'          => 'thumb'                  // 這里用image,可能太大會上傳不了;
        ];
        $result = Http::newDoGet(self::API_MEDIA_GET, $params);
        $decode_res = json_decode($result,true);
        if($decode_res['errcode'] != 0){
            $this->ajaxReturn($this->jsonError(10021, $decode_res['errmsg']));
        }

        // 存入cdn
        $cdn_result = $this->uploadCdn($result);            // 上傳cdn, 具體功能函數省略...
        //setlog($cdn_result,[$result],'media_result','proxy_error_2.log');
        setlog($cdn_result,[],'media_result','proxy_error_222.log');

        if ((int)$cdn_result['errno'] === 0) {
            $this->ajaxReturn($this->jsonSuccess(1, '成功', $cdn_result['save_name']));
        } else {
            $this->ajaxReturn($this->jsonError(10001, '服務器繁忙'));
        }
    }

}
?>

  • 參考博客
https://www.jb51.net/article/161349.htm
https://www.cnblogs.com/fanshuyao/p/6227130.html
https://blog.csdn.net/zzwwjjdj1/article/details/52354763
https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/Get_temporary_materials.html
  • 參考微信開放手冊
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#19
https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%8E%A5%E5%8F%A3%20/media/upload


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM