WorkBind.php 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php namespace App\Http\Controllers\Api;
  2. use App\Facades\Servers\WechatWork\ExternalContact;
  3. use App\Http\Controllers\Api\Api;
  4. use App\Models\Custom as Model;
  5. use App\Models\Work\External as WorkExternal;
  6. use App\Models\Work\User as WorkUser;
  7. use Vinkla\Hashids\Facades\Hashids;
  8. use App\Facades\Servers\WechatMini\Mini;
  9. use App\Http\Requests\Api\WorkBind as Request;
  10. /**
  11. * 企微绑定
  12. *
  13. * @author 刘相欣
  14. *
  15. * */
  16. class WorkBind extends Api{
  17. /**
  18. * 绑定客户 /api/work_bind/custom
  19. *
  20. * @param string $code 授权码
  21. *
  22. * */
  23. public function custom(Request $request,Model $Model,WorkExternal $WorkExternal,WorkUser $WorkUser){
  24. // 接口验签
  25. // $this->verify_sign();
  26. // 参数验证
  27. $request->scene('custom')->validate();
  28. // 检查登录
  29. $code = request('code','');
  30. $id = request('kailin_uid','');
  31. $workUserId = request('work_userid','');
  32. // 解析ID
  33. $id = Hashids::decodeHex($id);
  34. // 用户不存在
  35. if( empty($id) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户ID有误']]);
  36. // // 授权结果
  37. $userPhone = Mini::getUserPhone($code);
  38. // // 如果所需字段不存在
  39. if( isset($userPhone['error']) ) return json_send(['code'=>'error','msg'=>'授权失败','data'=>['error'=>$userPhone['error']]]);
  40. // // 如果所需字段不存在
  41. if( empty($userPhone['purePhoneNumber']) ) return json_send(['code'=>'error','msg'=>'未获取到手机号','data'=>['error'=>'未获取到手机号']]);
  42. // 查询用户
  43. $external = $WorkExternal->getOne($id);
  44. // 用户不存在
  45. if( empty($external) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户不存在']]);
  46. // 如果手机号已经存在
  47. if( $external['custom_uid'] ) return json_send(['code'=>'error','msg'=>'用户已绑定','data'=>['error'=>'用户已绑定']]);
  48. // 获取不包含区号的手机号(因为绑定手机号字段会有国际区号)
  49. $phone = $userPhone['purePhoneNumber'];
  50. // 通过手机号查询账号
  51. $custom = $Model->getOneByPhone($phone);
  52. // 新用户信息
  53. $newCustom = ['phone'=>$phone,'external_userid'=>$external['external_userid'],'userpic'=>$external['avatar'],'username'=>$external['name'],'sex'=>$external['gender'],'user_type'=>$external['user_type']];
  54. // 修改客户信息
  55. if( $custom ) $Model->edit($custom['uid'],$newCustom);
  56. // 添加客户信息
  57. $uid = $custom ? $custom['uid'] : $Model->add($newCustom);
  58. // 没有手机号对应的账号
  59. if( !$uid ) return json_send(['code'=>'error','msg'=>'手机号注册失败','data'=>['error'=>'手机号注册失败']]);
  60. // 查询对应的跟进人员
  61. $followUser = $WorkUser->getOneByExtUserId($external['external_userid'],$workUserId);
  62. // 如果没有跟进人员
  63. if( !$followUser ) $followUser = ['work_userid'=>$workUserId,'external_userid'=>$external['external_userid']];
  64. // 备注手机号格式转数组并追加新手机号
  65. $remarkMobiles = push_str_arr($followUser['remark_mobiles'],$phone);
  66. // 添加备注手机号
  67. ExternalContact::remark($external['external_userid'],$workUserId,['remark_mobiles'=>$remarkMobiles]);
  68. // 修改信息
  69. $result = $WorkExternal->edit($id,['custom_uid'=>$uid]);
  70. // 绑定失败
  71. if( !$result ) return json_send(['code'=>'error','msg'=>'绑定失败','data'=>['error'=>'绑定失败']]);
  72. // 转字符串
  73. $followUser['remark_mobiles'] = implode(',',$remarkMobiles);
  74. // 修改或者添加跟进人员客户画像
  75. empty($followUser['id']) ? $WorkUser->add($followUser) : $WorkUser->edit($followUser['id'],$followUser);
  76. // 进行登录
  77. $token = $Model->createLoginAuthcode($uid,time());
  78. // 返回结果
  79. return json_send(['code'=>'success','msg'=>'登录成功','data'=>$token]);
  80. }
  81. }