123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- <?php
- namespace App\Http\Controllers\Wechat\ThirdWx;
- use App\Http\Models\WechatGroupGzh;
- use App\Http\Controllers\WechatController;
- use App\Http\Requests;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use WechatOP;
- use Illuminate\Support\Facades\Redis;
- use App\Http\Controllers\Wechat\Menu\MenusController;
- use App\Http\Controllers\Wechat\Template\TemplateBasesController;
- class OauthPlatformsController extends WechatController
- {
-
- public function __construct()
- {
- parent::__construct();
- }
-
-
- function oauth_platform(Request $request){
- v('oauth_platform_start');
- $result = array('code'=>1,'msg'=>'','data'=>'');
- $official_account_type = $request->get('official_account_type');
- $distribution_channel_id = $request->get('distribution_channel_id');
- $origin_redirect_url = $request->get('redirect_url');
- $group_nick = $request->get('group_nick');
- $redirect_url = urlencode($origin_redirect_url);
- v($request->all());
- if(empty($official_account_type) || empty($distribution_channel_id) || empty($redirect_url) || empty($group_nick)){
- $result['code'] = 0;
- $result['msg'] = 'invalid param';
- json_echo($result);
- }
-
- $check_result = $this->check_sign_params($request);
- if($check_result['code'] == 0){
- $result['code'] = 0;
- $result['msg'] = $check_result['msg'];
- json_echo($result);
- }
- $_param = $official_account_type.'*'.$distribution_channel_id.'*'.$redirect_url.'*'.$group_nick;
- $this->oauth_platform_callback_url = $this->oauth_platform_callback_base_url.$_param.'/oauth_platform_callback';
- v('oauth_platform_callback_url:'.$this->oauth_platform_callback_url);
- try{
- $response = WechatOP::oauth()->redirect($this->oauth_platform_callback_url);
- v('$response');
-
- $target_url = $response->getTargetUrl();
- v('target_url');v($target_url);
- }catch(\Exception $e){
- v('oauth_callback_ept:'.$e->getMessage());
- $origin_redirect_url .= "&distribution_channel_id=".$distribution_channel_id."&success=0&msg=授权异常:".urlencode($e->getMessage());
- v('ept_redirect_url:'.$origin_redirect_url);
-
- $this->redirect_url($origin_redirect_url);
- exit();
- }
-
- v('oauth_platform_end');
-
- echo "
- <html>
- <head>
- <script LANGUAGE='JavaScript'>
- window.location= '".$target_url."';
- </script>
- </head>
- <body>
- <br><a href='".$target_url."'>若没有自动跳转,点击本链接跳转到授权页</a><br>
- </body>
- </html>
- ";
- }
-
-
- function oauth_platform_callback(Request $request){
- v('oauth_platform_callback');v($request->all());
- $official_account_type = $distribution_channel_id = $group_nick = '';
-
- preg_match('/oauth\/(.*)?\/oauth_platform_callback/i',$_SERVER['REQUEST_URI'],$data);
- if(isset($data[1]) && !empty($data[1])){
- $_param =$data[1];
- $_param_arr = explode('*',$_param);
- $official_account_type = $_param_arr[0];
- $distribution_channel_id = $_param_arr[1];
- $redirect_url = $_param_arr[2];
- $group_nick = $_param_arr[3];
- $redirect_url = urldecode($redirect_url);
- if(strpos($redirect_url,'?') === false){
- $redirect_url .= '?';
- }
- }
-
- v('oauth_platform_callback:official_account_type:'.$official_account_type.' distribution_channel_id:'.$distribution_channel_id.' redirect_url:'.$redirect_url);
-
- $authInfo = WechatOP::oauth()->user();
- $authInfo = objectToArray($authInfo);
-
- $authInfo = current($authInfo);
- v('authInfo');v($authInfo);
-
- $authorization_info = $authInfo['authorization_info'];
- v('authorization_info');v($authorization_info);
-
- $appid = isset($authorization_info['authorizer_appid'])?$authorization_info['authorizer_appid']:'';
-
- $is_service_auth = isset($authInfo['authorizer_info']['service_type_info']['id']) &&
- $authInfo['authorizer_info']['service_type_info']['id'] == 2 &&
- isset($authInfo['authorizer_info']['verify_type_info']['id']) &&
- $authInfo['authorizer_info']['verify_type_info']['id'] == 0;
-
- $is_white_appids = false;
- $white_appids = Redis::smembers('auth_white_appids');
- v('white_appids');v($white_appids);
- if(!empty($appid) && in_array($appid,$white_appids)){
- $is_white_appids = true;
- }
-
- v('oauth_platform_callback:appid:'.$appid.' is_service_auth:'.$is_service_auth.' is_white_appids:'.$is_white_appids);
-
-
- if($is_service_auth || $is_white_appids)
- {
-
- $authorizer_appid = $authorization_info['authorizer_appid'];
- $authorizer_refresh_token = $authorization_info['authorizer_refresh_token'];
- $redis_key = '[wechat_op.common.component_refresh_token.'.$authorizer_appid.']';
- $redis_val = $authorizer_refresh_token;
- v('oauth_platform_callback:redis_key:'.$redis_key.' redis_val:'.$redis_val);
- Redis::Set($redis_key, $authorizer_refresh_token);
- $redis_res = Redis::Get($redis_key);
- v('redis_res:'.$redis_res);
-
-
- $insert_group = array();
- $insert_group['group_nick'] = $group_nick;
- $insert_group['appid'] = $authorizer_appid;
- WechatGroupGzh::save_group_gzh($insert_group);
-
-
- parent::__construct($authorizer_appid);
-
- $origin_distribution_channel_id = isset($this->official_account['distribution_channel_id'])?$this->official_account['distribution_channel_id']:'';
- $origin_appid = isset($this->official_account['appid'])?$this->official_account['appid']:'';
- v('check_official_account,distribution_channel_id:'.$distribution_channel_id.' origin_distribution_channel_id:'.$origin_distribution_channel_id.' origin_appid:'.$origin_appid);
-
-
- if(empty($origin_appid) || ($distribution_channel_id == $origin_distribution_channel_id)){
- v('third_oauth_save_or_update:'.$authorizer_appid.' distribution_channel_id:'.$distribution_channel_id);
-
- $authorizer_info = $authInfo['authorizer_info'];
- v('$authorizer_info');v($authorizer_info);
- $insert_offical_account = array();
- $insert_offical_account['nickname'] = isset($authorizer_info['nick_name'])?$authorizer_info['nick_name']:'';
- $insert_offical_account['head_img'] = isset($authorizer_info['head_img'])?$authorizer_info['head_img']:'';
- $insert_offical_account['service_type_info'] = isset($authorizer_info['service_type_info']['id'])?$authorizer_info['service_type_info']['id']:null;
- $insert_offical_account['verify_type_info'] = isset($authorizer_info['verify_type_info']['id'])?$authorizer_info['verify_type_info']['id']:null;
- $insert_offical_account['name'] = isset($authorizer_info['user_name'])?$authorizer_info['user_name']:'';
- $insert_offical_account['alias'] = isset($authorizer_info['alias'])?$authorizer_info['alias']:'';
- $insert_offical_account['qrcode_url'] = isset($authorizer_info['qrcode_url'])?$authorizer_info['qrcode_url']:'';
- $insert_offical_account['principal_name'] = isset($authorizer_info['principal_name'])?$authorizer_info['principal_name']:'';
- $insert_offical_account['authorizer_refresh_token'] = $authorizer_refresh_token;
- $insert_offical_account['appid'] = $authorizer_appid;
- $insert_offical_account['func_info'] = json_encode($authorization_info['func_info']);
- $insert_offical_account['is_auth'] = 1;
- $insert_offical_account['official_account_type'] = $official_account_type;
- $insert_offical_account['distribution_channel_id'] = $distribution_channel_id;
- v('authorizer_info_insert_data:');v($insert_offical_account);
- $this->WechatApi->save_official_account($insert_offical_account);
-
-
-
- if(!in_array($official_account_type,array('third_platform_default_login','third_platform_pay'))){
- v('auto_set_menu:'.$authorizer_appid);
- $this->auto_set_menu_and_template($authorizer_appid,'all');
- }else{
- v('not_set_menu:'.$authorizer_appid);
- }
-
- $redirect_url .= "&distribution_channel_id=".$distribution_channel_id."&authorizer_appid=".$authorizer_appid."&success=1";
- }
-
- else{
- v('third_oauth_direct_return:'.$authorizer_appid.' distribution_channel_id:'.$distribution_channel_id);
- $redirect_url .= "&distribution_channel_id=".$distribution_channel_id."&success=0&msg=该服务号已经被渠道号:".$origin_distribution_channel_id." 授权,不能再次授权!";
- }
-
- }else{
- $redirect_url .= "&distribution_channel_id=".$distribution_channel_id."&success=0&msg=只支持认证的服务号!";
- }
- v('redirect_url:'.$redirect_url);
-
-
- $this->redirect_url($redirect_url);
- }
-
- function auto_set_menu_and_template($authorizer_appid='',$set_type='all'){
- if(empty($authorizer_appid)){
- v('auto_set_menu_and_template_param_null:'.$authorizer_appid);
- return false;
- }
-
- parent::__construct($authorizer_appid);
-
- if($set_type == 'all'){
- $menu = new MenusController($this->param);
- $menu->set_menu();
-
- $template = new TemplateBasesController($this->param);
- $template->auto_set_dustry_templates();
- }elseif($set_type == 'menu'){
- $menu = new MenusController($this->param);
- $menu->set_menu();
- }elseif($set_type == 'template'){
- $template = new TemplateBasesController($this->param);
- $template->auto_set_dustry_templates();
- }else{
- v('auto_set_menu_and_template_invalid_set_type:'.$authorizer_appid);
- }
- }
-
-
- function auto_set_menu_and_template_test(Request $request){
-
- $result = array('code'=>1,'msg'=>'','data'=>'');
- $authorizer_appid = $request->get('authorizer_appid');
- $set_type = $request->get('set_type');
- if(empty($authorizer_appid) || empty($set_type)){
- $result['code'] = 0;
- $result['msg'] = 'invalid param';
- json_echo($result);
- }
-
- $check_result = $this->check_sign_params($request);
- if($check_result['code'] == 0){
- $result['code'] = 0;
- $result['msg'] = $check_result['msg'];
- json_echo($result);
- }
- $this->auto_set_menu_and_template($authorizer_appid,$set_type);
- }
-
- }
|