1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- <?php
- namespace app\common\service;
- use app\common\model\User;
- use EasyWeChat\Factory;
- use GuzzleHttp\Client;
- use think\Cache;
- class WxOpenService{
- public static function config(){
- $config = [
- 'app_id' => config('site.wx_open_appid'),
- 'secret' => config('site.wx_open_secret'),
- 'token' => config('site.wx_open_token'),
- 'aes_key' => config('site.wx_open_aeskey'),
- ];
- return $config;
- }
- public static function getBindUrl($key,$e,$callback){
- /*$callback=url('index/wx/callback',[
- 'key'=>$key,
- 'e'=>$e,
- ],true,true);*/
- $redirectUrl=sprintf(
- 'https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect',
- self::config()['app_id'],
- urlencode($callback),
- 'snsapi_login',
- session_create_id(),
- );
- return $redirectUrl;
- }
- public static function bind($key,$e){
- $code=input('code');
- $url=sprintf(
- 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code',
- self::config()['app_id'],
- self::config()['secret'],
- $code
- );
- $res=(new Client())->get($url)->getBody()->getContents();
- $arr=json_decode($res,true);
- if(isset($arr['errcode'])){
- return [false,$arr['errmsg'],$arr];
- }else{
- if($e==2) {
- $user=User::where('mobile',$key)->find();
- if($user){
- if(!$user['openid']){
- $user['openid']=$arr['openid'];
- }
- if(!$user['unionid']){
- $user['unionid']=$arr['unionid']??null;
- }
- $user->save();
- }
- }
- elseif($e==1){
- //Cache::set("wx_open_openid_{$key}", $arr['openid'], 600);
- if(!empty($arr['unionid'])) {
- Cache::set("union_id_{$arr['openid']}", $arr['unionid'], 600);
- }
- }
- return [true,$arr['openid'],$arr];
- }
- }
- }
|