将公众平台的用户同步到本地数据库时, 数据包中有个"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 );
- }
- }
复制代码