UsersController.php 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <?php
  2. namespace App\Http\Controllers\Wap\Oauth;
  3. use App\Modules\User\Services\WapReaderPageFissionService;
  4. use Illuminate\Http\Request;
  5. use App\Http\Controllers\Controller;
  6. use Cookie;
  7. use App\Modules\User\Services\UserService;
  8. use Log;
  9. use EasyWeChat\Foundation\Application;
  10. use DB;
  11. use Hashids;
  12. class UsersController extends Controller
  13. {
  14. public function user_oauth(Request $request){
  15. $url = $request->input('redirect_url');
  16. $appid = $request->input('gzh_app_id');
  17. $secter = $this->getAppSecretByAppId($appid);
  18. $params['appid'] = $appid;
  19. $params['redirect_url'] = $url;
  20. $options = [
  21. 'app_id'=>$appid,
  22. 'secret'=>$secter,
  23. 'oauth' => [
  24. 'scopes' => ['snsapi_base'],
  25. 'callback' => env('AUTH_CALLBACK_URL').'?'.http_build_query($params),
  26. ],
  27. ];
  28. /*Log::info('official auth-------------');
  29. Log::info($request->all());
  30. Log::info($options);*/
  31. $app = new Application($options);
  32. return $app->oauth->redirect();
  33. }
  34. /**
  35. * 微信授权回掉
  36. * @param Request $request
  37. * @return \Illuminate\Http\RedirectResponse
  38. */
  39. public function wcback(Request $request,$distribution_channel_id)
  40. {
  41. if(!is_numeric($distribution_channel_id)){
  42. $distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
  43. }
  44. $url = Cookie::get('auth_redirect');
  45. $uuid = $request->input('unionid');
  46. $openid = $request->input('openid');
  47. Log::info($request->all());
  48. Log::info('-------------------------' . urldecode($url));
  49. $url_info = parse_url(urldecode($url));
  50. //$distribution_channel_id = str_replace('site', '', explode('.', $url_info['host'])[0]);
  51. Log::info('distribution_channel_id-----------------------------');
  52. Log::info($distribution_channel_id);
  53. $user = UserService::getUserByUnionAndChannelId($openid,$distribution_channel_id);
  54. if(!$user){
  55. //if(in_array($distribution_channel_id,[4404])){
  56. if(array_key_exists($distribution_channel_id,specialChannelAuthInfo())){
  57. $url = urldecode($url);
  58. return redirect()->to($this->joinUrl($url));
  59. }
  60. $user = $this->createUser(
  61. [
  62. 'openid' => $openid,
  63. 'unionid' => $uuid,
  64. 'distribution_channel_id' => $distribution_channel_id,
  65. 'send_order_id' => Cookie::get('send_order_id')
  66. ]
  67. );
  68. // 注册动作
  69. $action_type = 'Register';
  70. $param = [
  71. 'openid' => $openid,
  72. 'uid' => isset($user->id)?$user->id:'0',
  73. ];
  74. UserService::PushUserActionToQueue($action_type,$distribution_channel_id,$param);
  75. }
  76. if($user && !empty($user->id)){
  77. }
  78. Cookie::queue(env('COOKIE_AUTH_WEB_WECHAT'), $user->id, env('U_COOKIE_EXPIRE'), null, null, false, false);
  79. Cookie::queue('reader_share_bid',null);
  80. Cookie::queue('reader_share_cid',null);
  81. return redirect()->to(urldecode($url));
  82. }
  83. /**
  84. * 微信授权回掉
  85. * @param Request $request
  86. * @return \Illuminate\Http\RedirectResponse
  87. */
  88. public function wcbackV2(Request $request,$distribution_channel_id)
  89. {
  90. if(!is_numeric($distribution_channel_id)){
  91. $distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
  92. }
  93. $url = Cookie::get('auth_redirect');
  94. $uuid = $request->input('unionid');
  95. $openid = $request->input('openid');
  96. $user = UserService::getUserByUnionAndChannelId($openid,$distribution_channel_id);
  97. if(!$user){
  98. $user = $this->createUserV2(
  99. [
  100. 'openid' => $openid,
  101. 'unionid' => $uuid,
  102. 'distribution_channel_id' => $distribution_channel_id,
  103. 'send_order_id' => Cookie::get('send_order_id')
  104. ]
  105. );
  106. // 注册动作
  107. $action_type = 'Register';
  108. $param = [
  109. 'openid' => $openid,
  110. 'uid' => isset($user->id)?$user->id:'0',
  111. ];
  112. UserService::PushUserActionToQueue($action_type,$distribution_channel_id,$param);
  113. }
  114. Cookie::queue(env('COOKIE_AUTH_WEB_WECHAT'), $user->id, env('U_COOKIE_EXPIRE'), null, null, false, false);
  115. Cookie::queue('reader_share_bid',null);
  116. Cookie::queue('reader_share_cid',null);
  117. return redirect()->to(urldecode($url));
  118. }
  119. public function wcbackTest(Request $request,$distribution_channel_id)
  120. {
  121. if(!is_numeric($distribution_channel_id)){
  122. $distribution_channel_id = decodeDistributionChannelId($distribution_channel_id);
  123. }
  124. $param = $request->all();
  125. $param['distribution_channel_id'] = $distribution_channel_id;
  126. return $param;
  127. }
  128. private function joinUrl($url){
  129. if(strpos($url,'?') !== false){
  130. $result = $url.'&auth=v2';
  131. }else{
  132. $result = $url.'?auth=v2';
  133. }
  134. return $result;
  135. }
  136. /**
  137. * 授权用户信息
  138. * @param $data
  139. * @return bool
  140. */
  141. protected function createUser($data)
  142. {
  143. if (empty($data['unionid']) || empty($data['openid'])) return false;
  144. /*$user = UserService::getUserByUnionAndChannelId($data['openid'],$data['distribution_channel_id']);
  145. if ($user) return $user;*/
  146. $user = UserService::addUser(
  147. ['openid' => $data['openid'],
  148. 'unionid' => $data['unionid'],
  149. 'distribution_channel_id' => $data['distribution_channel_id'],
  150. 'send_order_id'=>$data['send_order_id'],
  151. 'is_new'=>1
  152. ]);
  153. if($user && !empty($user->id)){
  154. $this->share($user->id,$data['distribution_channel_id']);
  155. }
  156. return $user;
  157. }
  158. protected function createUserV2($data)
  159. {
  160. if (empty($data['unionid']) || empty($data['openid'])) return false;
  161. /*$user = UserService::getUserByUnionAndChannelId($data['openid'],$data['distribution_channel_id']);
  162. if ($user) return $user;*/
  163. $user = UserService::addUser(
  164. ['openid' => $data['openid'],
  165. 'unionid' => $data['unionid'],
  166. 'distribution_channel_id' => $data['distribution_channel_id'],
  167. 'send_order_id'=>$data['send_order_id'],
  168. 'is_new'=>2
  169. ]);
  170. if($user && !empty($user->id)){
  171. $this->share($user->id,$data['distribution_channel_id']);
  172. }
  173. return $user;
  174. }
  175. private function share($uid,$distribution_channel_id){
  176. //阅读器裂变统计
  177. $share_from = Cookie::get('reader_share_bid');
  178. $share_cid = Cookie::get('reader_share_cid');
  179. if($share_from && $uid){
  180. $from_uid = 0;
  181. try{
  182. $share_from_arr = explode('-',$share_from);
  183. $share_bid = $share_from_arr[0];
  184. if(isset($share_from_arr[1])){
  185. $from_uid = $share_from_arr[1];
  186. }
  187. }catch (\Exception $e){
  188. $share_bid = 0;
  189. }
  190. WapReaderPageFissionService::createV2($uid,$share_bid,$distribution_channel_id,'register',$from_uid,$share_cid);
  191. }
  192. }
  193. public function wcCallbackParse(Request $request){
  194. $appid = $request->input('appid');
  195. $secret = $this->getAppSecretByAppId($appid);
  196. $url = $request->input('redirect_url');
  197. if(strpos($url,'zsypay') > -1){
  198. }else{
  199. $url = urldecode($url);
  200. }
  201. $options = [
  202. 'app_id'=>$appid,
  203. 'secret'=>$secret,
  204. ];
  205. $app = new Application($options);
  206. $user = $app->oauth->user();
  207. $user_data = $user['original'];
  208. //Log::info('$user_data is');
  209. //Log::info($user_data);
  210. if(!isset($user_data['unionid'])){
  211. $user_data['unionid'] = $user_data['openid'];
  212. }
  213. if(strpos($url,'?') > -1){
  214. $url = $url.'&openid='.$user_data['openid'].'&unionid='.$user_data['unionid'];
  215. }else{
  216. $url = $url.'?openid='.$user_data['openid'].'&unionid='.$user_data['unionid'];
  217. }
  218. /*if(isset($url_arr['query'])){
  219. $url .= '&openid='.$user_data['openid'].'&unionid='.$user_data['unionid'];
  220. }else{
  221. $url .= '?openid='.$user_data['openid'].'&unionid='.$user_data['unionid'];
  222. }*/
  223. /*Log::info('url is --------------');
  224. Log::info($url);*/
  225. return redirect()->to($url);
  226. }
  227. /**
  228. * 根据apid获取secret
  229. * @param $appId
  230. * @return string
  231. */
  232. private function getAppSecretByAppId($appId){
  233. $info = DB::table('official_setting')->where('appid',$appId)->select('secret')->first();
  234. if($info){
  235. return $info->secret;
  236. }
  237. return '';
  238. }
  239. }