WxOpenService.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. namespace app\common\service;
  3. use app\common\model\User;
  4. use EasyWeChat\Factory;
  5. use GuzzleHttp\Client;
  6. use think\Cache;
  7. class WxOpenService{
  8. public static function config(){
  9. $config = [
  10. 'app_id' => config('site.wx_open_appid'),
  11. 'secret' => config('site.wx_open_secret'),
  12. 'token' => config('site.wx_open_token'),
  13. 'aes_key' => config('site.wx_open_aeskey'),
  14. ];
  15. return $config;
  16. }
  17. public static function getBindUrl($key,$e,$callback){
  18. /*$callback=url('index/wx/callback',[
  19. 'key'=>$key,
  20. 'e'=>$e,
  21. ],true,true);*/
  22. $redirectUrl=sprintf(
  23. 'https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect',
  24. self::config()['app_id'],
  25. urlencode($callback),
  26. 'snsapi_login',
  27. session_create_id(),
  28. );
  29. return $redirectUrl;
  30. }
  31. public static function bind($key,$e){
  32. $code=input('code');
  33. $url=sprintf(
  34. 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code',
  35. self::config()['app_id'],
  36. self::config()['secret'],
  37. $code
  38. );
  39. $res=(new Client())->get($url)->getBody()->getContents();
  40. $arr=json_decode($res,true);
  41. if(isset($arr['errcode'])){
  42. return [false,$arr['errmsg'],$arr];
  43. }else{
  44. if($e==2) {
  45. $user=User::where('mobile',$key)->find();
  46. if($user){
  47. if(!$user['openid']){
  48. $user['openid']=$arr['openid'];
  49. }
  50. if(!$user['unionid']){
  51. $user['unionid']=$arr['unionid']??null;
  52. }
  53. $user->save();
  54. }
  55. }
  56. elseif($e==1){
  57. //Cache::set("wx_open_openid_{$key}", $arr['openid'], 600);
  58. if(!empty($arr['unionid'])) {
  59. Cache::set("union_id_{$arr['openid']}", $arr['unionid'], 600);
  60. }
  61. }
  62. return [true,$arr['openid'],$arr];
  63. }
  64. }
  65. }