欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信扫码登录注册实现

程序员文章站 2022-03-06 10:09:11
扫码登录是当下最流行也是最简便的登录方式。这里我用微信公众号来演示扫码登录的流程。 需要信息: 1.公众号的AppId 和公众号密钥AppSecret 2.公众号获取access_toke public function getToken(){ $access_token = S("gzh_acce ......

扫码登录是当下最流行也是最简便的登录方式。这里我用微信公众号来演示扫码登录的流程。

微信扫码登录注册实现

需要信息:

1.公众号的AppId 和公众号密钥AppSecret

2.公众号获取access_toke

public function getToken(){

$access_token = S("gzh_access_token");
if(!$access_token){
$appid = C('AppId');
$secret = C('AppSecret);
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$token = json_decode(curl_request($url,"get"),1);

S("gzh_access_token",$token["access_token"],7100);
$access_token = S("gzh_access_token");
}

return $access_token;
}

3.获取临时二维码

public function getcode($access_token,$str){

//查询字符串是否唯一
$model = D("merchant");
$res = $model->where("str='".$str."'")->find();

$str = $this->parameter();

if($res){
$this->getcode($access_token);
}else{
//生成临时带参数二维码
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token;
$data["expire_seconds"] = 7200;
$data["action_name"] = "QR_STR_SCENE";
$data["action_info"]["scene"]["scene_str"] = $str;

$ticket = json_decode(curl_request($url,"post",json_encode($data)),1);

$qrcoderul = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket["ticket"];
$qrcode = curl_request($qrcoderul,"get");

return $qrcode;
}
}

//二维码参数
public function parameter(){
$str = $_SESSION["str"];
if(strlen($str)<5){
//生成随机字符串
$str = md5(rand(0,999999)."qiao.16166.org");
$_SESSION["str"] = $str;
}

return $str;
}

 前端代码:

<body style="margin: 0px;padding: 0px">
<div style="width: 100%;height: 100vh;background-image: url('https://public.16166.org/Skin/items/qbl/qbl.jpg');background-repeat: no-repeat;background-size: 100% 100%;overflow: hidden">
<div style="background-color: white;margin-left: auto;margin-right: auto;width: 300px;height:auto;;margin-top:13vh;padding-top: 25px;padding-bottom: 25px;border-radius: 6px">
<p style="margin: 0px;text-align: center"><strong>微信扫码登陆</strong></p>
<div style="width: 300px;text-align: center;margin-top: 10px;margin-bottom: 10px">
{$img}
</div>
<p id="strstate" style="margin: 0px;text-align: center;font-size: smaller">使用微信扫一扫登录或注册</p>
</div>
<input type="hidden" id="str" value="{$str}" />
</div>

<script type="text/javascript" >
$(function (){
checklogin();
});

function checklogin(){
var url = "{:U('Sjmanager/Login/checklogin')}";
var str = $("#str").val();
var postData = "str="+str;
$.post(url,postData,function(jsons){
console.log(jsons);
if(jsons.state== "login"){
$("#strstate").html("登录成功,请稍后...");
setTimeout(function(){
window.location = "{:U('Merchant/index/index')}";
},3000);
}

if(jsons.state=="register"){
$("#strstate").html("扫码成功,请稍后...");
setTimeout(function(){
window.location = "{:U('Sjmanager/Login/register')}";
},3000);
}

if(jsons.state=="no"){
$("#strstate").html("扫码成功");
setTimeout(function(){
alert("您的信息审核未通过,请联系管理员");
},3000);
}

else{
setTimeout(function(){
checklogin();
},10000);
}
},'json');
}
</script>
</body>