一、curl请求
$ch = curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,2);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);if($requestType=='post'){curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$Data);}$res = curl_exec($ch);if($returnType=='stood'){return $res;}if(curl_error($ch)){var_dump(curl_error($ch));curl_close($ch);}else{curl_close($ch);return json_decode($res,true);}
二、获取access_token
$url = 'https://api./cgi-bin/token?grant_type=client_credential&appid='.self::$config['appid'].'&secret='.self::$config['appsecret'];$this->sendRequest($url);
三、生成带参二维码、获取二维码路径
$url = 'https://api./cgi-bin/qrcode/create?access_token='.$this->getToken();if ($type == 1){//永久二维码$data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": "'.$user_id.'"}}}';}else{$data = '{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene_id": "'.$user_id.'"}}}';}$res = $this->sendRequest($url,'post','json',$data);if (empty($res['ticket'])){return false;}return 'https://mp./cgi-bin/showqrcode?ticket='.urlencode($res['ticket']);
四、 保存二维码
protected function down_load_qrcode($url,$user_id){if (empty($url) || empty($user_id)) return false;$filename = "{$user_id}.jpg";ob_start();readfile($url);$img = ob_get_contents();ob_end_clean();$file = './upload/qrcode/' . $filename;$fp2 = fopen($file, "a");if (fwrite($fp2, $img) === false) {return jsonData(1001,'生成二维码失败');}fclose($fp2);return '/upload/qrcode/' . $filename;}
五、公众平台配置
六、扫码之后,响应事件
if($subscribe){$data = ['openid' => $postObj->FromUserName,'scene_id' => $postObj->EventKey//二维码中附带的user_id];$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "xxx/check_account");//调用接口、修改相应信息curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);$output = curl_exec($ch);curl_close($ch);}
七、检测是否关注公众号
$url = "https://api./cgi-bin/user/info?access_token={$this->getToken()}&openid=$openid";$subscribe = $this->sendRequest($url);$res = $subscribe['subscribe'];return $res;