12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php namespace App\Http\Controllers\Api;
- use App\Facades\Servers\WechatWork\ExternalContact;
- use App\Http\Controllers\Api\Api;
- use App\Models\Custom as Model;
- use App\Models\Work\External as WorkExternal;
- use App\Models\Work\User as WorkUser;
- use Vinkla\Hashids\Facades\Hashids;
- use App\Facades\Servers\WechatMini\Mini;
- use App\Http\Requests\Api\WorkBind as Request;
- /**
- * 企微绑定
- *
- * @author 刘相欣
- *
- * */
- class WorkBind extends Api{
- /**
- * 绑定客户 /api/work_bind/custom
- *
- * @param string $code 授权码
- *
- * */
- public function custom(Request $request,Model $Model,WorkExternal $WorkExternal,WorkUser $WorkUser){
- // 接口验签
- // $this->verify_sign();
- // 参数验证
- $request->scene('custom')->validate();
- // 检查登录
- $code = request('code','');
- $id = request('kailin_uid','');
- $workUserId = request('work_userid','');
- // 解析ID
- $id = Hashids::decodeHex($id);
- // 用户不存在
- if( empty($id) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户ID有误']]);
- // // 授权结果
- $userPhone = Mini::getUserPhone($code);
- // // 如果所需字段不存在
- if( isset($userPhone['error']) ) return json_send(['code'=>'error','msg'=>'授权失败','data'=>['error'=>$userPhone['error']]]);
- // // 如果所需字段不存在
- if( empty($userPhone['purePhoneNumber']) ) return json_send(['code'=>'error','msg'=>'未获取到手机号','data'=>['error'=>'未获取到手机号']]);
- // 查询用户
- $external = $WorkExternal->getOne($id);
- // 用户不存在
- if( empty($external) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户不存在']]);
- // 如果手机号已经存在
- if( $external['custom_uid'] ) return json_send(['code'=>'error','msg'=>'用户已绑定','data'=>['error'=>'用户已绑定']]);
- // 获取不包含区号的手机号(因为绑定手机号字段会有国际区号)
- $phone = $userPhone['purePhoneNumber'];
- // 通过手机号查询账号
- $custom = $Model->getOneByPhone($phone);
- // 新用户信息
- $newCustom = ['phone'=>$phone,'external_userid'=>$external['external_userid'],'userpic'=>$external['avatar'],'username'=>$external['name'],'sex'=>$external['gender'],'user_type'=>$external['user_type']];
- // 修改客户信息
- if( $custom ) $Model->edit($custom['uid'],$newCustom);
- // 添加客户信息
- $uid = $custom ? $custom['uid'] : $Model->add($newCustom);
- // 没有手机号对应的账号
- if( !$uid ) return json_send(['code'=>'error','msg'=>'手机号注册失败','data'=>['error'=>'手机号注册失败']]);
- // 查询对应的跟进人员
- $followUser = $WorkUser->getOneByExtUserId($external['external_userid'],$workUserId);
- // 如果没有跟进人员
- if( !$followUser ) $followUser = ['work_userid'=>$workUserId,'external_userid'=>$external['external_userid']];
- // 备注手机号格式转数组并追加新手机号
- $remarkMobiles = push_str_arr($followUser['remark_mobiles'],$phone);
- // 添加备注手机号
- ExternalContact::remark($external['external_userid'],$workUserId,['remark_mobiles'=>$remarkMobiles]);
- // 修改信息
- $result = $WorkExternal->edit($id,['custom_uid'=>$uid]);
- // 绑定失败
- if( !$result ) return json_send(['code'=>'error','msg'=>'绑定失败','data'=>['error'=>'绑定失败']]);
- // 转字符串
- $followUser['remark_mobiles'] = implode(',',$remarkMobiles);
- // 修改或者添加跟进人员客户画像
- empty($followUser['id']) ? $WorkUser->add($followUser) : $WorkUser->edit($followUser['id'],$followUser);
- // 进行登录
- $token = $Model->createLoginAuthcode($uid,time());
- // 返回结果
- return json_send(['code'=>'success','msg'=>'登录成功','data'=>$token]);
- }
- }
|