2015-08-31 16:00:29 u010773333 阅读数 7876
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14295 人正在学习 去看看 秦子恒

最近产品经理要做每天推送图文信息的功能,哎,还要超链接传递不同的参数,苦逼呀。。网上查了一些资料,下面讲解一下群发素材

要群发素材,首先要先获得素材,素材都是以图片和文字的形式推送给用户的,所以要首先获得图片和文字

微信的上传媒体接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

可以用来上传图片,上传成功返回:{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789},其中media_id就是图片在微信服务器的标识。

上传方法:

       /// <summary>
        /// 上传媒体返回媒体ID
        /// </summary>
        public static string UploadMedia(string access_token, string type, string path)
        {
            // 设置参数
            string url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", access_token, type);
            return HttpRequestUtil.HttpUploadFile(url, path);
        }

第二步:拼接图文消息素材Json字符串,其中msg就是上述的微信服务器传回来的媒体ID

       /// <summary>
        /// 拼接图文消息素材Json字符串
        /// </summary>
        public static string GetArticlesJsonStr(string access_token,string msg)
        {
            StringBuilder sbArticlesJson = new StringBuilder();

             sbArticlesJson.Append("{\"articles\":[");
                //string media_id = Tools.GetJsonValue(msg, "media_id");
               // string media_id = (msg,"media_id");
                sbArticlesJson.Append("{");
                // sbArticlesJson.Append();
                sbArticlesJson.Append("\"thumb_media_id\":\"" + msg + "\",");
                sbArticlesJson.Append("\"author\":\"" + "王华涛" + "\",");
                sbArticlesJson.Append("\"title\":\"" + "作业已经完成" + "\",");
                sbArticlesJson.Append("\"content_source_url\":\"" + "http://。。。。" + "\",");
                sbArticlesJson.Append("\"content\":\"" + "作业信息" + "\",");
                sbArticlesJson.Append("\"digest\":\"" +"您孩子的作业已经完成" + "\",");
                sbArticlesJson.Append("\"show_cover_pic\":\"1\"}");
                sbArticlesJson.Append("]}");

            return sbArticlesJson.ToString();
        } 

第三步:上传图文消息素材,其中postData就是拼接图文消息素材Json字符串,调用微信接口上传之后获得media_id

        /// <summary>
        /// 上传图文消息素材返回media_id
        /// </summary>
        public static string UploadNews(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}", access_token), postData);
        }

第四步:图文消息json,添加发送用户openid

      /// <summary>
        /// 图文消息json
        /// </summary>
        public static string CreateNewsJson(string media_id, List<string> openids)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("{\"touser\":[\"");

            foreach(string  openid in openids)    

            {

                 sb.Append(openid);
                sb.Append("\",\"");

            }
            sb.Append("\"],");
            sb.Append("\"msgtype\":\"mpnews\",");
            sb.Append("\"mpnews\":{\"media_id\":\"" + media_id + "\"}");
            sb.Append("}");
            return sb.ToString();
        }
第五步:调用微信发送素材接口,根据OpenID列表群发素材信息

        /// <summary>
        /// 根据OpenID列表群发
        /// </summary>
        public static string Send(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token={0}", access_token), postData);
        }



2017-12-07 11:07:43 qq_29062579 阅读数 3310
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14295 人正在学习 去看看 秦子恒

开发微信公众号的时候遇到了很多细节的问题,不多测试只看文档真的没办法发现,这个就是我发现的问题,为何我调用微信端的图文消息上传api老是提示 40007错误,也就是无效的media_id,这里有两个细节。1是这里写图片描述
上面的图片是调用的是微信接收消息群发接口的一个上传图文消息素材的api,这里必须使用的thumb_id是临时素材的media_id,如果你使用的是永久素材的media_id就会报错。而这个素材上传成功后是成为临时素材 ,因为可以查看素材库,上传成功后是找不到这个图文素材的。(强调:所以这里的thumb_id使用的必须是临时素材的media_id)。
那么永久素材的media_id是用在哪里呢?自然是有提供一个永久的图文消息素材的api,这个是在素材接口里面的。下图可查找这里写图片描述
细节2:这个thumb_id 需要的media_id的类型必须是thumb的,type有分为好几种这里写图片描述
所以这个缩略图的图片素材的类型必选使用thumb,这点也要注意。
这个问题网上找了好几个博客,结果都是一样的答案,所以提供一下我的理解。希望可以帮到大家。有问题可以互相讨论。

