php 微信快速登录,PHP快速实现微信登录

前期准备工作

首先看一下微信号是否支持登录的接口,登录微信公众平台(mp.qq.weixin.com),在左侧导航找到【开发】-》【接口权限】

ed58550f22ffbd702cc9508b870f65d5.png

使用PHP从零开始实现微信登录

在右侧权限列表中找到【网页授权】,这里可以查看是否获得接口权限,一般都是获得。

点击最右按钮【修改】

158c5d15ad2597103b471e60d4ed672e.png

使用PHP从零开始实现微信登录

我们需要设置【网页授权域名】,点击设置之后需要下载一个文件上传到该域名的根目录下,微信官方提供了详细的设置方法,不再赘述。

页面上还有两个参数【业务域名】和【JS接口安全域名】。

前者是用户在该域名上进行输入时,不出现安全提示。

后者是微信分享接口会用到,所以方便就一起设置了。

域名需要通过备案,二级域名也可以。

然后再在左侧菜单找到【开发】-》【基本配置】

5369ec00737710952fbc5df12045dc70.png

使用PHP从零开始实现微信登录

获取开发者密码保存下来,把开发者ID保存下来,再设置好IP白名单。

实现思路

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息。

我们通常会获取openid来确认访问者身份从而实现业务逻辑(snsapi_base)

有时候我们也需要获取到更多的信息,如微信昵称、头像、性别、所在地等,来实现自动注册(snsapi_userinfo)

这两种情景的实现思路是不同的,或者说后者是前者的一个递进,在组装授权链接的时候我们就需要通过参数告诉微信服务器我们的目的。如果画个图来方便理解的话是这样的:

2b1d3d2c29979d482c55639b5ed28677.png

使用PHP从零开始实现微信登录

从程序方面来说我们需要实现以下几个方法:

组装获取code的URL

访问通过code获取access_token的接口(此接口同时也返回openid)

访问使用access_token和openid获取特定会员信息的接口

注意:此处的access_token仅可用于获取用户信息,与普通access_token区别

下面是一个完整的使用微信注册(登录)的流程:

bbe80619a5823630a32249ce0ce98a1c.png

使用PHP从零开始实现微信登录

实现代码

/**

* Created by PhpStorm.

* User: fourn

* Date: 2017/10/30

* Time: 上午11:27

*/

class WxloginModel {

const APP_ID = '';

const APP_SECRET = '';

public function getCodeUrl(){

$redirect_url = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

$get_code_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='

.self::APP_ID.'&redirect_uri='.$redirect_url

.'&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';

return $get_code_url;

}

/**

* @param $code

* @return bool|string

* access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同

expires_in access_token接口调用凭证超时时间,单位(秒)

refresh_token 用户刷新access_token

openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID

scope 用户授权的作用域,使用逗号(,)分隔

*

* {"errcode":40029,"errmsg":"invalid code"}

*/

public function getOpenId($code){

$get_openid_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.self::APP_ID

.'&secret='.self::APP_SECRET.'&code='.$code.'&grant_type=authorization_code';

$rst = file_get_contents($get_openid_url);

$rst = json_decode($rst, true);

if(isset($rst['openid'])){

return $rst;

}else{

return false;

}

}

/**

* @param $access_token

* @param $open_id

* @return bool|mixed

* openid 用户的唯一标识

nickname 用户昵称

sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知

province 用户个人资料填写的省份

city 普通用户个人资料填写的城市

country 国家,如中国为CN

headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。

privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

unionid 只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

*/

public function getUserInfo($access_token, $open_id){

$url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token

.'&openid='.$open_id.'&lang=zh_CN';

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

$rst = json_decode($rst, true);

if(isset($rst['errcode'])){

return false;

}else{

return $rst;

}

}

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值