发表日期:2019-08 文章编辑:小灯 浏览次数:1776
下面小编就为大家带来一篇微信第三方登录(原生)demo【必看篇】。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在一家ecstore二开公司有一段时间了,公司希望往自己研发产品上面走,一直在培养新人。
最近要自己去微信登录,自己就在ectore的框架基础上,写的原生微信第三方登录以此来熟悉微信第三方登录,在ecstore上面去写。
一个简单的demo,不是很好,分享给大家,希望能给想做微信第三方登录的朋友带来思路...
首先:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
资料准备:
水印图片 28*28 png格式 公司logo
高清图片 108*108 png格式 公司logo
1.在微信开放平台 https:
//open.weixin.qq.com/中填写基本信息,
2.完成邮箱验证,
3.并完善开发者资料,注册成为开发者。
4.在“账号中心”完成开发者资质认证。
5.进入微信开放平台管理中心网站应用,点击“创建应用”按钮。
6.填写基本信息,完成点击下一步
7.填写平台信息
应用签名:可在微信开发平台的资源中心》》资源下载》》中下载“签名生成工具”,用户获取已经安装到手机的第三方应用的签名。输入应用包名,即可获得该应用的签名值。
8.提交审核后,在7个工作日内腾讯将给出审核结果。(通常较快,几个小时就可反馈结果)
获取AppID,AppSecret,之后的处理:
1
2
需要在你想加的网站登录页给一个链接:<a href=
"https://open.weixin.qq.com/connect/qrconnect?appid=your appid &redirect_uri=http://www.sunmil.cn/passport-linshi.html&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect"
rel=
"external nofollow"
>微信登录</a>
<br><br>
处理微信登录开始
定义appid appsecert
1
2
3
private
$appid
=
"your appid"
;
private
$appsecert
=
"your appsecert"
;
private
$redirect_uri
= http:
//www.sunmil.cn/wxGetCode;
绑定账号页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
function
weixin(){
//链接数据库
$link
= mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME )
or
die
(
'数据库连接失败4'
);
$link
= mysqli_connect(
'127.0.0.1'
,
'root'
,
'root'
,
'ec'
)
or
die
(
'数据库连接失败'
);
mysqli_set_charset(
$link
,
'utf8'
);
//接收openid
$openid
=
$_COOKIE
[
'openid'
];
$sql
=
"select * from sdb_trustlogin_trustinfo where openid = '$openid' "
;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$this
->pagedata[
'realname'
] =
$row
[
'realname'
];
$this
->pagedata[
'avatar'
] =
$row
[
'avatar'
];
$this
->page(
"site/passport/weixin.html"
);
}
当第一次微信登录,处理绑定账号页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public
function
handle(
$url
=null){
// $url = "http://www.sunmil.cn";
//链接数据库
$link
= mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME )
or
die
(
'数据库连接失败3'
);
mysqli_set_charset(
$link
,
'utf8'
);
$post
= utils::_filter_input(
$_POST
);
$userData
=
array
(
'login_account'
=>
$post
[
'uname'
],
'login_password'
=>
$post
[
'password'
]
);
$member_id
= kernel::single(
'pam_passport_site_basic'
)->login(
$userData
,
$post
[
'verifycode'
],
$msg
);
$b2c_members_model
=
$this
->app->model(
'members'
);
$member_point_model
=
$this
->app->model(
'member_point'
);
$member_data
=
$b2c_members_model
->getList(
'member_lv_id,experience,point'
,
array
(
'member_id'
=>
$member_id
) );
$member_data
=
$member_data
[0];
$member_data
[
'order_num'
] =
$this
->app->model(
'orders'
)->
count
(
array
(
'member_id'
=>
$member_id
) );
$b2c_members_model
->update(
$member_data
,
array
(
'member_id'
=>
$member_id
));
$this
->userObject->set_member_session(
$member_id
);
$this
->bind_member(
$member_id
);
$this
->set_cookie(
'loginName'
,
$post
[
'uname'
],time()+31536000);
//用于记住密码
// setCartNum()需要传入一个参数
$aCart
=
array
();
$this
->app->model(
'cart_objects'
)->setCartNum(
$aCart
);
$url
=
$this
->userPassport->get_next_page(
'pc'
);
if
( !
$url
){
$url
= kernel::single(
'b2c_frontpage'
)->gen_url(
array
(
'app'
=>
'b2c'
,
'ctl'
=>
'site_member'
,
'act'
=>
'index'
));
}
//查询数据库
$uname
=
$_POST
[
'uname'
];
$sql
=
"select * from sdb_pam_members where password_account = '$uname' "
;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$member_id
=
$row
[
'member_id'
];
//链接数据库,插入数据
$openid
=
$_COOKIE
[
'openid'
];
$sql
=
"update sdb_trustlogin_trustinfo set member_id = ('{$member_id}') where openid = '{$openid}'"
;
$res
= mysqli_query(
$link
,
$sql
);
if
(
$res
&& mysqli_affected_rows(
$link
) > 0){
//删除cookie
setcookie(
"openid"
,
$openid
, time()-3600);
kernel::single(
'pam_lock'
)->flush_lock(
$member_id
);
$this
->splash(
'success'
,
$url
,app::get(
'b2c'
)->_(
'登录成功'
),true);
}
else
{
echo
'失败了'
;
}
}
处理绑定注册页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public
function
weixin1(){
//链接数据库
$link
= mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME )
or
die
(
'数据库连接失败2'
);
mysqli_set_charset(
$link
,
'utf8'
);
//接收openid
$openid
=
$_COOKIE
[
'openid'
];
$sql
=
"select * from sdb_trustlogin_trustinfo where openid = '$openid' "
;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$this
->pagedata[
'realname'
] =
$row
[
'realname'
];
$this
->pagedata[
'avatar'
] =
$row
[
'avatar'
];
$this
->page(
"site/passport/weixin1.html"
);
}
绑定注册页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public
function
handle1(
$url
=null){
//链接数据库
$link
= mysqli_connect(DB_HOST, DB_USER,DB_PASSWORD,DB_NAME )
or
die
(
'数据库连接失败1'
);
mysqli_set_charset(
$link
,
'utf8'
);
$_POST
= utils::_filter_input(
$_POST
);
$saveData
=
$this
->userPassport->pre_signup_process(
$_POST
);
if
(
$member_id
=
$this
->userPassport->save_members(
$saveData
,
$msg
) ){
$this
->userObject->set_member_session(
$member_id
);
$this
->bind_member(
$member_id
);
foreach
(kernel::servicelist(
'b2c_save_post_om'
)
as
$object
) {
$object
->set_arr(
$member_id
,
'member'
);
$refer_url
=
$object
->get_arr(
$member_id
,
'member'
);
}
/*注册完成后做某些操作! begin*/
foreach
(kernel::servicelist(
'b2c_register_after'
)
as
$object
) {
$object
->registerActive(
$member_id
);
}
/*end*/
$data
[
'member_id'
] =
$member_id
;
$data
[
'uname'
] =
$saveData
[
'pam_account'
][
'login_account'
];
$data
[
'passwd'
] =
$_POST
[
'pam_account'
][
'psw_confirm'
];
$data
[
'email'
] =
$_POST
[
'contact'
][
'email'
];
$data
[
'refer_url'
] =
$refer_url
?
$refer_url
:
''
;
$data
[
'is_frontend'
] = true;
$obj_account
=
$this
->app->model(
'member_account'
);
$obj_account
->fireEvent(
'register'
,
$data
,
$member_id
);
if
(!
strpos
(
$_SESSION
[
'pc_next_page'
],
'cart'
)){
$url
=
$this
->gen_url(
array
(
'app'
=>
'b2c'
,
'ctl'
=>
'site_passport'
,
'act'
=>
'sign_tips'
));
}
else
{
$url
=
$_SESSION
[
'pc_next_page'
];
}
//会员注册成功,处理member_id 开始
$login_name
=
$_POST
[
"pam_account"
][
"login_name"
];
$sql
=
"select member_id from sdb_pam_members where password_account = '{$login_name}'"
;
// echo $sql;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$member_id
=
$row
[
'member_id'
];
//链接数据库,插入数据
$openid
=
$_COOKIE
[
'openid'
];
$sql
=
"update sdb_trustlogin_trustinfo set member_id = ('{$member_id}') where openid = '{$openid}'"
;
$res
= mysqli_query(
$link
,
$sql
);
if
(
$res
&& mysqli_affected_rows(
$link
) > 0){
//删除cookie
setcookie(
"openid"
,
$openid
, time()-3600);
$this
->splash(
'success'
,
$url
,app::get(
'b2c'
)->_(
'注册成功'
),
$ajax_request
);
}
//会员注册成功,处理member_id 结束
$this
->splash(
'failed'
,
$back_url
,app::get(
'b2c'
)->_(
'注册失败'
),
$ajax_request
);
}
}
临时页面
1
2
3
4
5
6
7
8
9
10
11
12
13
public
function
linshi(){
$code
=
$_GET
[
'code'
];
$state
=
$_GET
[
'state'
];
if
(
$state
===
'STATE'
){
$this
->loginWeixin(
$code
);
}
elseif
(
$state
===
'wxBind'
){
$this
->bindWeixin(
$code
);
}
else
{
return
redirect(
"http://www.sunmil.cn"
);
}
}
loginWeixin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
private
function
loginWeixin(
$code
){
//链接数据库
$link
= mysqli_connect(
'127.0.0.1'
,
'root'
,
'root'
,
'ec'
)
or
die
(
'数据库连接失败'
);
mysqli_set_charset(
$link
,
'utf8'
);
$appid
=
$this
->appid;
$appsecert
=
$this
->appsecert;
$url
=
"https://api.weixin.qq.com/sns/oauth2/access_token?appid="
.
$appid
.
"&secret="
.
$appsecert
.
"&code="
.
$code
.
"&grant_type=authorization_code"
;
//curl模拟get请求,获取结果
$res
=
$this
->http_curl(
$url
);
//转化为数组
$result
= json_decode(
$res
,true);
$openid
=
$result
[
'openid'
];
//openid存在,直接登录,openid不存在,先注册再登录
$sql
=
"select openid from sdb_trustlogin_trustinfo"
;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_all(
$res
);
//foreach 判断
foreach
(
$row
As
$v
) {
if
(in_array(
$openid
,
$v
,true)){
//缺少登录信息
$sql
=
"select member_id from sdb_trustlogin_trustinfo where openid = '{$openid}'"
;
//查出member_id
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$member_id
=
$row
[
'member_id'
];
//查出会员信息
$sql
=
"select * from sdb_pam_members where member_id = '{$member_id}'"
;
$res
= mysqli_query(
$link
,
$sql
);
$row
= mysqli_fetch_assoc(
$res
);
$login_name
=
$row
[
'login_account'
];
//存入cookie
setcookie(
'UNAME'
,
$login_name
, time()+360000);
echo
"<script>window.location.href='http://www.sunmil.cn'</script>"
;
exit
;
}
}
$access_token
=
$result
[
'access_token'
];
//获取用户基本信息
$getInfoUrl
=
"https://api.weixin.qq.com/sns/userinfo?access_token="
.
$access_token
.
"&openid="
.
$openid
.
"&lang=zh_CN"
;
$userInfo
=
$this
->http_curl(
$getInfoUrl
);
$trustinfo
= json_decode(
$userInfo
);
//判断trustinfo表里面是否存在该条数据
$openid
=
$trustinfo
->openid;
$nickname
=
$trustinfo
->nickname;
$sex
=
$trustinfo
->sex;
$city
=
$trustinfo
->city;
$province
=
$trustinfo
->province;
$country
=
$trustinfo
->country;
$avatar
=
$trustinfo
->headimgurl;
$trust_source
=
'trustlogin_plugin_weixin'
;
//连接数据库,插入数据
$sql
=
"insert into sdb_trustlogin_trustinfo (openid,realname,avatar,gender,province,city,trust_source) values ('{$openid}','{$nickname}','{$avatar}','{$sex}','{$province}','{$city}','{$trust_source}')"
;
$res
= mysqli_query(
$link
,
$sql
);
if
(
$res
&& mysqli_affected_rows(
$link
) > 0){
//存入cookie
setcookie(
'openid'
,
$openid
, time()+3600);
header(
"Location:http://www.sunmil.cn/passport-weixin.html"
);
}
else
{
echo
'失败了'
;
}
}
curl模拟get请求
1
2
3
4
5
6
7
8
9
10
11
12
private
function
http_curl(
$url
){
$curlobj
= curl_init();
curl_setopt(
$curlobj
, CURLOPT_URL,
$url
);
curl_setopt(
$curlobj
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$curlobj
, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(
$curlobj
, CURLOPT_SSL_VERIFYHOST, FALSE);
$output
= curl_exec(
$curlobj
);
curl_close(
$curlobj
);
return
$output
;
}
处理微信登录结束
就可以实现微信登录了,当然了,一个简单熟悉微信第三登录的demo,有机会用tp框架分装完善一个完整的微信第三方登录。
日期:2019-02 浏览次数:6446
日期:2019-02 浏览次数:4190
日期:2019-02 浏览次数:3932
日期:2019-02 浏览次数:4396
日期:2019-02 浏览次数:4115
日期:2019-02 浏览次数:7254
日期:2019-02 浏览次数:3973
日期:2019-02 浏览次数:4463
日期:2019-02 浏览次数:4315
日期:2019-02 浏览次数:3993
日期:2019-02 浏览次数:4329
日期:2019-02 浏览次数:4104
日期:2019-02 浏览次数:3996
日期:2019-02 浏览次数:3923
日期:2019-02 浏览次数:4661
日期:2019-02 浏览次数:4122
日期:2019-02 浏览次数:4117
日期:2019-02 浏览次数:4176
日期:2019-02 浏览次数:4128
日期:2019-02 浏览次数:4047
日期:2019-02 浏览次数:4412
日期:2019-09 浏览次数:4436
日期:2019-09 浏览次数:4081
日期:2019-09 浏览次数:4100
日期:2019-09 浏览次数:4054
日期:2019-09 浏览次数:4029
日期:2019-09 浏览次数:4128
日期:2019-09 浏览次数:4072
日期:2019-09 浏览次数:4543
日期:2019-09 浏览次数:5061
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.