2015-08-05 09:41:07 ljj9oo9 阅读数 2091
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14295 人正在学习 去看看 秦子恒

   最新在做微信的多图文管理,自己写了一个模仿微信的多图文的界面,有需要的可以参取参考参考,改改就能用哈! 里面我以及集成了ajax 上传文件的插件了,不想要的可以自己换,截图如下:

代码地址

2019-08-21 18:17:40 weixin_44571975 阅读数 92
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14295 人正在学习 去看看 秦子恒

背景

最近业务需要,公司把微信开发模式改为开发模式,因此原来的默认的素材模式就不能用了,因此要独立开发一个管理网站,一套对应微信服务器的接口.

其原理是

Created with Raphaël 2.2.0微信服务器发起请求接收消息到我们的服务器,判断是什么要求发送符合格式要求的参数(消息)给微信服务器

反过来我们主动向微信发消息,比如修改公众号的文章,过程就相反

图文素材上传

一般来说都会用富文本编辑器来编辑网页文章,这里我使用的是百度编辑器,百度编辑器的图片会在上传后,
生成img标签插入在文本,也就是常见的html混编,一个参数是图片的地址这个和服务器网站有关,一个是alt默认是用上传图片的名字.

<img src="我是地址" alt="文件名">

微信的图文素材要求图片必须是来自微信服务器,如果是外部链接图片,必须要经过微信的’转码’(也就是换地址)
如果一个文章或者素材里面有很多图片,总不能一个一个手动操作,所以这里我假设,前端只穿了一堆h5代码,我们要用正则表达式取出所有的img标签,替换src,再顺序放回. 代码如下

$content1='wqdqwdsmoij ia45614561 
    <img src="www.163.com" alt="1.jpg" /> 
    <img src="www.164.com" alt="2.jpg" />
    <img src="www.165.com" alt="3.jpg" />
    <img src="www.166.com" alt="4.jpg" />
    <img src="www.167.com" alt="5.jpg" />
    <img src="www.168.com" alt="6.jpg" />
    <img src="www.169.com" alt="7.jpg" />';
echo "替换前";    
var_dump($content1);
echo '<br>'."替换后";
$tt = smg($content1);
var_dump($tt);
function smg($content1){

    //1.取出所有的<img>,用alt=>src,组成数组
    $pattern='/<img((?!src).)*src[\s]*=[\s]*[\'"](?<src>[^\'"]*)[\'"]/i';
    preg_match_all($pattern,$content1,$match);

    preg_match_all("/<img.*?alt=[\"|\'](.*?)[\"|\'].*?>/",$content1,$m);

    $aa = array_combine($m[1],$match[2]);
	
    // 2.foreach数组,调用微信接口upImgUrl(),这个函数需要自己写,这里只是举例
        function ousideImg($data){    
            return '"'.'www.'.$data.'.com'.'"';
        }
        foreach ($aa as $key => $val) {
            $aa[$key] = ousideImg($key);
        }
    //3.重新放回文章中,foreach逐条放回
    $text     = $content1;
    foreach ($aa as $key => $val) {
        $alt = $key;
        $src = $val;
        // echo $src;
        $regImg = '/<img.*?alt=[\"|\']'."$alt".'[\"|\'].*?>/';
        preg_match($regImg,$text,$matchAll);
        $a = preg_replace('/src=".*?"/',"src=$src",$matchAll[0]);
        $b = preg_replace($regImg,$a,$text);
        $text=&$b;
    }
    return $text;    
}
2017-05-03 16:59:02 Luze_1226 阅读数 2552
  • 微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台中的素材管理开发。内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    14295 人正在学习 去看看 秦子恒

