phpcms怎么实现微信登陆

来源:undefined 2024-12-23 08:21:41 1014

phpcms实现微信登录的方法:1、在根目录新建“wechat.php”;2、在“phpcmsmodulesmemberindex.php”下增加“public function wechat() {...}”;3、在“foreground.class.php”文件中通过wechat函数判断用户是否登录即可。

本教程操作环境:Windows10系统、phpcms v9版,DELL G3电脑

phpcms怎么实现微信登陆?

phpcms实现微信登陆(无需注册,直接存入) 

思路:回调参数,直接register (代码不够规范,自己整理)

立即学习PHP免费学习笔记(深入)”;

在根目录新建wechat.php 

访问: http://www.xxxxxx.cn/wechat.php

注意回调地址 

phpcms实现微信登陆(无需注册,直接存入)

wechat.php

1

2

3

4

5

6

7

8

9

10

11

<?php if(!empty( $_GET@[&#39;code&#39;]) && !empty( $_GET@[&#39;state&#39;])){

$code = $_GET@[&#39;code&#39;];

$state = $_GET@[&#39;state&#39;];

$url = "http://www.xxxxxx.cn/index.php?m=member&c=index&a=wechat&code=$code&state=$state";

header(&#39;location:&#39;.$url);

exit;

}

$appid = &#39;wx5a3878682fa32bd5&#39;;

$url = "https://open.weixin.qq.com/connect/qrconnect?appid=$appid&redirect_uri=http://www.xxxxxx.cn/wechat.php&response_type=code&scope=snsapi_login&state=1&connect_redirect=1#wechat_redirect";

header(&#39;location:&#39;.$url);

?>

登录后复制

phpcmsmodulesmemberindex.php下增加

用户名称和密码做了简单区别处理,根据实际情况修改,邮箱为必须字段,随便放了一个。

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

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

<?php public function wechat() {

$this->_session_start();

//获取用户siteid

$siteid = isset($_REQUEST[siteid]) &amp;&amp; trim($_REQUEST[siteid]) ? intval($_REQUEST[siteid]) : 1;

//定义站点id常量

if (!defined(SITEID)) {

define(SITEID, $siteid);

}

//加载用户模块配置

//加载用户模块配置

$member_setting = getcache(member_setting);

if(!$member_setting[allowregister]) {

showmessage(L(deny_register), /login.html);

}

/*----------------------微信获取用户信息------------------------*/

//换成自己的接口信息

$code = $_GET@[code];

$state = $_GET@[state];

$appid = xxxxxxxx;

$appsecret = xxxxxxxx;

if (empty($code)) $this-&gt;error(授权失败);

$token_url = https://api.weixin.qq.com/sns/oauth2/access_token?appid=.$appid.&amp;secret=.$appsecret.&amp;code=.$code.&amp;grant_type=authorization_code;

$token = json_decode(file_get_contents($token_url));

if (isset($token-&gt;errcode)) {

showmessage(L(<br><h2>错误信息:</h2>.$token-&gt;errmsg), HTTP_REFERER);

exit;

}

$access_token_url = https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=.$appid.&amp;grant_type=refresh_token&amp;refresh_token=.$token-&gt;refresh_token;

//转成对象

$access_token = json_decode(file_get_contents($access_token_url));

if (isset($access_token-&gt;errcode)) {

showmessage(L(<br><h2>错误信息:</h2>.$access_token-&gt;errmsg), HTTP_REFERER);

exit;

}

$user_info_url = https://api.weixin.qq.com/sns/userinfo?access_token=.$access_token-&gt;access_token.&amp;openid=.$access_token-&gt;openid.&amp;lang=zh_CN;

//转成对象

$user_info = json_decode(file_get_contents($user_info_url));

if (isset($user_info-&gt;errcode)) {

showmessage(L( <br><h2>错误信息:</h2>.$user_info-&gt;errmsg), HTTP_REFERER);

exit;

}

$rs =  json_decode(json_encode($user_info),true);//转换成数组

/*------------------------获取用户信息代码结束-----------------------*/

header("Cache-control: private");

$checkname = trim($rs[nickname])."_".substr(md5($rs[unionid]),0,5) ;

$this-&gt;_init_phpsso();

$cstatus = $this-&gt;client-&gt;ps_checkname($checkname);

//如果存在用户 用户登陆   

if($cstatus == -4 || $cstatus == -1) {

$username = $rs[nickname]."_".substr(md5($rs[unionid]),0,5) ;

$password = substr(md5($rs[unionid]),0,10);

//is_password($_POST@[password]) &amp;&amp; is_badword($_POST@[password])==false ? trim($_POST@[password]) : showmessage(L(password_format_incorrect), HTTP_REFERER);

$cookietime = intval($_POST@[cookietime]);

$synloginstr = ; //同步登陆js代码

if(pc_base::load_config(system, phpsso)) {

$this-&gt;_init_phpsso();

$status = $this-&gt;client-&gt;ps_member_login($username, $password);

$memberinfo = unserialize($status);

if(isset($memberinfo[uid])) {

//查询帐号

$r = $this-&gt;db-&gt;get_one(array(phpssouid=&gt;$memberinfo[uid]));

if(!$r) {

//插入会员详细信息,会员不存在 插入会员

$info = array(

phpssouid=&gt;$memberinfo[uid],

username=&gt;$memberinfo[username],

password=&gt;$memberinfo[password],

encrypt=&gt;$memberinfo[random],

email=&gt;$memberinfo[email],

regip=&gt;$memberinfo[regip],

regdate=&gt;$memberinfo[regdate],

lastip=&gt;$memberinfo[lastip],

lastdate=&gt;$memberinfo[lastdate],

groupid=&gt;$this-&gt;_get_usergroup_bypoint(),    //会员默认组

modelid=&gt;10,  //普通会员

);

//如果是connect用户

if(!empty($_SESSION[connectid])) {

$userinfo[connectid] = $_SESSION[connectid];

}

if(!empty($_SESSION[from])) {

$userinfo[from] = $_SESSION[from];

}

unset($_SESSION[connectid], $_SESSION[from]);

$this-&gt;db-&gt;insert($info);

unset($info);

$r = $this-&gt;db-&gt;get_one(array(phpssouid=&gt;$memberinfo[uid]));

}

$password = $r[password];

$synloginstr = $this-&gt;client-&gt;ps_member_synlogin($r[phpssouid]);

} else {

if($status == -1) {    //用户不存在

showmessage(L(user_not_exist), /login.html);

} elseif($status == -2) { //密码错误

showmessage(L(password_error), /login.html);

} else {

showmessage(L(login_failure), /login.html);

}

}

} else {

//密码错误剩余重试次数

$this-&gt;times_db = pc_base::load_model(times_model);

$rtime = $this-&gt;times_db-&gt;get_one(array(username=&gt;$username));

if($rtime[times] &gt; 4) {

$minute = 60 - floor((SYS_TIME - $rtime[logintime]) / 60);

showmessage(L(wait_1_hour, array(minute=&gt;$minute)));

}

//查询帐号

$r = $this-&gt;db-&gt;get_one(array(username=&gt;$username));

if(!$r) showmessage(L(user_not_exist),/login.html);

//验证用户密码

$password = md5(md5(trim($password)).$r[encrypt]);

if($r[password] != $password) {                

$ip = ip();

if($rtime &amp;&amp; $rtime[times] times_db-&gt;update(array(ip=&gt;$ip, times=&gt;+=1), array(username=&gt;$username));

} else {

$this-&gt;times_db-&gt;insert(array(username=&gt;$username, ip=&gt;$ip, logintime=&gt;SYS_TIME, times=&gt;1));

$times = 5;

}

showmessage(L(password_error, array(times=&gt;$times)), /login.html, 3000);

}

$this-&gt;times_db-&gt;delete(array(username=&gt;$username));

}

//如果用户被锁定

if($r[islock]) {

showmessage(L(user_is_lock));

}

$userid = $r[userid];

$groupid = $r[groupid];

$username = $r[username];

$nickname = empty($r[nickname]) ? $username : $r[nickname];

$updatearr = array(lastip=&gt;ip(), lastdate=&gt;SYS_TIME);

//vip过期,更新vip和会员组

if($r[overduedate] = 0 &amp;&amp; !in_array($r[groupid], array(1, 7, 8)) &amp;&amp; empty($r[vip])) {

$grouplist = getcache(grouplist);

if(!empty($grouplist[$r[groupid]][allowupgrade])) {   

$check_groupid = $this-&gt;_get_usergroup_bypoint($r[point]);

if($check_groupid != $r[groupid]) {

$updatearr[groupid] = $groupid = $check_groupid;

}

}

}

//如果是connect用户

if(!empty($_SESSION[connectid])) {

$updatearr[connectid] = $_SESSION[connectid];

}

if(!empty($_SESSION[from])) {

$updatearr[from] = $_SESSION[from];

}

unset($_SESSION[connectid], $_SESSION[from]);

$this-&gt;db-&gt;update($updatearr, array(userid=&gt;$userid));

if(!isset($cookietime)) {

$get_cookietime = param::get_cookie(cookietime);

}

$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

$cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;

$phpcms_auth = sys_auth($userid." ".$password, ENCODE, get_auth_key(login));

param::set_cookie(auth, $phpcms_auth, $cookietime);

param::set_cookie(_userid, $userid, $cookietime);

param::set_cookie(_username, $username, $cookietime);

param::set_cookie(_groupid, $groupid, $cookietime);

param::set_cookie(_nickname, $nickname, $cookietime);

//print_r($_COOKIE);

//exit;

//param::set_cookie(cookietime, $_cookietime, $cookietime); 

//https 与 http 传递用户名   跨域跳转cooike

$forward = isset($_POST@[forward]) &amp;&amp; !empty($_POST@[forward]) ? urldecode($_POST@[forward]) : index.php?m=member&amp;c=index;

$url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE[vuGYB__nickname]."&amp;username=".$_COOKIE[vuGYB__username]."&amp;userid=".$_COOKIE[vuGYB__userid]."&amp;groupid=".$_COOKIE[vuGYB__groupid];

header("Location: ".$url.""); 

//如果不存在用户注册

$userinfo = array();

$userinfo[encrypt] = create_randomstr(6);

$userinfo[username] = $rs[nickname]."_".substr(md5($rs[unionid]),0,5) ;

$userinfo[nickname] = $rs[nickname]."_".substr(md5($rs[unionid]),0,5) ;

$userinfo[email] = time().@yangpeili.com;

$userinfo[password] = substr(md5($rs[unionid]),0,10);

$userinfo[modelid] = isset($_POST@[modelid]) ? intval($_POST@[modelid]) : 10;

$userinfo[regip] = ip();

$userinfo[point] = $member_setting[defualtpoint] ? $member_setting[defualtpoint] : 0;

$userinfo[amount] = $member_setting[defualtamount] ? $member_setting[defualtamount] : 0;

$userinfo[regdate] = $userinfo[lastdate] = SYS_TIME;

$userinfo[siteid] = $siteid;

$userinfo[connectid] = isset($_SESSION[connectid]) ? $_SESSION[connectid] : ;

$userinfo[from] = isset($_SESSION[from]) ? $_SESSION[from] : ;

//手机强制验证

//附表信息验证 通过模型获取会员信息

if($member_setting[choosemodel]) {

require_once CACHE_MODEL_PATH.member_input.class.php;

require_once CACHE_MODEL_PATH.member_update.class.php;

$member_input = new member_input($userinfo[modelid]);     

$_POST@[info] = array_map(new_html_special_chars,$_POST@[info]);

$user_model_info = $member_input-&gt;get($_POST@[info]);                                       

}

if(pc_base::load_config(system, phpsso)) {

$this-&gt;_init_phpsso();

$status = $this-&gt;client-&gt;ps_member_register($userinfo[username], $userinfo[password], $userinfo[email], $userinfo[regip], $userinfo[encrypt]);

echo $status;

if($status &gt; 0) {

$userinfo[phpssouid] = $status;

//传入phpsso为明文密码,加密后存入phpcms_v9

$password = $userinfo[password];

$userinfo[password] = password($userinfo[password], $userinfo[encrypt]); 

$userid = $this-&gt;db-&gt;insert($userinfo, 1);

if($member_setting[choosemodel]) {   //如果开启选择模型

$user_model_info[userid] = $userid;

//插入会员模型数据

$this-&gt;db-&gt;set_model($userinfo[modelid]);

$this-&gt;db-&gt;insert($user_model_info);

}

if($userid &gt; 0) {

//执行登陆操作

if(!$cookietime) $get_cookietime = param::get_cookie(cookietime);

$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

$cookietime = $_cookietime ? TIME + $_cookietime : 0;

if($userinfo[groupid] == 7) {

param::set_cookie(_username, $userinfo[username], $cookietime);

param::set_cookie(email, $userinfo[email], $cookietime);                           

} else {

$phpcms_auth = sys_auth($userid." ".$userinfo[password], ENCODE, get_auth_key(login));

//$this-&gt;db-&gt;update(array(groupid=&gt; "6"), array(userid=&gt;$userid));

$sql = "UPDATE `v9_member` SET `groupid`=6 WHERE `userid` = $userid ";//修改用户级别为注册用户

mysql_query($sql);

param::set_cookie(auth, $phpcms_auth, $cookietime);

param::set_cookie(_userid, $userid, $cookietime);

param::set_cookie(_username, $userinfo[username], $cookietime);

param::set_cookie(_nickname, $userinfo[nickname], $cookietime);

param::set_cookie(_groupid, $userinfo[groupid], $cookietime);

param::set_cookie(cookietime, $_cookietime, $cookietime);

$forward = isset($_POST@[forward]) &amp;&amp; !empty($_POST@[forward]) ? urldecode($_POST@[forward]) : index.php?m=member&amp;c=index;

//https 与 http 传递用户名   跨域跳转cooike

$url = "http://www.zhiliaoke.com.cn/set_cookie_www.php?nickname=".$_COOKIE[vuGYB__nickname]."&amp;username=".$_COOKIE[vuGYB__username]."&amp;userid=".$_COOKIE[vuGYB__userid]."&amp;groupid=".$_COOKIE[vuGYB__groupid];

header("Location: ".$url.""); 

}

}

}

} else {

showmessage(L(enable_register).L(enable_phpsso), /login.html);

}

showmessage(L(operation_failure), HTTP_REFERER);

}

?&gt;

登录后复制

补充最后一步 

很重要,也是最简单容易忽视的 !!! 

有几个人都卡在这里了!

需要 在phpcmsmodulesmemberclasses oreground.class.php 文件 21行左右 判断用户是否登陆通过wechat 函数

PHP中文网,大量的免费PHPCMS教程,欢迎在线学习!

以上就是phpcms怎么实现微信登陆的详细内容,更多请关注php中文网其它相关文章!

最新文章