WechatApi.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: dingran
  5. * Date: 2019/10/17
  6. * Time: 下午3:19
  7. */
  8. namespace app\common\services\api;
  9. class WechatApi
  10. {
  11. /**
  12. * 用户验证授权 api
  13. *
  14. * snsapi_userinfo
  15. *
  16. * @param $appId
  17. * @param $url
  18. * @param $state
  19. * @return string
  20. */
  21. public function _getAuthUrl($appId, $url, $state)
  22. {
  23. return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appId . "&redirect_uri=" . urlencode($url) . "&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";
  24. }
  25. /**
  26. *
  27. * 静默获取用户信息
  28. *
  29. * snsapi_base
  30. *
  31. * @param $appId
  32. * @param $url
  33. * @param $state
  34. * @return string
  35. */
  36. public function _getAuthBaseUrl($appId, $url, $state)
  37. {
  38. return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $appId . "&redirect_uri=" . urlencode($url) . "&response_type=code&scope=snsapi_base&state={$state}#wechat_redirect";
  39. }
  40. /**
  41. * 获取token api
  42. *
  43. * @param $appId
  44. * @param $appSecret
  45. * @param $code
  46. * @return string
  47. */
  48. public function _getTokenUrl($appId, $appSecret, $code)
  49. {
  50. return "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appId . "&secret=" . $appSecret . "&code=" . $code . "&grant_type=authorization_code";
  51. }
  52. /**
  53. * 获取用户信息 api
  54. *
  55. * 无需关注
  56. *
  57. * @param $accesstoken
  58. * @param $openid
  59. * @return string
  60. */
  61. public function _getUserInfoUrl($accesstoken, $openid)
  62. {
  63. return "https://api.weixin.qq.com/sns/userinfo?access_token={$accesstoken}&openid={$openid}&lang=zh_CN";
  64. }
  65. /**
  66. * 获取全局ACCESS TOKEN
  67. * @return string
  68. */
  69. public function _getAccessToken($appId, $appSecret)
  70. {
  71. return 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appId . '&secret=' . $appSecret;
  72. }
  73. /**
  74. * 获取用户信息
  75. *
  76. * 需要关注
  77. *
  78. * @param $accesstoken
  79. * @param $openid
  80. * @return string
  81. */
  82. public function _getInfo($accesstoken, $openid)
  83. {
  84. return 'https://api.weixin.qq.com/cgi-bin/user/info?access_token=' . $accesstoken . '&openid=' . $openid;
  85. }
  86. /**
  87. * 验证account_token
  88. *
  89. * @param $accesstoken
  90. * @param $openid
  91. *
  92. * @return string
  93. */
  94. public function _tokenAuth($accesstoken, $openid)
  95. {
  96. return 'https://api.weixin.qq.com/sns/auth?access_token=' . $accesstoken . '&openid=' . $openid;
  97. }
  98. public function _refreshAuth($appid, $refreshtoken)
  99. {
  100. return 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' . $appid . '&grant_type=refresh_token&refresh_token=' . $refreshtoken;
  101. }
  102. public function baseUserInfo($appId, $appSecret, $openid)
  103. {
  104. $global_access_token_url = $this->_getAccessToken($appId, $appSecret);
  105. $global_token = \Curl::to($global_access_token_url)
  106. ->asJsonResponse(true)
  107. ->get();
  108. $global_userinfo_url = $this->_getInfo($global_token['access_token'], $openid);
  109. $user_info = \Curl::to($global_userinfo_url)
  110. ->asJsonResponse(true)
  111. ->get();
  112. return $user_info;
  113. }
  114. public function authUserInfo($accessToken, $openid)
  115. {
  116. $userinfo_url = $this->_getUserInfoUrl($accessToken, $openid);
  117. $user_info = \Curl::to($userinfo_url)
  118. ->asJsonResponse(true)
  119. ->get();
  120. return $user_info;
  121. }
  122. }