Files
orico-official-website-old/app/index/controller/Customer.php
2024-10-29 14:04:59 +08:00

1022 lines
37 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\index\controller;
use think\Cookie;
use think\Lang;
use think\Loader;
use think\Config;
use think\Session;
use think\Cache;
class Customer extends BaseController {
public function index() {
if ($this->customer_id > 0)
{
$this->redirect(url('index/customer/personal'));
}
$url = $this->request->get('url');
$url = $url != '' ? $url : '';
$this->assign('url', $url);
return $this->fetch();
}
public function update_headimg()
{
if ($this->customer_id <= 0)
{
return $this->json(-1, '数据错误');
}
$result = upload_headimg('headimg');
if ($result['code'] < 0)
{
return $this->json(-2, $result['msg']);
}
$headimg = $result['data'];
$result = model('customer')->where(['id' => $this->customer_id])->update(['picture' => $headimg]);
if (!$result)
{
return $this->json(-3, '修改失败');
}
$customer_info = model('customer')->getBasicInfo($this->customer_id);
$this->set_login_token($customer_info);
return $this->json(200, '修改成功');
}
# 用旧密码改新密码
public function update_pwd()
{
$data = $this->request->post();
if (empty($data) || $this->customer_id <= 0)
{
return $this->json(-1, '数据错误');
}
if ($this->customer_info['have_pwd'])
{
$customer_info = model('customer')->where(['id' => $this->customer_id])->find();
if (md5($data['old_password']) != $customer_info['password'])
{
return $this->json(-2, '旧密码错误');
}
}
$update_data = [
'password' => md5($data['password']),
'salt' => $data['password']
];
$result = model('customer')->where(['id' => $this->customer_id])->update($update_data);
if (!$result)
{
return $this->json(-4, '修改密码失败');
}
$customer_info = model('customer')->getBasicInfo($this->customer_id);
$this->set_login_token($customer_info);
return $this->json(200, '修改密码成功');
}
# 用手机号/邮箱改密码
public function update_forget_pwd()
{
$data = $this->request->post();
if (empty($data))
{
return $this->json(-1, '数据错误');
}
if (isset($data['telephone']))
{
$flag = 1;
if (!preg_match("/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/", $data['telephone']))
{
return $this->json(-2, '手机号格式错误');
}
$captcha = $this->cacheGet('regtel' . $data['telephone'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-3, '验证码错误');
}
}
else
{
return $this->json(-100, '邮箱暂不可用');
$flag = 2;
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $data['email']))
{
return $this->json(-4, '邮箱格式错误');
}
$captcha = $this->cacheGet('regemail' . $data['email'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-5, '验证码错误');
}
}
if (!preg_match("/^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*-.]+$)[a-zA-Z\d!@#$%^&*-.]{8,20}$/", $data['password']))
{
return $this->json(-6, '密码必须包含8-20个字符,且至少包含两种类型字符');
}
if ($flag == 1)
{
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
if (empty($customer_info))
{
return $this->json(-7, '该手机号未注册');
}
$update_data = [
'password' => md5($data['password']),
'salt' => $data['password']
];
$result = model('customer')->where(['telephone' => $data['telephone']])->update($update_data);
}
else
{
$customer_info = model('customer')->getBasicInfoByEmail($data['email']);
if (empty($customer_info))
{
return $this->json(-8, '该邮箱未注册');
}
$update_data = [
'password' => md5($data['password']),
'salt' => $data['password']
];
$result = model('customer')->where(['email' => $data['email']])->update($update_data);
}
if (!$result)
{
return $this->json(-9, '修改密码失败,稍后再试');
}
$this->_logout();
return $this->json(200, '修改密码成功');
}
public function bind_email()
{
$data = $this->request->post();
// tiaoshi($data);die;
if (empty($data) || $this->customer_id <= 0)
{
return $this->json(-1, '数据错误');
}
if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $data['email']))
{
return $this->json(-2, '邮箱格式错误');
}
$customer_info = model('customer')->where(['email' => $data['email']])->find();
if (!empty($customer_info))
{
return $this->json(-3, '邮箱已被使用');
}
$update_data = [
'email' => $data['email']
];
$result = model('customer')->where(['id' => $this->customer_id])->update($update_data);
if (!$result)
{
return $this->json(-3, '绑定邮箱失败,请稍后再试');
}
$customer_info = model('customer')->getBasicInfo($this->customer_id);
$this->set_login_token($customer_info);
return $this->json(200, '绑定邮箱成功');
}
# 旧手机号改新手机号
public function update_tel()
{
$data = $this->request->post();
// tiaoshi($data);die;
if (empty($data) || $this->customer_id <= 0)
{
return $this->json(-1, '数据错误');
}
$customer_info = model('customer')->where(['id' => $this->customer_id])->find();
if ($customer_info['telephone'] != $data['old_telephone'])
{
return $this->json(-2, '旧手机号错误');
}
$validate = Loader::validate('customer');
if (!$validate->scene('update_tel')->check($data))
{
return $this->json(-3, $validate->getError());
}
$captcha = $this->cacheGet('regtel' . $data['new_telephone'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-4, '验证码错误');
}
$update_data = [
'telephone' => $data['new_telephone']
];
$result = model('customer')->where(['id' => $this->customer_id])->update($update_data);
if (!$result)
{
return $this->json(-5, '修改失败');
}
$new_customer_info = model('customer')->getBasicInfo($this->customer_id);
$this->set_login_token($new_customer_info);
return $this->json(200, '修改成功');
}
public function new_register()
{
if ($this->customer_id > 0)
return $this->json(-10001, '已经登录过');
$data = $this->request->post();
if (empty($data))
{
return $this->json(-1, '数据错误');
}
$validate = Loader::validate('customer');
if (!$validate->scene('register_by_telephone')->check($data))
{
return $this->json(-2, $validate->getError());
}
$captcha = $this->cacheGet('regtel' . $data['telephone'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-4, '验证码错误');
}
$firstname = 'ORICO' . rand(10000000, 99999999);
$insert_data = [
'firstname' => $firstname,
'telephone' => $data['telephone'],
'addtime' => time()
];
$customer_id = model('customer')->insertGetId($insert_data);
if (!$customer_id)
{
return $this->json(-100, '注册失败');
}
$customer_info = model('customer')->getBasicInfo($customer_id);
$this->set_login_token($customer_info);
return $this->json(200, '注册成功');
}
public function new_login()
{
if ($this->customer_id > 0)
return $this->json(-10001, '已经登录过');
$data = $this->request->post();
if (empty($data))
{
return $this->json(-1, '数据错误');
}
if (isset($data['password']))
{
// 密码登录
if (preg_match("/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/", $data['username']))
{
$where = ['telephone' => $data['username']];
}
elseif (preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/", $data['username']))
{
$where = ['email' => $data['username']];
}
else
{
return $this->json(-2, '账号格式错误');
}
$where['stat'] = 0;
$customer_info = model('customer')->where($where)->field('id, firstname, picture, sex, email, telephone, qq, birthday, password')->find();
if (empty($customer_info))
{
return $this->json(-3, '账号未注册');
}
if ($customer_info['password'] != md5($data['password']))
{
return $this->json(-4, '账号或密码错误');
}
}
else
{
// 短信验证码登录
$captcha = $this->cacheGet('regtel' . $data['telephone'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-5, '验证码错误');
}
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
if (empty($customer_info))
{
// 未注册直接入库
$firstname = 'ORICO' . rand(10000000, 99999999);
$insert_data = [
'firstname' => $firstname,
'telephone' => $data['telephone'],
];
$customer_id = model('customer')->insertGetId($insert_data);
if (!$customer_id)
{
return $this->json(-6, '登录失败');
}
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
}
}
$this->set_login_token($customer_info);
return $this->json(200, '登录成功');
}
/**
* 前台用户登录
* @param string $username 前台用户名
* @param string $password 密码
* @param string $verify 验证码
*/
public function login() {
if ($this->customer_id) {
return $this->redirect(url('index/customer/index'));
}
$this->request->isPost() || $this->error(Lang::get('illegal request')); //判断是否ajax登录
$data = $this->request->post();
if (empty($data) || !is_array($data)) {
return $this->error('未知错误');
}
$this->verify_check($data['authcode'], 'yanzhengma') || $this->error('验证码 ' . Lang::get('error'), url('/login'));
$validaterule = [
//会员登陆字段验证
'firstname|' . Lang::get('user name') => 'require|min:2',
'password|' . Lang::get('user password') => 'require|min:6',
];
// 数据验证
$valid_result = $this->validate($data, $validaterule);
if (true !== $valid_result) {
// 验证失败 输出错误信息
return $this->error($valid_result);
}
$result = Loader::model('Customer')->login($data['firstname'], $data['password']);
$result['status'] !== true && $this->error($result['msg'], url('/login')); //登录失败
if ($this->request->isAjax()) {
$result['id'] ? $this->success('登录成功', url('index/customer/index')) : $this->error(Lang::get('unknown error'), url('/login'));
}
return $result['id'] ? $this->redirect(url('index/customer/index')) : $this->error(Lang::get('unknown error'), url('/login'));
}
/**
* 退出登录
*/
public function logout() {
if (!$this->customer_id) {
return $this->redirect(url('/login'));
}
Session::delete('customer_auth', null);
Session::delete('customer_auth_sign', null);
return $this->redirect(url('/login'));
}
public function register() {
if ($this->customer_id > 0) {
return $this->redirect(url('index/customer/index'));
}
if ($this->request->isPost()) {
$data = $this->request->post();
if (empty($data) || !is_array($data)) {
return $this->error(Lang::get('incorrect operation'));
}
$this->verify_check($data['authcode'], 'yanzhengma') || $this->error('验证码 ' . Lang::get('error'), url('/login'));
//验证规则
$validaterule = [
'firstname' => 'require|length:2,32|unique:customer,firstname',
'email' => 'email|unique:customer,email',
'telephone' => ['regex' => '^1[345789]\d{9}$', 'unique' => 'customer,telephone',],
'password' => 'require|min:6|max:32',
'repassword' => 'require|confirm:password',
//'group_id' => 'require|between:0,2147483647',
'item' => 'accepted',
];
//验证提示信息
$validatemsg = [
'firstname.require' => '用户名不能为空',
'firstname.unique' => '用户名已经被使用',
'firstname.length' => '用户名在2-32个字符之间',
'email.email' => '邮箱格式错误',
'email.unique' => '邮箱已经被使用',
'telephone.regex' => '电话格式错误',
'telephone.unique' => '电话已经被使用',
'password.require' => '密码不能为空',
'password.min' => '密码不少于6个字符',
'password.max' => '密码不多于32个字符',
'repassword.require' => '确认密码不能为空',
'repassword.confirm' => '两次密码不相符',
'group_id.require' => '用户组不能为空',
'item' => '请确认阅读服务条款',
];
$valid_result = $this->validate($data, $validaterule, $validatemsg);
if (true !== $valid_result) {
// 验证失败 输出错误信息
return $this->error($valid_result);
}
$code = $this->cacheGet('regtel' . $data['telephone']);
if ($code != $data['code']) {
return $this->error('短信验证码不正确,请输入正确验证码');
}
$addtime = time();
$set = [
'group_id' => 1,
'email' => isset($data['email']) ? $data['email'] : '',
'telephone' => isset($data['telephone']) ? $data['telephone'] : '',
'firstname' => $data['firstname'],
'lastname' => isset($data['lastname']) ? $data['lastname'] : '',
'newsletter' => isset($data['newsletter']) ? $data['newsletter'] : 0,
'salt' => $data['password'],
'password' => md5($data['password']),
'stat' => 0,
'safe' => 1,
'code' => '',
'item' => isset($data['item']) ? $data['item'] : 0,
'token' => isset($data['token']) ? $data['token'] : '',
'wishlist' => isset($data['wishlist']) ? $data['wishlist'] : '',
'ip' => isset($data['ip']) ? $data['ip'] : '',
'fenxiang' => isset($data['fenxiang']) ? $data['fenxiang'] : 0,
'guanzhu' => isset($data['guanzhu']) ? $data['guanzhu'] : 0,
'hangye' => isset($data['hangye']) ? $data['hangye'] : '',
'zhiye' => isset($data['zhiye']) ? $data['zhiye'] : '',
'sex' => isset($data['sex']) ? $data['sex'] : '',
'birthday' => isset($data['birthday']) ? $data['birthday'] : '',
'qq' => isset($data['qq']) ? $data['qq'] : '',
'addtime' => $addtime,
'custom_field' => json_encode([]),
];
$model = Loader::model('Customer')->insertRow($set);
if ($model && $customer_id = $model->getData('id')) {
return $this->success('注册成功', url('/index/customer/information', ['key' => 'regsuccess']));
}
return $this->error(Lang::get('operation failed'));
}
return $this->fetch();
}
public function personal()
{
if ($this->customer_id <= 0)
{
$this->redirect(url('index/customer/index'));
}
return $this->fetch();
}
public function my_collection()
{
if ($this->customer_id <= 0)
{
$this->redirect(url('index/customer/index'));
}
$param = $this->request->param();
// tiaoshi($param);die;
$where = ['a.stat' => 0, 'b.stat' => 0, 'a.customer_id' => $this->customer_id];
if (isset($param['cid']))
{
$cid_arr = model('product_category')->getChildIDArray($param['cid']);
$where['b.cid'] = ['in', $cid_arr];
$cid = $param['cid'];
}
else
{
$cid = 0;
}
$field = ['b.id', 'b.cid', 'b.name', 'b.shortname', 'b.isnew', 'b.ishot', 'b.recommend', 'b.viewcount', 'b.brand_id'];
$order = ['a.id' => 'desc'];
$list = model('collection')->getList($where, $order, $field, 10);
foreach ($list as $key => $value) {
$product_two_img = model('product_two_img')->where(['product_id' => $value['id']])->find();
$list[$key]['product_two_img'] = $product_two_img['image_url'];
}
$data = [
'list' => $list->isEmpty() ? null : $list->items(),
'page' => $list->render(),
'cid' => $cid
];
$this->assign($data);
return $this->fetch();
}
public function my_report()
{
if ($this->customer_id <= 0)
$this->redirect(url('index/customer/index'));
$param = $this->request->param();
$where = ['stat' => 0, 'customer_id' => $this->customer_id];
if (isset($param['status']) && $param['status'] >= 0)
{
$where['status'] = $param['status'];
$status = $param['status'];
}
else
$status = -1;
$list = model('report')->getList($where, ['id' => 'desc'], null, 10);
tiaoshi($list);die;
$data = [
'list' => $list->isEmpty() ? null : $list->items(),
'page' => $list->render(),
'status' => $status
];
$this->assign($data);
return $this->fetch();
}
public function new_logout()
{
$this->_logout();
return $this->redirect('index/customer/index');
}
public function information($key) {
$key = (string) $key;
//$this->engine->layout(false);
$result = [
'regsuccess' => ['msg' => '注册成功', 'url' => ''],
'getpwdsuccess' => ['msg' => '找回密码完成', 'url' => ''],
];
if ($result[$key]) {
$value = $result[$key];
} else {
$value = ['msg' => '信息提示', 'url' => ''];
}
$this->assign($value);
return $this->fetch();
}
public function forgetpwd() {
if ($this->customer_id) {
return $this->redirect(url('index/customer/index'));
}
if ($this->request->isPost()) {
$data = $this->request->post();
if (empty($data) || !is_array($data)) {
return $this->error(Lang::get('incorrect operation'));
}
//验证规则
$validaterule = [
'email' => 'email',
'password' => 'require|min:6|max:32',
'repassword' => 'require|confirm:password',
];
//验证提示信息
$validatemsg = [
'email.email' => '邮箱格式错误',
'password.require' => '密码不能为空',
'password.min' => '密码不少于6个字符',
'password.max' => '密码不多于32个字符',
'repassword.require' => '确认密码不能为空',
'repassword.confirm' => '两次密码不相符',
];
$valid_result = $this->validate($data, $validaterule, $validatemsg);
if (true !== $valid_result) {
// 验证失败 输出错误信息
return $this->error($valid_result);
}
$row = Loader::model('Customer')->getRow(['email' => $data['email']]);
if (empty($row)) {
return $this->error('该邮箱尚未注册!');
}
$code = $this->cacheGet('regemail' . $data['email']);
if ($code != $data['code']) {
return $this->error('邮箱验证码不正确,请输入正确验证码');
}
// if ($row['password'] != md5($data['password'])) {
// return $this->error('原密码不正确');
// }
$data['id'] = $row['id'];
$model = Loader::model('Customer')->updatePassword($data);
if ($model && $model->getData('id')) {
return $this->success('找回密码完成', url('/index/customer/information', ['key' => 'getpwdsuccess']));
}
}
return $this->fetch();
}
public function sendsms() {
$data = $this->request->param();
// tiaoshi($data);die;
if (empty($data) || !is_array($data)) {
return $this->json(-1, '数据错误');
}
if (isset($data['login']) && $data['login'])
{
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
if (empty($customer_info))
{
return $this->json(-101, '手机号未注册');
}
}
else if (isset($data['register']) && $data['register'])
{
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
if (!empty($customer_info))
{
return $this->json(-102, '手机号已注册');
}
}
//验证规则
$validaterule = [
// 'telephone' => ['regex' => '^1[345789]\d{9}$', 'unique' => 'customer,telephone',],
'telephone' => ['regex' => '^1[345789]\d{9}$'],
];
//验证提示信息
$validatemsg = [
'telephone.regex' => '手机格式错误',
// 'telephone.unique' => '手机号已注册',
];
$valid_result = $this->validate($data, $validaterule, $validatemsg);
if (true !== $valid_result) {
return $this->json(-2, $valid_result);
}
$send_count = Cache::get('sendsms_' . $data['telephone'], '');
if ($send_count == '')
{
Cache::set('sendsms_' . $data['telephone'], 1, 43200);
}
else
{
if ($send_count > 10)
{
return $this->json(-3, '发送次数超过限制');
}
Cache::inc('sendsms_' . $data['telephone']);
}
$sms = new \alisms\SendSms();
//设置关键的四个配置参数其实配置参数应该写在公共或者模块下的config配置文件中然后在获取使用这里我就直接使用了。
$sms->accessKeyId = (string) Config::get('sms_accesskeyid');
$sms->accessKeySecret = (string) Config::get('sms_accesskeysecret');
$sms->signName = (string) Config::get('sms_signname');
$sms->templateCode = (string) Config::get('sms_templatecode');
$mobile = $data['telephone'];
//模板参数自定义了随机数你可以在这里保存在缓存或者cookie等设置有效期以便逻辑发送后用户使用后的逻辑处理
$code = mt_rand(1000, 9999);
$this->cacheSet('regtel' . $mobile, $code, 300);
$templateParam = array('code' => $code);
$m = $sms->send($mobile, $templateParam);
//类中有说明默认返回的数组格式如果需要json在自行修改类或者在这里将$m转换后在输出
if ($m['Code'] == 'OK') {
return $this->json(200, $m['Message']);
} else {
return $this->json(-4, $m['Message']);
}
}
public function sendresetemail() {
$data = $this->request->param();
if (empty($data) || !is_array($data)) {
return $this->json(-1, '数据错误');
}
//验证规则
$validaterule = ['email' => 'email',];
//验证提示信息
$validatemsg = ['email.email' => '邮箱格式错误',];
$valid_result = $this->validate($data, $validaterule, $validatemsg);
if (true !== $valid_result) {
// 验证失败 输出错误信息
return $this->json(-2, $valid_result);
}
$row = Loader::model('Customer')->getRow(['email' => $data['email']]);
if (empty($row)) {
return $this->json(-3, '该邮箱尚未注册!');
}
//$email = $data['email'];
//$code = mt_rand(10000, 99999);
//$this->cacheSet('regemail' . $email, $code, 1800);
//return $this->success($code);
//$email为邮箱
$email = $data['email'];
//模板参数自定义了随机数你可以在这里保存在缓存或者cookie等设置有效期以便逻辑发送后用户使用后的逻辑处理
$code = mt_rand(100000, 999999);
$this->cacheSet('regemail' . $email, $code, 1800);
//邮件标题
$subject = $this->request->host() . '-激活邮箱';
//邮件内容
$body = "<h1>尊敬的$row[firstname],您好!<br/>本次验证码为:<h2 style='color: red;'>" . $code . "</h2> <br/>有效期为30分钟,请及时做出处理。<br/>本邮件由系统自动发出,请勿直接回复!";
$res = $this->sendemail($data['email'], $row['firstname'], $subject, $body, 'oricogroup@orico.com.cn');
if ($res['code'] == 200) {
return $this->json(200, "邮件已发送,请您及时确认。");
} else {
return $this->json(-4, $res['msg']);
}
}
public function sendemail($to, $to_name, $subject, $body, $from_email = '', $from_name = 'ORICO') {
$email_host = (string) Config::get('email_host');
$email_tls = (string) Config::get('email_tls');
$email_port = (string) Config::get('email_port');
$email_user = (string) Config::get('email_user');
$email_pass = (string) Config::get('email_pass');
$email_code = (string) Config::get('email_code');
$email_replyaddr = (string) Config::get('email_replyaddr');
$website_email = (string) Config::get('website_email');
// Passing `true` enables exceptions
$mail = new \mail\PHPMailer\PHPMailer(true);
try {
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//$mail->setLanguage('en');
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 0;
$mail->Host = $email_host;
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = $email_port;
$mail->CharSet = strtolower($email_code);
$mail->Encoding = 'base64';
$mail->SMTPKeepAlive = true;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = strtolower($email_tls);
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = $email_user;
//Password to use for SMTP authentication
$mail->Password = $email_pass;
//Set who the message is to be sent from
if ($from_email) {
$mail->setFrom($from_email, $from_name);
} else {
$mail->setFrom($email_replyaddr, 'Sender');
}
//Set an alternative reply-to address
if ($website_email) {
$mail->addReplyTo($website_email, 'Reply');
}
//Set who the message is to be sent to
$mail->addAddress($to, $to_name);
//$mail->addAddress($website_email, 'Recipient');
//Set the subject line
$mail->Subject = $subject;
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML($body);
//$mail->Body = 'This is the HTML message body <b>in bold!</b>';
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
$mail->WordWrap = 60;
//send the message, check for errors
if (!$mail->send()) {
$result = ['code' => -1, 'msg' => '邮箱发送失败,稍后再试'];
} else {
$result = ['code' => 200, 'msg' => '邮箱发送成功'];
}
} catch (\mail\PHPMailer\Exception $e) {
$result = ['code' => -2, 'msg' => '邮箱发送失败,稍后再试'];
}
return $result;
}
public function save(){
// exit('暂未开放');
$client_id = 101544135;
$client_secret = 'ef8a9c590667e0aa226cfa5ae5372aa0';
$redirect_uri = 'http://www.orico.com.cn/index/customer/save';
$code = input("code");
$url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=$client_id&client_secret=$client_secret&code=$code&state=123&redirect_uri=$redirect_uri";
$response = file_get_contents($url);
if(strpos($response ,"callback")!== false){
$lpos = strpos($response ,"(");
$rpos = strpos($response ,")");
$response = substr($response ,$lpos+1,$rpos-$lpos-1);
$msg = json_decode($response );
if(isset($msg->error)){
echo "<h3>error:</h3>".$msg->error;
echo "<h3>msg:</h3>".$msg->error_description;
exit;
}
}
$params = array();
parse_str($response,$params);
$url = "https://graph.qq.com/oauth2.0/me?access_token=".$params['access_token'];
$str = file_get_contents($url);
if(strpos($str ,"callback")!== false){
$lpos = strpos($str ,"(");
$rpos = strpos($str ,")");
$str = substr($str ,$lpos+1,$rpos-$lpos-1);
$user = json_decode($str );
if(isset($user->error)){
echo "<h3>error:</h3>".$user->error;
echo "<h3>msg:</h3>".$user->error_description;
exit;
}
}
$user_url = "https://graph.qq.com/user/get_user_info?access_token=".$params['access_token']."&oauth_consumer_key=".$client_id."&openid=".$user->openid;
$userinfo = file_get_contents($user_url);
$userinfo = json_decode($userinfo, true);
$where = [
'openid' => $user->openid,
'stat' => 0
];
$result = model('customer')->where($where)->find();
if(empty($result) || $result['telephone'] == '')
{
$this->assign('openid', $user->openid);
$this->assign('access_token', $params['access_token']);
$this->assign('userinfo', $userinfo);
return view('bind_phone');
}
else
{
$customer_info = model('customer')->where($where)->field('id, firstname, picture, sex, email, telephone, qq, birthday, password')->find();
$this->set_login_token($customer_info);
$this->redirect(url('/index/customer/personal'));
}
}
public function qq_register()
{
$data = $this->request->post();
if (empty($data) || $data['openid'] == '' || $data['access_token'] == '' || empty($data['userinfo']))
{
return $this->json(-1, '数据错误');
}
if (!preg_match("/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/", $data['telephone']))
{
return $this->json(-2, '手机格式错误');
}
$captcha = $this->cacheGet('regtel' . $data['telephone'], 'error');
if ($captcha != $data['captcha'])
{
return $this->json(-3, '验证码错误');
}
$customer_info = model('customer')->getBasicInfoByTelephone($data['telephone']);
if (!empty($customer_info))
{
// 手机注册过
$update_data = [
'openid' => $data['openid'],
'token' => $data['access_token']
];
$result = model('customer')->where(['telephone' => $data['telephone']])->update($update_data);
if (!$result)
{
return $this->json(-4, '绑定失败');
}
}
else
{
// 手机未注册
$userinfo = json_decode($data['userinfo'], true);//dump($userinfo);die;
$insert_data = [
'telephone' => $data['telephone'],
'openid' => $data['openid'],
'token' => $data['access_token'],
'firstname' => $userinfo['nickname'],
'sex' => $userinfo['gender'],
'birthday' => $userinfo['year'],
'picture' => $userinfo['figureurl_qq_2'],
'stat' => 0
];
$customer_id = model('customer')->insertGetId($insert_data);
if (!$customer_id)
{
return $this->json(-5, '绑定失败');
}
$customer_info = model('customer')->getBasicInfo($customer_id);
}
$this->set_login_token($customer_info);
return $this->json(200, '绑定成功');
}
public function bind_phone()
{
return view();
}
private function autoLogin($row) {
/* 更新登录信息 */
// $data = [
// 'id' => $row['id'],
// 'login' => \think\Db::raw('`login`+1'),
// //'last_login_time' => Request::instance()->time(),
// //'ip' => Request::instance()->ip()
// ];
// $this::update($data);
/* 记录登录SESSION和COOKIES */
Session::set('customer_auth', $row);
Session::set('customer_auth_sign', data_auth_sign($row));
unset($row);
}
public function wx_save(){
$appdi = 'wx979d391fdfb583d1';
$secret= '69613bae6537f7425b62c9632c63fa16';
$code = $_GET['code'];
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appdi&secret=$secret&code=$code&grant_type=authorization_code";
$userinfo = file_get_contents($url);
$userinfo = json_decode($userinfo, true);
$access_token = $userinfo['access_token'];
$openid = $userinfo['openid'];
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid";
$userinfo = file_get_contents($url);
$userinfo = json_decode($userinfo, true);
$unionid = $userinfo['unionid'];
$where = [
'openid' => $unionid,
'stat' => 0
];
$result = model('customer')->where($where)->find();
$picture = $userinfo['headimgurl'];
$gender = $userinfo['sex'];
$addtime = time();
$country_code = $userinfo['city'];
$userinfo['figureurl_qq_2'] = $picture;
$userinfo['addtime'] = $addtime;
$userinfo['gender'] = $gender;
$userinfo['year'] = '';
if(empty($result) || $result['telephone'] == '')
{
$this->assign('openid', $unionid);
$this->assign('access_token', $access_token);
$this->assign('userinfo', $userinfo);
return view('bind_phone');
}
else
{
$customer_info = model('customer')->where($where)->field('id, firstname, picture, sex, email, telephone, qq, birthday, password')->find();
$this->set_login_token($customer_info);
$this->redirect(url('/index/customer/personal'));
}
}
}