UserOauthsController.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace App\Http\Controllers\Wechat\Oauth;
  3. use App\Http\Controllers\WechatController;
  4. use App\Http\Requests;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Http\Response;
  7. use EasyWeChat\Foundation\Application;
  8. use WechatOP;
  9. use App\Http\Controllers\Wechat\Api\WechatInnerApisController;
  10. /**
  11. * 授权完,回传openid到redirect_url去
  12. * @author zhoulingjie
  13. *
  14. */
  15. class UserOauthsController extends WechatController
  16. {
  17. public function __construct()
  18. {
  19. // TODO 加密
  20. $this->gzh_app_id = $_REQUEST['gzh_app_id'];
  21. parent::__construct($this->gzh_app_id);
  22. }
  23. /**
  24. * 本平台作为第三方授权
  25. * 授权完后传openid到目标站点设置(cookie不能跨域)
  26. *
  27. */
  28. public function oauth_callback(Request $request)
  29. {
  30. v('oauth_callback_start');
  31. $user = array();
  32. try{
  33. if(env('DEVELOP_MODE') == 'local'){
  34. $user['openid'] = 'oKXfNs_4SvNpMZWOzNdJklWFEn8Y';
  35. }else{
  36. // 获取 OAuth 授权结果用户信息
  37. v('oauth_callback_get_user');
  38. $user = $this->app->oauth->setRequest($request)->user();
  39. v('simple_user_data:');v($user);
  40. $user = $user->original;
  41. $data = array();
  42. $data['appid'] =$this->gzh_app_id;
  43. $data['distribution_channel_id'] = isset($this->official_account['distribution_channel_id'])?$this->official_account['distribution_channel_id']:null;
  44. $data['openid'] = $user['openid'];
  45. // 如果unionid没有取到,则自定义1个
  46. $my_unionid = $data['openid'];
  47. v('my_unionid:'.$my_unionid);
  48. $user['unionid'] = $data['unionid'] = isset($user['unionid'])?$user['unionid']:$my_unionid;
  49. // 去重在后台判断,支付号不需要保存用户
  50. if(isset($this->official_account['official_account_type']) && $this->official_account['official_account_type'] =='third_platform_pay'){
  51. v('oauth_third_platform_pay:'.$data['openid']);
  52. }else{
  53. // 性能考虑,在h5那边保存用户
  54. v('to_save_data');v($data);
  55. // $this->WechatApi->save_login_wx_user($data);
  56. }
  57. }
  58. }
  59. catch(\Exception $e){
  60. v('oauth_callback_ept:'.$e->getMessage());
  61. }
  62. $redirect_url = $request->get('redirect_url');
  63. v('oauth_callback_direct_url0:'.$redirect_url);
  64. $openid = isset($user['openid'])?$user['openid']:'';
  65. $unionid = isset($user['unionid'])?$user['unionid']:'';
  66. if(strpos($redirect_url,'zsypay') > -1){
  67. // v('has zsypay');
  68. }else{
  69. $redirect_url = urldecode($redirect_url);
  70. }
  71. if(strpos($redirect_url,'?') > -1){
  72. $redirect_url = $redirect_url.'&openid='.$openid.'&unionid='.$unionid;
  73. }else{
  74. $redirect_url = $redirect_url.'?openid='.$openid.'&unionid='.$unionid;
  75. }
  76. v('oauth_callback_direct_url:'.$redirect_url);
  77. return redirect($redirect_url);
  78. }
  79. /**
  80. * ydy.wangluogudu.com/user_oauth?gzh_app_id=wx6916de1267c67d50&redirect_url=http%3a%2f%2fydy.wangluogudu.com%2foauth%2fshow_openid%3fgzh_app_id%3dwx6916de1267c67d50
  81. * 获取用户信息
  82. */
  83. public function user_oauth(Request $request)
  84. {
  85. v('third_check_user_auth_start');
  86. $params = array();
  87. $params['gzh_app_id'] = $request->get("gzh_app_id");
  88. $params['redirect_url'] = $request->get("redirect_url");
  89. $this->options['oauth']['callback'] .= '?'.http_build_query($params);
  90. // options改变了,这个app对象必须重新赋值
  91. $this->app = WechatOP::app($this->options);
  92. v($this->options['oauth']['callback']);
  93. return $this->app->oauth->setRequest($request)->redirect();
  94. }
  95. public function show_openid(Request $request)
  96. {
  97. echo '您的openid:'.$request->get('openid');
  98. die();
  99. }
  100. }