PHP版微信第三方实现一键登录及获取用户信息的方法

2025-05-29 0 108

本文实例讲述了PHP版微信第三方实现一键登录及获取用户信息的方法。分享给大家供大家参考,具体如下:

注意,要使用微信在第三方网页登录是需要“服务号”才可以哦,所以必须到官方申请。

一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名

前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可以看到.

复制代码 代码如下:

<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=http://www.xxxxxx.com/action/function/oauth2&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">授权</a>

再说后台逻辑,首先调用微信接口的SDK.(后面会有)

?

1
include('./Card/Common/class_weixin_adv.php');

之后填入微信官方给的的appid与secret

?

1
$weixin=new class_weixin_adv("appid", "secret");

初始化SDK的类,取到code,利用获取到的code在获取出openid 看下面代码注释!

?

1

2

3
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code";

$res = $weixin->https_request($url);//调用SDK方法获取到res 从中可以得到openid

$res=(json_decode($res, true));//转换成array 方便调用openid

继续调用SDK方法,获取到用户信息.此时$row已经获得用户信息了 可以var_dump下看看键值方便存入数据库

?

1
$row=$weixin->get_user_info($res['openid']);

获取用户信息就大功告成了,但这还不够.我们需要的是无需注册!所以需要利用openid,openid属于唯一凭证,每个用户对不同的公众号都有不同的openid.可以理解成用户账号的感觉.我这里用的是把openid存入cookie的解决方案,类似用户登陆的感觉,一些关键数据验证只需要与数据库中的openid进行对比.其他的一些利用方法可以发挥大家的想象!可以跟我留言交流!

关于之前的a链接的授权,大家也可以判断cookie是否存在openid,从而让未授权用户直接跳转到该地址,省却了用户的一步操作.

下面是完整逻辑代码,大家可以参考下!

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
public function oauth2(){

include('./Card/Common/class_weixin_adv.php');

$weixin=new class_weixin_adv("appid", "secret");

if (isset($_GET['code'])){

$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=".$_GET['code']."&grant_type=authorization_code";

$res = $weixin->https_request($url);

$res=(json_decode($res, true));

$row=$weixin->get_user_info($res['openid']);

if ($row['openid']) {

//这里写上逻辑,存入cookie,数据库等操作

cookie('weixin',$row['openid'],25920);

}else{

$this->error('授权出错,请重新授权!');

}

}else{

echo "NO CODE";

}

$this->display();

}

SDK代码:微信官方有手册,我就不多讲了,自己研究,很简单的!

?

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
<?php

/**

* 微信SDK

* pan041ymail@gmail.com

*/

class class_weixin_adv

{

var $appid = "";

var $appsecret = "";

//构造函数,获取Access Token

public function __construct($appid = NULL, $appsecret = NULL)

{

if($appid){

$this->appid = $appid;

}

if($appsecret){

$this->appsecret = $appsecret;

}

$this->lasttime = 1395049256;

$this->access_token = "nRZvVpDU7LxcSi7GnG2LrUcmKbAECzRf0NyDBwKlng4nMPf88d34pkzdNcvhqm4clidLGAS18cN1RTSK60p49zIZY4aO13sF-eqsCs0xjlbad-lKVskk8T7gALQ5dIrgXbQQ_TAesSasjJ210vIqTQ";

if (time() > ($this->lasttime + 7200)){

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->appsecret;

$res = $this->https_request($url);

$result = json_decode($res, true);

$this->access_token = $result["access_token"];

$this->lasttime = time();

}

}

//获取用户基本信息

public function get_user_info($openid)

{

$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN";

$res = $this->https_request($url);

return json_decode($res, true);

}

//https请求

public function https_request($url, $data = null)

{

$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)){

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;

}

}

希望本文所述对大家PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP版微信第三方实现一键登录及获取用户信息的方法 https://www.kuaiidc.com/96889.html

相关文章

发表评论
暂无评论