<?php
/**
 * 微信绑定操作相关
 */

namespace app\modules\logic\services;

use app\modules\third\wx\WxBind;
use app\modules\logic\model\UserWxbindModel;
use app\modules\logic\model\UsersModel;
use app\modules\sys\log\ImLog;
class WxBindService
{
    public $user_bind;

    public function __construct($user_id = 0)
    {
        if ($user_id != 0) {
            $this->user_bind = UserWxbindModel::findOne(['user_id' => $user_id, 'is_del' => 2]);
        }
    }

    /**
     * 用户绑定微信
     * @param $user_id
     * @param $author_code
     * @param $state
     * @return bool
     */
    public function bindUser($user_id, $author_code, $state)
    {
        $this->user_bind = new UserWxbindModel();
        $this->user_bind->setAttributes(['user_id' => $user_id, 'author_code' => $author_code, 'add_time' => date('Y-m-d H:i:s')], false);

        $wx_bind = new WxBind();
        $access_token = $wx_bind->getAccessToken($author_code, $state);
        if (!$access_token) {
            return '操作次数过多，请稍后尝试';
        }
        //一个openid 绑定一个账号
        $check = UserWxbindModel::findOne(['openid' => $access_token['openid'], 'is_del' => 2]);
        if ($check) {
            ImLog::instance('wx-bind-al-openid.log')->Log('openid:'.$access_token['openid']);
            return '微信号已经绑定了其他账户';
        }
        //根据openid 获取用户的基本信息
        $user_info = $wx_bind->getUserInfo($access_token['access_token'], $access_token['openid']);
        if (!$user_info) {
            return '获取用户信息失败，请重新操作';
        }
        $this->user_bind->setAttribute('openid', $access_token['openid']);
        $this->user_bind->setAttribute('access_token', $access_token['access_token']);
        $this->user_bind->setAttribute('refresh_token', $access_token['refresh_token']);
        $this->user_bind->setAttribute('nickname', $user_info['nickname']);
        $this->user_bind->setAttribute('unionid', $user_info['unionid']);
        $this->user_bind->setAttribute('headimgurl', $user_info['headimgurl']);
        $this->user_bind->save();
        //保存微信授权信息到users表
        $users = new UsersModel();
        $users->saveUs(['wx_nick'=>isset($user_info['nickname'])?$user_info['nickname']:'','wx_openid'=>isset($access_token['openid'])?$access_token['openid']:''],$user_id);
        //结束
        return true;
    }

    /**
     * 微信解绑
     * @return bool
     */
    public function unbind()
    {
        if (empty($this->user_bind)) {
            return true;
        }
        $this->user_bind->setAttribute('is_del', 1);
        $this->user_bind->save();
        return true;
    }
}
