WorkBind.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. /**
  82. * 绑定客户 /api/work_bind/user
  83. *
  84. * @param string $code 授权码
  85. *
  86. * */
  87. public function user(Request $request,Model $Model,WorkExternal $WorkExternal,WorkUser $WorkUser){
  88. // 接口验签
  89. // $this->verify_sign();
  90. // 参数验证
  91. $request->scene('user')->validate();
  92. // 检查登录
  93. $uid = $this->checkLogin();
  94. $id = request('kailin_uid','');
  95. $workUserId = request('work_userid','');
  96. // 解析ID
  97. $id = Hashids::decodeHex($id);
  98. // 用户不存在
  99. if( empty($id) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户ID有误']]);
  100. // 通过手机号查询账号
  101. $custom = $Model->getOne($uid);
  102. // 用户不存在
  103. if( empty($custom) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'未查询到用户信息']]);
  104. // 查询用户
  105. $external = $WorkExternal->getOne($id);
  106. // 用户不存在
  107. if( empty($external) ) return json_send(['code'=>'error','msg'=>'用户不存在','data'=>['error'=>'用户不存在']]);
  108. // 如果手机号已经存在
  109. if( $external['custom_uid'] ) return json_send(['code'=>'success','msg'=>'用户已绑定','data'=>['uid'=>$custom['uid']]]);
  110. // 获取不包含区号的手机号(因为绑定手机号字段会有国际区号)
  111. $phone = $custom['phone'];
  112. // 新用户信息
  113. $newCustom = ['phone'=>$phone,'external_userid'=>$external['external_userid'],'userpic'=>$external['avatar'],'username'=>$external['name'],'sex'=>$external['gender'],'user_type'=>$external['user_type']];
  114. // 修改客户信息
  115. if( $custom ) $Model->edit($custom['uid'],$newCustom);
  116. // 添加客户信息
  117. $uid = $custom ? $custom['uid'] : $Model->add($newCustom);
  118. // 没有手机号对应的账号
  119. if( !$uid ) return json_send(['code'=>'error','msg'=>'手机号注册失败','data'=>['error'=>'手机号注册失败']]);
  120. // 查询对应的跟进人员
  121. $followUser = $WorkUser->getOneByExtUserId($external['external_userid'],$workUserId);
  122. // 如果没有跟进人员
  123. if( !$followUser ) $followUser = ['work_userid'=>$workUserId,'external_userid'=>$external['external_userid']];
  124. // 备注手机号格式转数组并追加新手机号
  125. $remarkMobiles = push_str_arr($followUser['remark_mobiles'],$phone);
  126. // 添加备注手机号
  127. ExternalContact::remark($external['external_userid'],$workUserId,['remark_mobiles'=>$remarkMobiles]);
  128. // 修改信息
  129. $result = $WorkExternal->edit($id,['custom_uid'=>$uid]);
  130. // 绑定失败
  131. if( !$result ) return json_send(['code'=>'error','msg'=>'绑定失败','data'=>['error'=>'绑定失败']]);
  132. // 转字符串
  133. $followUser['remark_mobiles'] = implode(',',$remarkMobiles);
  134. // 修改或者添加跟进人员客户画像
  135. empty($followUser['id']) ? $WorkUser->add($followUser) : $WorkUser->edit($followUser['id'],$followUser);
  136. // 返回结果
  137. return json_send(['code'=>'success','msg'=>'登录成功','data'=>['uid'=>$uid]]);
  138. }
  139. }