微信生成带参数的时效二维码
常用微信api //配置文件 //other.php 'wechat' => [ 'param' => [ 'appid' => 'wx98cfd0a933247acb', 'secret' => 'e997d5b1ab94ef639333158caf9e1ee6', ], 'api' => [ 'token' => 'https://api.weixin.qq.com/cgi-bin/token', //获取access_token 'user' => 'https://api.weixin.qq.com/cgi-bin/user/info', //获取用户信息 'qrcode' => 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=', //获取ticket 'ticket' => 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=', //获取微信图片 'template_send' =>'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=',//【POST】 推送模板信息 'get_openid' =>'https://api.weixin.qq.com/cgi-bin/user/get?', //获取关注微信号的粉丝openid 'template_id' =>'https://api.weixin.qq.com/cgi-bin/template/api_add_template?', //获得模板ID【POST】 ], //网页授权登录 'oauth' => [ 'url_code' => 'https://open.weixin.qq.com/connect/oauth2/authorize?', //获取网页授权code码 'redirect_url' => 'http://zhangwei.s1.natapp.cc/wechat/Oauth_login', //回调地址 'token_url' => 'https://api.weixin.qq.com/sns/oauth2/access_token', //获取token(不同于服务器和token) 'refresh_token_url'=> 'https://api.weixin.qq.com/sns/oauth2/refresh_token',//获取刷新token 'user_info_url' => 'https://api.weixin.qq.com/sns/userinfo', //拉取用户的微信信息 'url_verify' =>'https://api.weixin.qq.com/sns/auth', //授权用户信息验证 ], ], **************************************************************************************************** use Curl\Curl; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Redis; use App\Models\Wxbind; //生成公众号二维码 public function remind_qrcode() { $param = Config::get('other.wechat');// $params_token = [ 'grant_type' => 'client_credential', 'appid' => $param['param']['appid'], 'secret' => $param['param']['secret'] ]; $key = 'pay:access_token'; $token = Redis::get($key); $curl = new Curl(); // access_token缓存处理,防止反复刷新,获取达到上限值 if(!$tokens){ $url = $param['api']['token']; $token = $curl->post($url, $params_token); !$token->access_token && $this->errorOutput('NO_ACCESS_TOKEN'); $tokens = $token->access_token; $key = 'pay:access_token'; Redis::setex($key,4800,$tokens); } $params_ticket = ['expire_seconds' => 7200, 'action_name' => 'QR_SCENE',]; // $params_ticket['action_info']['scene']['scene_id'] =rand(100000,999999); $url = $param['api']['qrcode'] . $tokens; $ticket = $curl->post($url, json_encode($params_ticket)); //根据access_token获取ticket $ticket = $ticket->ticket; $this->set_code_redis($ticket); //此步骤可以在用户扫码关注公众号时进行绑定账号绑定, if (!$ticket) { $this->errorOutput('NO_TICKET'); } $url = $param['api']['ticket'] . urlencode($ticket); $qrcode = $curl->get($url, []) ? $url : ''; return response()->json(['url' => $qrcode, 'expire_time' => 4800]); } private function set_code_redis($ticket){ $session = new Session; $info=$session->get('userinfo'); $key = 'wechat'.':'.'ticket'.$ticket; Redis::setex($key,300,$info); }