欢迎您光临深圳塔灯网络科技有限公司!
电话图标 余先生:13699882642

网站百科

为您解码网站建设的点点滴滴

php实例-微信第三方登录

发表日期: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框架分装完善一个完整的微信第三方登录。


本页内容由塔灯网络科技有限公司通过网络收集编辑所得,所有资料仅供用户学习参考,本站不拥有所有权,如您认为本网页中由涉嫌抄袭的内容,请及时与我们联系,并提供相关证据,工作人员会在5工作日内联系您,一经查实,本站立刻删除侵权内容。本文链接:http://www.dengtar.com/20679.html
相关企业建站知识
 八年  行业经验

多一份参考,总有益处

联系深圳网站公司塔灯网络,免费获得网站建设方案及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:余经理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.