逻辑:
1.首先,您须要登录微信"大众平台,并设置好开拓基本配置。在基本配置下,查看并记录下您的AppID和AppSecret。您还须要设置好回调URL和Token。把稳,如果您利用的是测试账号,可能须要填写一个临时AppID。
2.利用微信"大众年夜众平台供应的接口,您可以天生一个带有自定义唯一参数的临时二维码。这个参数可以在后续的步骤中利用。
3.用户利用微信扫描您天生的二维码,并关注您的公众号。此时,微信服务器会将一些数据(包括自定义参数和OpenID)返回给您的做事器。
4.您的做事器利用OpenID向微信服务器要求用户信息。如果您的"大众号绑定了微信开放平台,还可以获取到用户的UnionID(若绑定了微信开放平台,则有此参数)。将返回的用户信息存储到数据库中,用于登录。
5.当用户再次访问您的网站时,您的做事器会检讨数据库中是否存在该用户的记录。如果存在,您可以利用存储的用户信息自动登任命户。
准备事情:登录微信公众平台,在基本配置下,查看appid和设置appsecret、回调URL、token,
开拓者工具页面
测试号管理页面
下面直接贴上
Class WeChat{ protected $appid; protected $secret; protected $accessToken; function __construct(){ $this->appid = 34;xxx"; $this->secret = "xxx"; $this->accessToken = $this->getAccessToken(); } / 获取access_token token的有效韶光为2小时,这里可以做下处理,提高效率不用每次都去获取, 将token存储到缓存中,每2小时更新一下,然后从缓存取即可 @return / private function getAccessToken(){ url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secret; $res = json_decode($this->httpRequest($url),true); return $res['access_token']; } / POST或GET要求 @url 要求url @data POST数据 @return / private function httpRequest($url, $data = ""){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if(!empty($data)){ //判断是否为POST要求 curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; } / 获取openID和unionId @code 微信授权登录返回的code @return / public function getOpenIdOrUnionId($code){ $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->secret."&code=".$code."&grant_type=authorization_code"; $data = $this->httpRequest($url); return $data; } / 通过openId获取用户信息 @openId @return / public function getUserInfo($openId){ $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->accessToken."&openid=".$openId."&lang=zh_CN"; $data = $this->httpRequest($url); return $data; } / 发送模板短信 @data 要求数据 @return / public function sendTemplateMessage($data = ""){ $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->accessToken; $result = $this->httpRequest($url, $data); return $result; } / 天生带参数的二维码 @scene_id 自定义参数(整型) @return / public function getQrcode($scene_id){ $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->accessToken; $data = array( "expire_seconds" => 3600, //二维码的有效韶光(1小时) "action_name" => "QR_SCENE", //临时的整型参数值 "action_info" => array("scene" => array("scene_id" => $scene_id)) ); $result = $this->httpRequest($url, json_encode($data)); return $result; } / 天生带参数的二维码 @scene_str 自定义参数(字符串) @return / public function getQrcodeByStr($scene_str){ $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$this->accessToken; $data = array( "expire_seconds" => 3600, //二维码的有效韶光(1小时) "action_name" => "QR_STR_SCENE", //临时的字符串参数值 "action_info" => array("scene" => array("scene_str" => $scene_str)) ); $result = $this->httpRequest($url, json_encode($data)); return $result; } / 换取二维码 @ticket @return / public function generateQrcode($ticket){ return "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket; } / 回调函数 / public function callback(){ $callbackXml = file_get_contents('php://input'); //获取返回的xml //下面是返回的xml //<xml><ToUserName><![CDATA[gh_f40ce214c871]]></ToUserName> //微信"大众年夜众号的微旗子暗记 //<FromUserName><![CDATA[oJxRO1Y6NgWJ9gMDyE3Lw6YUNdBs]]></FromUserName> //openid用于获取用户信息,做登录利用 //<CreateTime>1699336505</CreateTime> //回调韶光 //<MsgType><![CDATA[event]]></MsgType> //<Event><![CDATA[SCAN]]></Event> //<EventKey><![CDATA[vipshare1699336505]]></EventKey> //上面自定义的参数(scene_str) //<Ticket><![gQF68TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyR0Z6bFFRZy1lOEMxMDAwMGcwM2MAAgSvq0llAwQAAAAA]]></Ticket> //换取二维码的ticket //</xml> $data = json_decode(json_encode(simplexml_load_string($callbackXml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); //将返回的xml转为数组 if(count($data)){ $userInfo = $this->getUserInfo($data['FromUserName']); //获取用户信息 //这里把返回的数据写入数据库(注:务必将“EventKey”也存到数据表中,后面检测登录需用到此唯一值查询记录) //用于前台做检测该用户扫码之后是否有关注公众年夜众号,关注了就自动登录网站 //事理:前台通过自定义的参数(最好设成值唯一)查询数据标是否有此记录,若有则登录。 } }}
天生带参数的二维码index.php:
<?php header("Content-type:text/html;charset=utf-8"); require_once('WeChat.class.php'); $WeChat = new WeChat(); $scene_str = "vipshare1699336505"; //"vipshare" . time(); //这里建议设唯一值(如:随机字符串+韶光戳) $result = json_decode($WeChat->getQrcodeByStr($scene_str), true); $qrcode = $WeChat->generateQrcode($result['ticket']); //天生二维码 echo "自定义参数:".$scene_str; echo "<br/><img src="$qrcode">";?><script type="text/javascript" src="http://www.vipshare8.com/statics/js/jquery.min.js"></script><script type="text/javascript"> setInterval("checkLogin()", 2000); //每2秒发送一次要求 function checkLogin(){ $.post("checkLogin.php", {scene_str:"<?=$scene_str?>"}, function(data){ if(data){ //做逻辑判断,登录跳转 } },"Json"); }</script>
回调函数 callback.php:
// 调取回调函数require_once('WeChat.class.php');$WeChat = new WeChat();$result = $WeChat->callback();
检测是否登录 checkLogin.php:
if(isset($_POST['scene_str']) && $_POST['scene_str']){ //根据scene_str查询数据库,是否有此记录 echo "true";}else{ echo "false";}
请把稳,以上步骤仅供应了一个基本的实现思路。详细的实现细节可能因您的网站架构和技能选择而有所不同。此外,为了保护用户隐私和安全,您须要遵守干系法律法规和微信公众平台的开拓规范。同时,为了确保功能的正常运行和用户体验,您还须要进行充分的测试和优化。