PHP

ThinkPHP实现微信三方登录

字号+ 编辑: 国内TP粉 修订: 呆头鹅甲 来源: ThinkPHP 2018-04-14 21:55 我要说两句(0)

tp框架怎么接微信第三方登录接口?

小插曲就是app做微信三方登录是很久之前,后面又添加了PC的微信三方登陆,而文档上说unionid是同一个账号下不同应用统一的,但是app拿的是uid,导致pc拿的unionid始终对不上,导致浪费了一天的时间都在需找资料统一的问题,还有问题是解决了!希望小伙伴们做app的和pc微信三方登陆的时候一定要注意,app和pc都要拿unionid!好了下面就开始教大家怎么整合PC的微信三方登陆了:

1、申请时候所填写的信息,主要网站信息登记表扫描件是客户提供意外其他都是自己填写,注意的是授权回调域要写一级域名,和调用的时候recudirt_url保持一致

调用接口的步骤


(1):注意了这个微信的小图标就是微信登陆的链接了,也就是a标签,href是这个值(官方文档1号店的微信登录)

https://open.weixin.qq.com/connect/qrconnect?appid=wxbdc5610cc59c1631&redirect_uri=https://passport.yhd.com/wechat/callback.do&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect


(2)上面的链接会返回一个code的参数,这个是换取access_token和openid值的媒介,之后呢就逻辑判断了

if(isset($_GET['code'])&&$_GET['state'] =='3d6be0a4035d839573b04816624a415e') {
    // 调用的是获取用户的个人信息的方法
    $res = $this->message_request($code);
}

public function message_request($code)
{
    // 修改自己的
    $appid = "wx16a15XXXXXXXXX";
    $appsecret = "fc4b2b999787cXXXXXXXXXXX";
    // 修改自己的
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code";
    $output = $this->httpsRequest($url);
    $jsoninfo = json_decode($output, true);
    $openid = $jsoninfo["openid"];
    $access_token = $jsoninfo['access_token'];
    $url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
    $output = $this->httpsRequest($url);
    $message = json_decode($output,true);
    return $message;
}
public function httpsRequest($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;
}


重要:

access_token和微信公众平台用户授权登陆不一样,微信公众平台的有限制一天,开放平台的没有限制,而且必须是同时生成,不能过期,app和PC用户的信息保持同步就都用["unionid"] 这个是同一个开放平台下的不同应用["unionid"] 是唯一的,app和PC都要拿这个。

得到的结果

array(10) {  ["openid"] => string(28) "oD5XQwgVj1gLb3_zgjP72uDgESYk"  ["nickname"] => string(6) "刘柱"  //用户的昵称  ["sex"] => int(1)  //性别 1:男  ["language"] => string(5) "zh_CN"  ["city"] => string(6) "南开"  //区  ["province"] => string(7) "天津"  //省  ["country"] => string(2) "天津" //市  ["headimgurl"] => string(129) "http://wx.qlogo.cn/mmopen/aQVS6rQD9yJTTHTcyb0AqLOQ3rBoyNL3CyEJleogBib53Y6xiaibZvfZ6quDApeKuPG10sCYKkDvPwkiayUj3dMXjNicOVkV73x1k/0"  //用户的头像  ["privilege"] => array(0) {  }  ["unionid"] => string(28) "o2VJ4xEUwd51_7F2bhisYBhF3fVk"  //unionid  app和pc信息保持一致的基准 }


阅完此文,您的感想如何?
  • 鼓掌

    1

  • 鄙视

    1

  • 开心

    1

  • 愤怒

    1

  • 可怜

    1

1.如文章侵犯了您的版权,请发邮件通知本站,该文章将在24小时内删除;
2.本站标注原创的文章,转发时烦请注明来源;
3.交流群: PHP+JS聊天群

相关课文
  • 解决pecl安装swoole报错 error

  • php针对mysql的orm: 一个轻量级的pdo操作类

  • shell_exec() has been disabled for security reasons 解决方法

  • 鸟哥出品的高性能php框架YAF的安装和配置

我要说说
网上宾友点评
沙发已空
ThinkPHP实现微信三方登录