WechatAuthorization.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace app\expand\controller;
  3. use app\common\service\HelperService;
  4. use app\common\service\wechat\JsApi_pub;
  5. use think\Config;
  6. /**
  7. * 微信授权接口
  8. * Class WeChat
  9. * @package app\expand\controller
  10. */
  11. class WechatAuthorization extends BaseAuth
  12. {
  13. private $_Account = null;
  14. private $_APPID = null;
  15. private $_APPSECRET = null;
  16. public function __construct(){
  17. parent::__construct();
  18. $this->_Account = $this->getKey($this->_apiCode);
  19. //验证是否具有访问这个接口的权限
  20. if(!isset($this->_Account['Wechat_authorization_appId'])
  21. || !isset($this->_Account['Wechat_authorization_appsecret'])){
  22. HelperService::returnJson(['code'=>400,'msg'=>'WECHAT authorization interface unauthorized access','data'=>[]]);
  23. }
  24. $this->_APPID = $this->_Account['Wechat_authorization_appId'];
  25. $this->_APPSECRET = $this->_Account['Wechat_authorization_appsecret'];
  26. Config::set('WECHAT_APPID',$this->_APPID);
  27. Config::set('WECHAT_APPSECRET',$this->_APPSECRET);
  28. }
  29. /**
  30. * 授权第一步
  31. */
  32. public function authorize(){
  33. $param = $this->_sysParams;
  34. if(!isset($param['notify_url'])){
  35. Header("HTTP/1.1 500 未设置同步跳转地址");
  36. }
  37. session('wx_authorize_notify',$param['notify_url']);
  38. require_once(APP_PATH.'/common/service/wechat/WxPayPubHelper.php');
  39. $JsApi = new JsApi_pub();
  40. //触发微信返回code码
  41. $url = $JsApi->createOauthOpenidAndMoreUrlForCode("http://{$_SERVER['HTTP_HOST']}/expand/WechatAuthorization/authorizeTwo", rand(100,1000));
  42. header("HTTP/1.1 301 Moved Permanently");
  43. header("Location: $url");
  44. exit;
  45. }
  46. /**
  47. * 授权(二、三、四)3步
  48. */
  49. public function authorizeTwo(){
  50. if(!session('wx_authorize_notify')){
  51. Header("HTTP/1.1 500 同步跳转地址丢失");
  52. }
  53. $params = $this->_sysParams;
  54. //第二步得到openid
  55. $code = $params['code'];
  56. $JsApi = new JsApi_pub();
  57. $JsApi->setCode($code);
  58. $openInfo = $JsApi->getOpenidInfo();
  59. //第三步授权
  60. $access_token = isset($openInfo['access_token'])?$openInfo['access_token']:'';
  61. $openid = isset($openInfo['openid'])?$openInfo['openid']:'';
  62. if(empty($access_token) || empty($openid)){
  63. Header("HTTP/1.1 500 获取OPENID失败,请检查配置!");
  64. }
  65. //第四步拉取个人信息
  66. $result = $JsApi->getOauthUserInfo($access_token,$openid);
  67. $url = base64_decode(session('wx_authorize_notify'));
  68. $params = @http_build_query($result);
  69. if(empty($result)){
  70. header("HTTP/1.1 301 Moved Permanently");
  71. header("Location: $url");
  72. }
  73. header("Location: $url?$params");
  74. exit;
  75. }
  76. }