微信公众后台开发之素材管理

        最近应公司要求,对公司的微信公众号后台走升级,添加部分功能,其中就是需要在后台上传图片,而公众号回根据用户的按钮点击事件返回后台上传的图片。看着就是简单的需求,但是还是要先了解下微信开发文档,在来做开发微信开发文档
       看过文档后发现不是想象中的那么简单,这里涉及到三个系统的交互,一个是用户的收集,一个是自己的后台服务器,一个是微信服务器,做公众号的图片回复的时候,需要将图片上传到微信服务器,获取素材的media_id,然后使用media_id组装成微信规定的XML信息模板,当用户点击按钮的时候,返回给用户上传的图片。
       微信对上传的素材做了区分,分别为:临时素材和永久素材,他们上传的方式也不一样,同时也会有要求。对于永久素材,需要做删除操作。我使用PHP做开发,首先看看上传临时素材,文档给了我们URL和请求的方法。然后做编程。编程先把请求的方法包装下:
protected static function https_request($url, $data = null)
{
 //创建一个新cURL资源
 $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
上包装了对请求的操作,接下来就是做上传素材了,微信不接受网络素材,只好是自己的本地图片做上传,这里写了一个方法来做上传临时素材:
//获取上传图片的medioId 添加临时素材
public function get_media_id($imgUrl){

     $TOKEN="idtbxhOnI4YZ8gFRHeUEU-MYk4T3XxVndEZKvx2jlx3dGteEWEyG6Twck9MTgsyXRl_MqyBhgYa4w73mjGnvXH17Nguhqs7Z2QCpCu7SvzUYIWjAHALVJ";
      $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image';



    $filedata = array("media"  => "@".$imgUrl);

   $result =$this->https_request($URL,$filedata);
   echo var_dump($result).'<br>';
   $res = json_decode($result,true);
    return $res;
}
上面的TOKEN是微信自己公众号的accessToken,可以通过文档网页测试来获取做测试,也可以自己写方法获取,这里就不写了,通过给参数$imageUrl就可以获得media_id,在使用media_id就可以在公众号显示了,上传永久素材和上传临时素材是一样的,只是链接不一样:
 //添加永久素材
    public function uploadImg($imgUrl){

        $TOKEN="7ZT1cX_zIh0PFJnINPPaVew5yIDAU9N0umuwt5kmyuMwGVW2LCCTmokixxt99Rix0NixyKiQP-kB-T8KxYNllkRz7pZ7znWfIKOkK8bYUmsCFIgAFAFIL";
        $url = 'https://api.weixin.qq.com/cgi-bin/material/add_material?access_token='.$TOKEN.'&type=image';
//         $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image';
        $data = array('media'=>'@'.$imgUrl);
        $result = $this->https_request($url,$data);
        $data = @json_decode($result,true);

        return $data['media_id'];

//         return $data;
    }

这是不是很简单,现在看看如何删永久素材,删除素材,首先要获取素材的media_id,在通过media_id来删除素材,这就需要我们自己先保存上传后的素材media_id,方便我们做删除操作。这里直接给出代码:
   public function del_media($media_id){
         $TOKEN="7ZT1cX_zIh0PFJnINPPaVew5yIDAU9N0umuwt5kmyuMwGVW2LCCTmokixxt99Rix0NixyKiQP-kB-T8KxYNllkRz7pZ7znWfIKOkK8bYUmsCFIgAFAFIL";
         $media_id = 'b6geinBHCE6Z3WrilwK0NEeVU4JZDlcdebGYQrYOy-k';
//          $media_id = 'b6geinBHCE6Z3WrilwK0NBO88W4Q5nNrhWQOiUKQouA';
         $url = 'https://api.weixin.qq.com/cgi-bin/material/del_material?access_token='.$TOKEN;
         $data = '{"media_id":"%s"
}';
         $data = sprintf($data,$media_id);
         $result = $this->https_request($url,$data);
         $res = json_decode($result,true);
         return $res;
     }

这里要注意下请求的参数的格式一定要多注意,否则会报错。


微信新增临时素材----图片

博文 来自: m0_38027358
没有更多推荐了,返回首页