| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | <?phpnamespace app\api\controller\company;use app\common\controller\Apic;use app\common\library\Sms;use fast\Random;use GuzzleHttp\Client;use think\Config;use think\Exception;use think\Validate;use think\Db;/** * 会员接口 */class User extends Apic{    protected $noNeedLogin = ['accountlogin','resetpwd','getUserOpenid'];    protected $noNeedRight = '*';    //员工手机+密码登录    public function accountlogin(){        $mobile   = $this->request->post('mobile');        $password = $this->request->post('password');        $openid = $this->request->post('openid','');        if (!$mobile || !$password || !$openid) {            $this->error(__('Invalid parameters'));        }        $ret = $this->auth->login($mobile, $password, $openid);        if ($ret) {            $data = $this->auth->getUserinfo();            $this->success(__('Logged in successful'), $data);        } else {            $this->error($this->auth->getError());        }    }    /**     * 退出登录     * @ApiMethod (POST)     */    public function logout()    {        if (!$this->request->isPost()) {            $this->error(__('Invalid parameters'));        }        $this->auth->logout();        $this->success(__('Logout successful'));    }    //用户详细资料    public function getUserinfo($type = 1){        $info = $this->auth->getUserinfo();        if($type == 'return'){            return $info;        }        $this->success(__('success'),$info);    }    /**     * 重置密码     *     * @ApiMethod (POST)     * @param string $mobile      手机号     * @param string $captcha     验证码     * @param string $newpassword 新密码     */    public function resetpwd()    {        $mobile      = $this->request->post('mobile');        $captcha     = $this->request->post('captcha');        $newpassword = $this->request->post("newpassword");        if (!$mobile || !$captcha || !$newpassword) {            $this->error(__('Invalid parameters'));        }        //验证Token        if (!Validate::make()->check(['newpassword' => $newpassword], ['newpassword' => 'require|regex:\S{6,30}'])) {            $this->error(__('Password must be 6 to 30 characters'));        }        if (!Validate::regex($mobile, "^1\d{10}$")) {            $this->error(__('Mobile is incorrect'));        }        $user = \app\common\model\CompanyStaff::getByMobile($mobile);        if (!$user) {            $this->error(__('User not found'));        }        $ret = Sms::check($mobile, $captcha, 'resetpwd');        if (!$ret) {            $this->error(__('Captcha is incorrect'));        }        Sms::flush($mobile, 'resetpwd');        //模拟一次登录        $this->auth->direct($user->id);        $ret = $this->auth->resetpwd($newpassword, '', true);        if ($ret) {            $this->success(__('Reset password successful'));        } else {            $this->error($this->auth->getError());        }    }    /**     * 修改会员个人信息     *     * @ApiMethod (POST)     * @param string $avatar   头像地址     * @param string $username 用户名     * @param string $nickname 昵称     * @param string $bio      个人简介     */    public function profile()    {        //验证        if($this->auth->type != 1){            $this->error('只有门店老板才能设置');        }        $field = [            'mobile',            'image',            'is_open',            'open_hours',        ];        $data = request_post_hub($field);        $data['updatetime'] = time();        $update_rs = Db::name('company')->where('id',$this->auth->company_id)->update($data);        $this->success('资料更新完成');    }    /**     * 设置店铺地址     */    public function setaddress()    {        //验证        if($this->auth->type != 1){            $this->error('只有门店老板才能设置');        }        $field = [            'province_name',            'city_name',            'area_name',            'province_id',            'city_id',            'area_id',            'address',        ];        $data = request_post_hub($field);        $data['full_address'] = $data['province_name'].$data['city_name'].$data['area_name'].$data['address'];        $data['updatetime'] = time();        $update_rs = Db::name('company')->where('id',$this->auth->company_id)->update($data);        $this->success('资料更新完成');    }    /**     * 小程序码     * @return void     */    public function getMiniCode()    {        try {            $companyId = $this->auth->company_id;            $companyWhere['id'] = $companyId;            $companyWhere['status'] = 1;            $company = Db::name('company')->where($companyWhere)->find();            if (empty($company)) {                throw new Exception('未找到门店信息');            }            $httpStr = $_SERVER['REQUEST_SCHEME'].'://'.$_SERVER['HTTP_HOST'];            if (empty($company['mini_code'])) {                $client = new Client();                $tk = getAccessToken();                $res2 = $client->request('POST', 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='.$tk, [                    'json' => [                        //'page' => 'pages/home/index',                        'env_version'=>'trial',                        'scene' => 'shopId='.$companyId,                    ]                ]);                $fileName = md5($companyId);                $fileUrl = '/uploads/company/'.$fileName.'.png';                $code = $res2->getBody()->getContents();                file_put_contents(ROOT_PATH.'/public'.$fileUrl,$code);                $companyData['mini_code'] = $fileUrl;                $companyRes = Db::name('company')->where($companyWhere)->update($companyData);                if (!$companyRes) {                    throw new Exception('更新门店信息失败');                }                $miniCode = $httpStr.$fileUrl;            } else {                $miniCode = $httpStr.$company['mini_code'];            }            $result = [                'mini_code' => $miniCode,                'company_name' => $this->auth->company->name,                'company_image' => one_domain_image($this->auth->company->image),            ];            $this->success('获取成功',$result);        } catch (Exception $e) {            $this->error($e->getMessage());        }    }    /**     * 获取用户openid     */    public function getUserOpenid() {        // code值        $code = $this->request->param('code');        if (!$code) {            $this->error(__('Invalid parameters'));        }        $config = config('company_wxMiniProgram');        $getopenid = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config['appid'].'&secret='.$config['secret'].'&js_code='.$code.'&grant_type=authorization_code';        $openidInfo = $this->getJson($getopenid);        if(!isset($openidInfo['openid'])) {            $this->error('用户openid获取失败',$openidInfo);        }        //  获取的结果存入数据库        /*$find = Db::name('company_sessionkey')->where(['openid'=>$openidInfo['openid']])->find();        if($find) {            $update = [];            $update['sessionkey'] = $openidInfo['session_key'];            $update['createtime'] = time();            $res = Db::name('company_sessionkey')->where(['openid'=>$openidInfo['openid']])->update($update);        } else {            $insert = [];            $insert['sessionkey'] = $openidInfo['session_key'];            $insert['openid'] = $openidInfo['openid'];            $insert['unionid'] = isset($openidInfo['unionid']) ? $openidInfo['unionid'] : '';            $insert['createtime'] = time();            $res = Db::name('company_sessionkey')->insertGetId($insert);        }*/        if(!empty($openidInfo)) {            $this->success('获取成功',$openidInfo);        } else {            $this->error('获取失败');        }    }    /**     * json 请求     * @param $url     * @return mixed     */    private function getJson($url){        $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, $url);        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        curl_close($ch);        return json_decode($output, true);    }}
 |