【分享】微信公众平台开发中, 认证号远程异步下载微信关注者头像到服务器的代码

浏览:10300 发布日期:2014/01/31 分类:求助交流 关键字: 微信头像 认证号 下载 显示
将公众平台的用户同步到本地数据库时, 数据包中有个"headimgurl"字段,用来标识用户的头像,内容如下

http://wx.qlogo.cn/mmopen/GqIlejFTbNjdBQnr6eDLvicD8HN8gqGNpIsopAtcxBwfwh3lpzJ5Xiae7tx4LNutDKDpRt1q6v6u848mh5ciaPrRA/0

因为此链接是QQ内部图像, 在网站中打不开,

解决办法是,将此图像下载到你的服务器上, 然后再引用服务器上的图像就可以了, 为了加快下载速度,这里用的是异步下载

下载函数/**
 * 异步将远程链接上的内容(图片或内容)写到本地
 * 
 * @param unknown $url
 *            远程地址
 * @param unknown $saveName
 *            保存在服务器上的文件名
 * @param unknown $path
 *            保存路径
 * @return boolean
 */
function put_file_from_url_content($url, $saveName, $path) {
    // 设置运行时间为无限制
    set_time_limit ( 0 );
    
    $url = trim ( $url );
    $curl = curl_init ();
    // 设置你需要抓取的URL
    curl_setopt ( $curl, CURLOPT_URL, $url );
    // 设置header
    curl_setopt ( $curl, CURLOPT_HEADER, 0 );
    // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
    curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
    // 运行cURL,请求网页
    $file = curl_exec ( $curl );
    // 关闭URL请求
    curl_close ( $curl );
    // 将文件写入获得的数据
    $filename = $path . $saveName;
    $write = @fopen ( $filename, "w" );
    if ($write == false) {
        return false;
    }
    if (fwrite ( $write, $file ) == false) {
        return false;
    }
    if (fclose ( $write ) == false) {
        return false;
    }
}
同步代码(这时是使用THINKPHP 3.2做为框架来开发)public function weixin_server_users_list_submit() {
        
        // 最大执行时间, 时间 0 为无时间上限
        set_time_limit ( 0 );
        // 按钮操作
        $submitName = I ( 'submit' );
        if ($submitName == "getServerUsers") {
            // 将公众平台上的微信关注用户同步到数据库中
            
            // 引入微信类
            $IncludePath = C ( 'IncludePath' );
            require_once $IncludePath . 'weixin/' . 'wechat.class.php';
            
            // 得到config中的配置参数
            $weixin_Type = C ( 'weixin_Type' );
            $weixin_Token = C ( 'weixin_Token' );
            $weixin_AppId = C ( 'weixin_AppId' );
            $weixin_AppSecret = C ( 'weixin_AppSecret' );
            
            // 定义类
            $options = array (
                    'token' => $weixin_Token,
                    'appid' => $weixin_AppId,
                    'appsecret' => $weixin_AppSecret 
            );
            $weObj = new \Wechat ( $options );
            
            // 认证号功能
            if ($weixin_Type == 'rzh') {
                
                // 得到用户列表
                $weixinUsersArrayAll = $weObj->getUserList ( '' );
                
                // 得到OPENID列表
                $weixinUsersArray = $weixinUsersArrayAll ['data'] ['openid'];
                // 全部用户
                $total = $weixinUsersArrayAll ['total'];
                // 本次同步
                $count = $weixinUsersArrayAll ['count'];
                // 下次同步的启始号
                $next_openid = $weixinUsersArrayAll ['next_openid'];
                
                for($i = 1; $i < $count; $i ++) {
                    // 将用户信息写入数据库
                    $OpenId = $weixinUsersArray [$i];
                    $weixinUserArray = $weObj->getUserInfo ( $OpenId );
                    put_weixin_server_users ( $weixinUserArray );
                    
                    // 将头像下载到服务器上--以后将删除
                    $url = $weixinUserArray ['headimgurl'];
                    $saveName = $weixinUserArray ['openid'] . '.jpg';
                    $path = C ( 'weixinAvatarPath' );
                    put_file_from_url_content ( $url, $saveName, $path );
                }
            }
            
            $message = "恭喜您,同步成功!";
            $this->success ( $message );
        } elseif ($submitName == "deleteLocalhostUsers") {
            
            // 清除数据库中的用户记录
            $model = new WeixinServerUsersModel ();
            $map = " '1' = '1' ";
            $model->delete ( $map );
            
            $message = "恭喜您,操作成功!";
            $this->success ( $message );
        }
    }
本文首发自微信开发社区 http://www.abis.com.cn/thread-597-1-1.html

欢迎加入微信开发交流群: 162384579
微信开发社区: http://www.abis.com.cn
微信DEMO: http://demo.abis.com.cn/admin.php admin 123456
欢迎关注[漂亮女孩]微信号: pgirlcn 体验新功能
最佳答案
评论( 相关
后面还有条评论,点击查看>>