Jscode.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. namespace addons\qingdongams\library\wx;
  3. class Jscode {
  4. private $appId;
  5. private $appSecret;
  6. public function __construct($appId, $appSecret) {
  7. $this->appId = $appId;
  8. $this->appSecret = $appSecret;
  9. }
  10. private function getAccessToken() {
  11. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
  12. $res = json_decode($this->httpGet($url));
  13. $access_token = $res->access_token;
  14. return $access_token;
  15. }
  16. /**
  17. * 获取用户的openid
  18. * @param string $openid [description]
  19. * @return [type] [description]
  20. */
  21. public function baseAuth()
  22. {
  23. if (!isset($_GET['code'])){
  24. //触发微信返回code码
  25. $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING']);
  26. $url = $this->createCode($baseUrl);
  27. Header("Location: $url");
  28. exit();
  29. }
  30. //2.静默授权,获取code
  31. //页面跳转至redirect_uri/?code=CODE&state=STATE
  32. $code = $_GET['code'];
  33. //3.通过code换取网页授权access_token和openid
  34. $curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->appId . '&secret=' . $this->appSecret . '&code=' . $code . '&grant_type=authorization_code';
  35. $content = $this->httpGet($curl);
  36. $result = json_decode($content, true);
  37. return $result;
  38. }
  39. //关注公众号
  40. public function wxinterest(){
  41. $wxInfo = $this->baseAuth();
  42. $accessToken = $this->getAccessToken();
  43. $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$accessToken.'&openid='.$wxInfo['openid'];
  44. $res = json_decode($this->httpGet($url));
  45. return $res;
  46. }
  47. //判断是否关注公众号
  48. public function isWx(){
  49. $gzxx = $this->wxinterest();
  50. $gzxx = $gzxx->subscribe;
  51. return $gzxx;
  52. }
  53. private function httpGet($url) {
  54. $curl = curl_init();
  55. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  56. curl_setopt($curl, CURLOPT_TIMEOUT, 500);
  57. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  58. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  59. curl_setopt($curl, CURLOPT_URL, $url);
  60. $res = curl_exec($curl);
  61. curl_close($curl);
  62. return $res;
  63. }
  64. /**
  65. *
  66. * 拼接签名字符串
  67. * @param array $urlObj
  68. *
  69. * @return 返回已经拼接好的字符串
  70. */
  71. private function ToUrlParams($urlObj)
  72. {
  73. $buff = "";
  74. foreach ($urlObj as $k => $v)
  75. {
  76. if($k != "sign"){
  77. $buff .= $k . "=" . $v . "&";
  78. }
  79. }
  80. $buff = trim($buff, "&");
  81. return $buff;
  82. }
  83. //获取code
  84. public function createCode($url){
  85. $urlObj["appid"] = $this->appId;
  86. $urlObj["redirect_uri"] = "$url";
  87. $urlObj["response_type"] = "code";
  88. $urlObj["scope"] = "snsapi_userinfo";
  89. $urlObj["state"] = "STATE"."#wechat_redirect";
  90. $bizString = $this->ToUrlParams($urlObj);
  91. return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
  92. }
  93. }