512 lines
19 KiB
PHP
512 lines
19 KiB
PHP
<?php
|
|
|
|
namespace app\frontend\modules\member\controllers;
|
|
|
|
use app\common\components\ApiController;
|
|
use app\common\facades\RichText;
|
|
use app\common\facades\Setting;
|
|
use app\common\helpers\Cache;
|
|
use app\common\models\Member;
|
|
use app\common\models\member\MemberCancelSet;
|
|
use app\common\models\MemberShopInfo;
|
|
use app\common\models\Protocol;
|
|
use app\common\services\IDCardService;
|
|
use app\frontend\models\MembershipInformationLog;
|
|
use app\frontend\modules\member\models\MemberBankCard;
|
|
use app\frontend\modules\member\models\MemberModel;
|
|
|
|
|
|
class MemberInfoController extends ApiController
|
|
{
|
|
public $publicAction = ["platformAgreement","registerAgreement"];
|
|
public $ignoreAction = ["platformAgreement","registerAgreement"];
|
|
|
|
public function userInfoUpdatePage()
|
|
{
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$member = MemberModel::getUserInfos_v2($member_id)->first();
|
|
if (empty($member)) {
|
|
$mid = Member::getMid();
|
|
$this->jumpUrl(request()->type, $mid);
|
|
}
|
|
$member = $member->toArray();
|
|
$bankCard = MemberBankCard::where('member_id', $member_id)->first();
|
|
$protocol = Protocol::uniacid()->first();
|
|
$shopSet = Setting::get('shop.shop');
|
|
$cancelSet = MemberCancelSet::uniacid()->first();
|
|
$paySet = Setting::getByGroup('pay_password');
|
|
|
|
$converge_pay = 0;
|
|
if (app('plugins')->isEnabled('converge_pay')) {
|
|
$convergePaySet = Setting::get('plugin.convergePay_set');
|
|
if ($convergePaySet['converge_pay_status'] && $convergePaySet['payment']['payment_status']) {
|
|
$converge_pay = 1;
|
|
}
|
|
}
|
|
|
|
$return_data = [
|
|
'uid' => $member['uid'],
|
|
'nickname' => $member['nickname'],
|
|
'avatar' => yz_tomedia($member['avatar']),
|
|
'wechat' => $member['yz_member']['wechat'] ? : '',
|
|
'mobile' => $member['mobile'] ? : '',
|
|
'realname' => $member['realname'] ? : '',
|
|
'email' => $member['email'] ? : '',
|
|
'idcard' => $member['idcard'] ? : '',
|
|
'alipay' => $member['yz_member']['alipay'] ? : '',
|
|
'alipayname' => $member['yz_member']['alipayname'] ? : '',
|
|
'bank_card' =>$bankCard->bank_card,
|
|
'converge_pay' => $converge_pay,
|
|
'member_cancel' => $cancelSet['status'] ? 1 : 0,
|
|
'pay_state' => $paySet['pay_state'] ? 1 : 0,
|
|
'register_agreement' => [
|
|
'status' => $protocol->status ? 1 : 0,
|
|
'title' => $protocol->title ? : "注册协议"
|
|
],
|
|
'platform_agreement' => [
|
|
'status' => $shopSet['is_agreement'] ? 1 : 0,
|
|
'title' => $shopSet['agreement_name'] ? : "平台协议"
|
|
],
|
|
];
|
|
return $this->successJson('ok',$return_data);
|
|
}
|
|
|
|
/**
|
|
* 基本信息
|
|
* @return mixed
|
|
*/
|
|
public function userInfo()
|
|
{
|
|
try {
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$member = MemberModel::getUserInfos_v2($member_id)->first();
|
|
if (empty($member)) {
|
|
$mid = Member::getMid();
|
|
\Log::debug('----------------基本信息获取',[request()->all()]);
|
|
$this->jumpUrl(request()->type, $mid);
|
|
}
|
|
$member = $member->toArray();
|
|
$formSet = json_decode(Setting::get('shop.form'),true);
|
|
$shop_setting = Setting::get('shop.shop');
|
|
$return_data = [
|
|
'name' => $shop_setting['name'] ? : '商城',
|
|
'uid' => $member['uid'],
|
|
'nickname' => $member['nickname'],
|
|
'avatar' => $member['avatar'],
|
|
'avatar_image' => $member['avatar_image'],
|
|
'can_update_nickname' => $formSet['base']['change_info'] ? 1 : 0,
|
|
'can_update_avatar' => $formSet['base']['change_info'] ? 1 : 0,
|
|
'has_one_fans' => $member['has_one_fans'] && $member['has_one_fans']['uid'] > 0,
|
|
];
|
|
$return_data['basic_info'] = $this->basicInfo($member);
|
|
$return_data['fixed_diy_field'] = $this->fixedDiyField($member);
|
|
$return_data['diy_field'] = $this->diyField($member);
|
|
$return_data['diy_form'] = $this->diyForm($member);
|
|
|
|
$memberSet = Setting::get('shop.member');
|
|
$return_data['get_register_diy_form'] = [
|
|
'form_id' => $memberSet['form_id'] ? : 0,
|
|
'status' => (app('plugins')->isEnabled('diyform') && $memberSet['form_id']) ? 1 : 0,
|
|
];
|
|
|
|
return $this->successJson('ok',$return_data);
|
|
} catch (\Exception $e) {
|
|
return $this->errorJson($e->getMessage());
|
|
}
|
|
}
|
|
|
|
private function basicInfo($member)
|
|
{
|
|
$formSet = json_decode(Setting::get('shop.form'),true);
|
|
$returnData[] = [
|
|
'name' => '姓名',
|
|
'field' => 'name',
|
|
'must' => $formSet['base']['name_must'] ? : 0,
|
|
'value' => $member['realname'],
|
|
'show' => (bool)$formSet['base']['name']
|
|
];
|
|
$returnData[] = [
|
|
'name' => '性别',
|
|
'field' => 'gender',
|
|
'must' => $formSet['base']['sex_must'] ? 1 : 0,
|
|
'value' => $member['gender'],
|
|
'show' => (bool)$formSet['base']['sex']
|
|
];
|
|
$returnData[] = [
|
|
'name' => '详细地址',
|
|
'field' => 'address',
|
|
'must' => $formSet['base']['address_must'] ? 1 : 0,
|
|
'value' => [
|
|
'province' => $member['yz_member']['province'] ? : '',
|
|
'city' => $member['yz_member']['city'] ? : '',
|
|
'area' => $member['yz_member']['area'] ? : '',
|
|
'province_name' => $member['yz_member']['province_name'] ? : '',
|
|
'city_name' => $member['yz_member']['city_name'] ? : '',
|
|
'area_name' => $member['yz_member']['area_name'] ? : '',
|
|
'address' => $member['yz_member']['address'] ? : '',
|
|
],
|
|
'show' => (bool)$formSet['base']['address']
|
|
];
|
|
$returnData[] = [
|
|
'name' => '生日',
|
|
'field' => 'birthday',
|
|
'must' => $formSet['base']['birthday_must'] ? 1 : 0,
|
|
'value' => [
|
|
'birthyear' => $member['birthyear'] ? : '',
|
|
'birthmonth' => $member['birthmonth'] ? : '',
|
|
'birthday' => $member['birthday'] ? : '',
|
|
],
|
|
'show' => (bool)$formSet['base']['birthday']
|
|
];
|
|
$returnData[] = [
|
|
'name' => '身份证',
|
|
'field' => 'idcard',
|
|
'must' => $formSet['base']['idcard_must'] ? : 0,
|
|
'value' => $member['idcard'],
|
|
'show' => (bool)$formSet['base']['idcard']
|
|
];
|
|
$returnData[] = [
|
|
'name' => '身份证地址',
|
|
'field' => 'idcard_addr',
|
|
'must' => $formSet['base']['idcard_addr_must'] ? : 0,
|
|
'value' => $member['idcard_addr'],
|
|
'show' => (bool)$formSet['base']['idcard_addr']
|
|
];
|
|
return $returnData;
|
|
}
|
|
|
|
private function fixedDiyField($member)
|
|
{
|
|
$memberSet = Setting::get('shop.member');
|
|
if (!$memberSet['is_custom']) {
|
|
return [];
|
|
}
|
|
return [
|
|
[
|
|
'name' => $memberSet['custom_title'] ? : "",
|
|
'field' => 'custom_value',
|
|
'must' => 1,
|
|
'value' => $member['yz_member']['custom_value'] ? : '',
|
|
]
|
|
];
|
|
}
|
|
|
|
private function diyField($member)
|
|
{
|
|
$formSet = json_decode(Setting::get('shop.form'),true);
|
|
$form = array_values(array_sort($formSet['form'], function ($value) {
|
|
return $value['sort'];
|
|
}));
|
|
$returnData = [
|
|
'form_edit' => $formSet['base']['form_edit'] ? 1 : 0,
|
|
'form_open' => $formSet['base']['form_open'] ? 1 : 0,
|
|
'form' => []
|
|
];
|
|
$member_form = $member['yz_member']['member_form']?json_decode($member['yz_member']['member_form'],true):[];
|
|
$member_form = collect($member_form);
|
|
foreach ($form as $item) {
|
|
$has = $member_form->where('pinyin',$item['pinyin'])->first();
|
|
$returnData['form'][] = [
|
|
'name' => $item['name'],
|
|
'field' => $item['pinyin'],
|
|
'value' => $has ? $has['value'] : '',
|
|
];
|
|
}
|
|
return $returnData;
|
|
}
|
|
|
|
private function diyForm($member)
|
|
{
|
|
$memberSet = Setting::get('shop.member');
|
|
if (!app('plugins')->isEnabled('diyform') || !$memberSet['form_id']) {
|
|
return [];
|
|
}
|
|
$data = \Yunshop\Diyform\api\DiyFormController::getDiyFormById(request(), true, $memberSet['form_id']);
|
|
return $data['json'] ? : [];
|
|
}
|
|
|
|
public function userInfoSave()
|
|
{
|
|
try {
|
|
[$data,$sub_data] = $this->userInfoVerify(request()->all());
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$member = Member::find($member_id);
|
|
$yz_member = MemberShopInfo::where('member_id',$member_id)->first();
|
|
\Log::debug('---会员更新基本资料---',[$data,$sub_data,request()->type]);
|
|
$member->fill($data);
|
|
$member->realname = $data['realname'];
|
|
$member->birthyear = $data['birthyear'];
|
|
$member->birthmonth = $data['birthmonth'];
|
|
$member->birthday = $data['birthday'];
|
|
$member->idcard = $data['idcard'];
|
|
$member->idcard_addr = $data['idcard_addr'];
|
|
|
|
$yz_member->fill($sub_data);
|
|
if (!$member->save() || !$yz_member->save()) {
|
|
throw new \Exception('保存失败');
|
|
}
|
|
if (Cache::has($member->uid . '_member_info')) {
|
|
Cache::forget($member->uid . '_member_info');
|
|
}
|
|
return $this->successJson('保存成功');
|
|
} catch (\Exception $e) {
|
|
return $this->errorJson($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 注册信息验证
|
|
* @param $request
|
|
* @return array[]
|
|
* @throws \Exception
|
|
*/
|
|
private function userInfoVerify($request)
|
|
{
|
|
$formSet = json_decode(Setting::get('shop.form'),true);
|
|
//基础信息-注册填写
|
|
if ($formSet && $formSet['base']['name'] && $formSet['base']['name_must'] && !$request['name']) {
|
|
throw new \Exception('请填写姓名');
|
|
}
|
|
if ($formSet && $formSet['base']['sex'] && $formSet['base']['sex_must'] && !$request['gender']) {
|
|
throw new \Exception('请填写性别');
|
|
}
|
|
if ($formSet && $formSet['base']['address'] && $formSet['base']['address_must'] && !$request['address']) {
|
|
throw new \Exception('请填写详细地址');
|
|
}
|
|
if ($formSet && $formSet['base']['birthday'] && $formSet['base']['birthday_must'] && !$request['birthday']) {
|
|
throw new \Exception('请填写生日');
|
|
}
|
|
if ($formSet && $formSet['base']['idcard'] && $formSet['base']['idcard_must'] && !$request['idcard']) {
|
|
throw new \Exception('请填写身份证');
|
|
}
|
|
if ($formSet && $formSet['base']['idcard_addr'] && $formSet['base']['idcard_addr_must'] && !$request['idcard_addr']) {
|
|
throw new \Exception('请填写身份证地址');
|
|
}
|
|
|
|
$memberSet = Setting::get('shop.member');
|
|
//自定义字段-固定
|
|
$custom_value = $request['custom_value'] ? : '';
|
|
if (!$memberSet['is_custom']) {
|
|
$custom_value = '';
|
|
}
|
|
|
|
//自定义字段
|
|
$member_form = $form = array_values(array_sort($formSet['form'],function ($value) {
|
|
return $value['sort'];
|
|
}));
|
|
foreach ($form as $key => &$item) {
|
|
$item['del'] = 1;
|
|
$member_form[$key]['value'] = $request['customDatas'][$item['pinyin']];
|
|
if ($formSet['base']['form_open'] && !$member_form[$key]['value']) {
|
|
throw new \Exception('自定义字段必填');
|
|
}
|
|
}
|
|
$formSet['form'] = $form;
|
|
Setting::set('shop.form', json_encode($formSet));
|
|
unset($item);
|
|
$member_form = $member_form ? json_encode($member_form) : '';
|
|
|
|
$birthday = $request['birthday'] ? explode('-', $request['birthday']) : [];
|
|
|
|
$member = [
|
|
'realname' => $request['name'] ? : '',
|
|
'gender' => $request['gender'] ? : 0,
|
|
'birthyear' => $birthday ? $birthday[0] : 0,
|
|
'birthmonth' => $birthday ? $birthday[1] : 0,
|
|
'birthday' => $birthday ? $birthday[2] : 0,
|
|
'idcard' => $request['idcard'] ? : '',
|
|
'idcard_addr' => $request['idcard_addr'] ? : '',
|
|
];
|
|
if ($request['nickname']) {
|
|
$member['nickname'] = $request['nickname'];
|
|
}
|
|
if ($request['avatar']) {
|
|
$member['avatar'] = $request['avatar'];
|
|
}
|
|
|
|
//添加yz_member表
|
|
$yz_member = [
|
|
'member_form' => $member_form,
|
|
'province' => $request['address']['province'] ? : '',
|
|
'city' => $request['address']['city']?:'',
|
|
'area' => $request['address']['area']?:'',
|
|
'province_name' => $request['address']['province_name']?:'',
|
|
'city_name' => $request['address']['city_name']?:'',
|
|
'area_name' => $request['address']['area_name']?:'',
|
|
'address' => $request['address']['address']?:'',
|
|
'custom_value' => $custom_value,
|
|
];
|
|
return [$member,$yz_member];
|
|
}
|
|
|
|
public function changeAlipayInfo()
|
|
{
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$yz_member = MemberShopInfo::where('member_id',$member_id)->first();
|
|
$old_data = [
|
|
'alipay' => $yz_member->alipay,
|
|
'alipayname' => $yz_member->alipayname,
|
|
'type' => \YunShop::request()->type
|
|
];
|
|
|
|
$new_data = [
|
|
'alipay' => request()->alipay,
|
|
'alipayname' => request()->alipayname,
|
|
'type' => \YunShop::request()->type
|
|
];
|
|
$this->saveLog($member_id,$old_data,$new_data);
|
|
$yz_member->alipay = request()->alipay;
|
|
$yz_member->alipayname = request()->alipayname;
|
|
if (!$yz_member->save()) {
|
|
return $this->errorJson('保存失败');
|
|
}
|
|
return $this->successJson('保存成功');
|
|
}
|
|
|
|
public function changeWechat()
|
|
{
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$yz_member = MemberShopInfo::where('member_id',$member_id)->first();
|
|
$old_data = [
|
|
'wechat' => $yz_member->wechat,
|
|
'type' => \YunShop::request()->type
|
|
];
|
|
|
|
$new_data = [
|
|
'wechat' => request()->wechat,
|
|
'type' => \YunShop::request()->type
|
|
];
|
|
$this->saveLog($member_id,$old_data,$new_data);
|
|
$yz_member->wechat = request()->wechat;
|
|
if (!$yz_member->save()) {
|
|
return $this->errorJson('保存失败');
|
|
}
|
|
return $this->successJson('保存成功');
|
|
}
|
|
|
|
public function changeEmail()
|
|
{
|
|
$email = request()->email;
|
|
if (!$email) {
|
|
return $this->errorJson('请输入邮箱');
|
|
}
|
|
$member = Member::uniacid()->where('email', $email)->first();
|
|
if ($member) {
|
|
return $this->errorJson('邮箱已绑定过会员,请更换邮箱');
|
|
}
|
|
$member = \app\frontend\models\Member::current();
|
|
$member->email = $email;
|
|
if (!$member->save()) {
|
|
return $this->errorJson('保存失败');
|
|
}
|
|
return $this->successJson('保存成功');
|
|
}
|
|
|
|
private function saveLog($member_id,$old_data,$new_data)
|
|
{
|
|
$data = [
|
|
'uniacid' => \YunShop::app()->uniacid,
|
|
'uid' => $member_id,
|
|
'old_data' => serialize($old_data),
|
|
'new_data' => serialize($new_data),
|
|
'session_id' => session_id()
|
|
];
|
|
MembershipInformationLog::create($data);
|
|
}
|
|
|
|
private function getCaptcha()
|
|
{
|
|
//增加验证码功能
|
|
$status = \Setting::get('shop.sms.status');
|
|
if ($status == 1) {
|
|
$result['captcha'] = app('captcha')->create('default', true);
|
|
$result['captcha']['status'] = $status;
|
|
} else {
|
|
$result['captcha']['status'] = $status;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
public function platformAgreement()
|
|
{
|
|
$shopSet = Setting::get('shop.shop');
|
|
if (!$shopSet['is_agreement']) {
|
|
return $this->errorJson('协议未开启');
|
|
}
|
|
$agreement = RichText::get('shop.agreement');
|
|
$returnData = [
|
|
'title' => $shopSet['agreement_name'] ? : "平台用户协议",
|
|
'content' => $agreement ? : ""
|
|
];
|
|
return $this->successJson('',$returnData);
|
|
}
|
|
|
|
public function registerAgreement()
|
|
{
|
|
//协议
|
|
$protocol = Protocol::uniacid()->first();
|
|
if (!$protocol->status) {
|
|
return $this->errorJson('协议未开启');
|
|
}
|
|
$returnData = [
|
|
'title' => $protocol->title ? : "会员注册协议",
|
|
'content' => $protocol->content ? : ""
|
|
];
|
|
return $this->successJson('',$returnData);
|
|
}
|
|
|
|
public function userNicknameSave()
|
|
{
|
|
try {
|
|
$data['nickname'] = request()->nickname;
|
|
$data['avatar'] = request()->avatar;
|
|
if (!$data['nickname'] || !$data['avatar']) {
|
|
throw new \Exception('昵称和头像必须填写');
|
|
}
|
|
|
|
$member_id = \YunShop::app()->getMemberId();
|
|
$member = Member::find($member_id);
|
|
\Log::debug('---会员更新基本资料昵称头像---',[$data]);
|
|
$member->nickname = $data['nickname'];
|
|
$member->avatar = $data['avatar'];
|
|
if (!$member->save()) {
|
|
throw new \Exception('保存失败');
|
|
}
|
|
if (Cache::has($member->uid . '_member_info')) {
|
|
Cache::forget($member->uid . '_member_info');
|
|
}
|
|
return $this->successJson('保存成功');
|
|
} catch (\Exception $e) {
|
|
return $this->errorJson($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Common: 修改身份证信息
|
|
* Author: wu-hui
|
|
* Time: 2023/10/26 10:48
|
|
* @return \Illuminate\Http\JsonResponse
|
|
* @throws \app\common\exceptions\AppException
|
|
*/
|
|
public function changeAuthentication(){
|
|
// 参数获取
|
|
$uid = \YunShop::app()->getMemberId();
|
|
$idcard = request()->authentication;
|
|
$realname = request()->realname;
|
|
if (!$idcard || !IDCardService::isCard($idcard)) return $this->errorJson('请输入正确的身份证!');
|
|
if (!$realname) return $this->errorJson('请输入真实姓名!');
|
|
// 判断:身份证是否已经绑定
|
|
$member = Member::uniacid()->where('idcard', $idcard)->where('uid','!=',$uid)->first();
|
|
if ($member) return $this->errorJson('身份证已绑定过会员!');
|
|
// 修改用户信息
|
|
$member = \app\frontend\models\Member::current();
|
|
$member->idcard = $idcard;
|
|
$member->realname = $realname;
|
|
if (!$member->save()) return $this->errorJson('保存失败');
|
|
|
|
return $this->successJson('保存成功');
|
|
}
|
|
|
|
|
|
} |