WxService.php 2.1 KB

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