WxService.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Service\Wx;
  3. use Illuminate\Support\Facades\Redis;
  4. class WxService extends Service
  5. {
  6. // public $appid = 'wx4e1324c600df37a6';
  7. // public $secret = '72f8c912d462b0f4ff46cbedac0c80bf';
  8. public $appid = 'wx4e1324c600df37a6';
  9. public $secret = 'cec65770bf168a57dc8e5a012d4c9537';
  10. public function getOpenid($code){
  11. $appid = $this->appid;
  12. $secret = $this->secret;
  13. // $code = '0b1tFv100Sm91Q1kko0004vZGu0tFv12';
  14. $url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
  15. list($status,$res) = $this->wx_return($url);
  16. if($status) return [true,$res['openid']];
  17. else return [false,$res];
  18. }
  19. public function getToken(){
  20. $token_key = $this->appid.'_wx_token';
  21. $token = Redis::get($token_key);
  22. if(!empty($token)){
  23. return [true,$token];
  24. }
  25. $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->secret;
  26. list($status,$res) = $this->wx_return($url);
  27. if($status) {
  28. Redis::setex($token_key,7100,$res['access_token']);
  29. return [true,$res['access_token']];
  30. }
  31. else return [false,$res];
  32. }
  33. public function getMobile($code){
  34. list($status,$token) = $this->getToken();
  35. $url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$token;
  36. $post = [
  37. 'post'=>json_encode([
  38. 'code' => $code,
  39. ]),
  40. ];
  41. $post['header'][] = "Content-Type:application/json";
  42. list($status,$res) = $this->wx_return($url,$post);
  43. if($status) return [true,$res['phone_info']['phoneNumber']];
  44. else return [false,$res];
  45. }
  46. private function wx_return($url,$data=[]){
  47. $res = $this->curlOpen($url,$data);
  48. $res = json_decode($res,true);
  49. if(isset($res['errcode'])&&$res['errcode'] !== 0) return [false,$res['errmsg']];
  50. return [true,$res];
  51. }
  52. }