WeixinService.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace App\Service\Weixin;
  3. use App\Service\Service;
  4. use Illuminate\Support\Facades\Redis;
  5. class WeixinService extends Service
  6. {
  7. const APPID = '';
  8. const APPSECRET = '';
  9. const ACCESS_URL = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s';
  10. const OPENID = '';
  11. const TOKEN = '';
  12. const KEY = 'weixingzy';
  13. public function getToken(){
  14. $token_key = self::KEY.'_'.'token';
  15. $token = Redis::get($token_key);
  16. if(! $token){
  17. $url = sprintf(self::ACCESS_URL,self::APPID,self::APPSECRET);
  18. $res = $this->curlOpen($url);
  19. $res = json_decode($res,true);
  20. if(isset($res['errmsg'])) return [false,$res['errmsg']];
  21. if(!isset($res['access_token'])) return [false,'request error'];
  22. $token = $res['access_token'];
  23. $expire_time = $res['expires_in']-300;
  24. Redis::set($token_key,$token);
  25. Redis::expire($token_key, $expire_time);
  26. return [true,$token];
  27. }
  28. return [true,$token];
  29. }
  30. public function getOpenid($data){
  31. if(empty($data['code'])) return [false, 'code不能为空'];
  32. $code = $data['code'];
  33. $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code';
  34. $url = sprintf($url,self::APPID,self::APPSECRET,$code);
  35. $res = $this->curlOpen($url);
  36. $res = json_decode($res,true);
  37. if(!isset($res['openid'])) return [false,$res['errmsg']??'request error'];
  38. $openid = $res['openid'];
  39. return [true,['openid' => $openid]];
  40. }
  41. public function setWebHook($data){
  42. $uri = isset($data['uri']) ? $data['uri'] : '';
  43. $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
  44. $param = isset($data['param']) ? $data['param'] : '';
  45. $redirect_uri = urlencode('https://t9api.qingyaokeji.com/wxapi/getUnionid?uri='.$uri.'&param='.$param);
  46. $url = sprintf($url,self::APPID,$redirect_uri);
  47. header("Location:".$url);exit;
  48. echo 'ok';die;
  49. }
  50. public function getUnionid($data){
  51. if(isset($data['code'])) {
  52. list($status,$openid) = $this->getOpenid($data);
  53. if(!$status) return [false,$openid];
  54. $uri = $data['uri'];
  55. $openid = $openid['openid'];
  56. $param = isset($data['param']) ? $data['param'] : '';
  57. $url = 'https://t9.qingyaokeji.com/#/wxGet?uri='.$uri.'&openid='.$openid.'&param='.$param;
  58. header('Location:'.$url);exit();
  59. }
  60. }
  61. }