有谁知道微信生成的带参数的二维码后怎么再上传图片素材到微信服务器,然后我在点击公众号菜单获取我生成的二维码。。。

古文源 发布于 2017/02/24 18:02
阅读 400
收藏 0

如题,问题是我本地图片可以上传成功,一换微信的那个生成二维码那个就不行了

这是demo:其中$p是微信ticket生成的二维码路径

        

       case '图片':

                    $path=[
                    './Public/img/showqrcode.jpg',
                     './Public/img/2.jpg',
                     './Public/img/1.jpg'
                    ];


                    shuffle($path);  
                
                    $p=$path[0];
                    // $p="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQF88jwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyMTVVQmN4X0hiMF8xMDAwME0wN1IAAgSzkKtYAwQAAAAA";

                    $media_id=$this->uploadTemp($p);
  
                    $picTpl='<xml>
                    <ToUserName><![CDATA['.$this->openid.']]></ToUserName>
                    <FromUserName><![CDATA['.$this->wechatId.']]></FromUserName>
                    <CreateTime>'.time().'</CreateTime>
                    <MsgType><![CDATA[image]]></MsgType>
                    <Image>
                    <MediaId><![CDATA['.$media_id.']]></MediaId>
                    </Image>
                    </xml>';


                    echo $picTpl;

 

 

     //上传临时文件
     protected function uploadTemp($path,$type="image"){
            $url="https://api.weixin.qq.com/cgi-bin/media/upload?access_token=".$this->getAccessToken()."&type=".$type;


            $res=$this->post($url,array('media'=>'@'.$path),'json');
            return $res->media_id;
     }  
 

 

  public function post($url, $fields, $data_type='text') 
        {
            $cl = curl_init();
            if(stripos($url, 'https://') !== FALSE) {
                curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
                curl_setopt($cl, CURLOPT_SSLVERSION, 1);
            }
            curl_setopt($cl, CURLOPT_URL, $url);
            curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
            curl_setopt($cl, CURLOPT_POST, true);
            // convert @ prefixed file names to CurlFile class
            // since @ prefix is deprecated as of PHP 5.6
            if (class_exists('\CURLFile')) {
                foreach ($fields as $k => $v) {
                    if (strpos($v, '@') === 0) {
                        $v = ltrim($v, '@');
                        $fields[$k] = new \CURLFile($v);
                    }
                }
            }
            curl_setopt($cl, CURLOPT_POSTFIELDS, $fields);
            $content = curl_exec($cl);
            $status = curl_getinfo($cl);
            curl_close($cl);

            if (isset($status['http_code']) && $status['http_code'] == 200) {
                if ($data_type == 'json') {
                    $content = json_decode($content);
                }
                return $content;
            } else {
                return FALSE;
            }
        
        }
 

 

 

加载中
返回顶部
顶部