• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

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

Data: 2016-04-27 17:17:52Form: JournalClick: 7

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

将公众平台的用户同步到本地数据库时, 数据包中有个"headimgurl"字段,用来标识用户的头像,内容如下

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

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

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

下载函数

  1. /**
  2.  * 异步将远程链接上的内容(图片或内容)写到本地
  3.  * 
  4.  * @param unknown $url
  5.  *            远程地址
  6.  * @param unknown $saveName
  7.  *            保存在服务器上的文件名
  8.  * @param unknown $path
  9.  *            保存路径
  10.  * @return boolean
  11.  */
  12. function put_file_from_url_content($url, $saveName, $path) {
  13.     // 设置运行时间为无限制
  14.     set_time_limit ( 0 );
  15.     
  16.     $url = trim ( $url );
  17.     $curl = curl_init ();
  18.     // 设置你需要抓取的URL
  19.     curl_setopt ( $curl, CURLOPT_URL, $url );
  20.     // 设置header
  21.     curl_setopt ( $curl, CURLOPT_HEADER, 0 );
  22.     // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
  23.     curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
  24.     // 运行cURL,请求网页
  25.     $file = curl_exec ( $curl );
  26.     // 关闭URL请求
  27.     curl_close ( $curl );
  28.     // 将文件写入获得的数据
  29.     $filename = $path . $saveName;
  30.     $write = @fopen ( $filename, "w" );
  31.     if ($write == false) {
  32.         return false;
  33.     }
  34.     if (fwrite ( $write, $file ) == false) {
  35.         return false;
  36.     }
  37.     if (fclose ( $write ) == false) {
  38.         return false;
  39.     }
  40. }

复制代码

同步代码(这时是使用THINKPHP 3.2做为框架来开发)

  1. public function weixin_server_users_list_submit() {
  2.         
  3.         // 最大执行时间, 时间 0 为无时间上限
  4.         set_time_limit ( 0 );
  5.         // 按钮操作
  6.         $submitName = I ( 'submit' );
  7.         if ($submitName == "getServerUsers") {
  8.             // 将公众平台上的微信关注用户同步到数据库中
  9.             
  10.             // 引入微信类
  11.             $IncludePath = C ( 'IncludePath' );
  12.             require_once $IncludePath . 'weixin/' . 'wechat.class.php';
  13.             
  14.             // 得到config中的配置参数
  15.             $weixin_Type = C ( 'weixin_Type' );
  16.             $weixin_Token = C ( 'weixin_Token' );
  17.             $weixin_AppId = C ( 'weixin_AppId' );
  18.             $weixin_AppSecret = C ( 'weixin_AppSecret' );
  19.             
  20.             // 定义类
  21.             $options = array (
  22.                     'token' => $weixin_Token,
  23.                     'appid' => $weixin_AppId,
  24.                     'appsecret' => $weixin_AppSecret 
  25.             );
  26.             $weObj = new \Wechat ( $options );
  27.             
  28.             // 认证号功能
  29.             if ($weixin_Type == 'rzh') {
  30.                 
  31.                 // 得到用户列表
  32.                 $weixinUsersArrayAll = $weObj->getUserList ( '' );
  33.                 
  34.                 // 得到OPENID列表
  35.                 $weixinUsersArray = $weixinUsersArrayAll ['data'] ['openid'];
  36.                 // 全部用户
  37.                 $total = $weixinUsersArrayAll ['total'];
  38.                 // 本次同步
  39.                 $count = $weixinUsersArrayAll ['count'];
  40.                 // 下次同步的启始号
  41.                 $next_openid = $weixinUsersArrayAll ['next_openid'];
  42.                 
  43.                 for($i = 1; $i < $count; $i ++) {
  44.                     // 将用户信息写入数据库
  45.                     $OpenId = $weixinUsersArray [$i];
  46.                     $weixinUserArray = $weObj->getUserInfo ( $OpenId );
  47.                     put_weixin_server_users ( $weixinUserArray );
  48.                     
  49.                     // 将头像下载到服务器上--以后将删除
  50.                     $url = $weixinUserArray ['headimgurl'];
  51.                     $saveName = $weixinUserArray ['openid'] . '.jpg';
  52.                     $path = C ( 'weixinAvatarPath' );
  53.                     put_file_from_url_content ( $url, $saveName, $path );
  54.                 }
  55.             }
  56.             
  57.             $message = "恭喜您,同步成功!";
  58.             $this->success ( $message );
  59.         } elseif ($submitName == "deleteLocalhostUsers") {
  60.             
  61.             // 清除数据库中的用户记录
  62.             $model = new WeixinServerUsersModel ();
  63.             $map = " '1' = '1' ";
  64.             $model->delete ( $map );
  65.             
  66.             $message = "恭喜您,操作成功!";
  67.             $this->success ( $message );
  68.         }
  69.     }

复制代码

Name:
<提交>