tp5微信公众号获取用户openid_ThinkPHP5-微信小程序获取用户授权登录信息

因为最近在用TP5开发小程序,所以就上网搜索了一下TP框架对应的微信小程序获取授权信息的依赖,但是结果不太理想,于是就借鉴了laravel的iwanli/wxxcx依赖,自己手动写了一个TP5的获取信息接口,下面分享一下具体的实现流程。

1.梳理

首先要知道的是,小程序开发中,微信小程序授权时后台会获取的参数:

encryptedData:加密后的用户信息

code:登录凭证码

iv:偏移向量,在解密是要用到的

这三个参数是通过小程序前端发送到后台的。

之后需要去微信小程序官方文档里面下载解密 sdk 。

下载完毕之后,解压并放入TP5项目的extend文件夹里面。

2.实现流程

首先在控制器中引用,以本人代码为例。

.

.

.

//引用解密组件

use wxxcx\wxBizDataCrypt;

.

.

.

public function demo()

{

// 前台参数

$encryptedData = input('get.encryptedData');

$code = input('get.code');

$iv = input('get.iv');

// 小程序 appid 和 appsecret

$appid = 'wx4f4bc4dec97d474b';

$appsecret = '#################';

// step1

// 通过 code 用 curl 向腾讯服务器发送请求获取 session_key

$session_key = $this->sendCode($appid, $appsecret, $code);

// step2

// 用过 session_key 用 sdk 获得用户信息

$save = [];

// 相关参数为空判断

if (empty($session_key) || empty($encryptedData) || empty($iv)) {

$msg = "信息不全";

return $this->ApiSuccess($save, $msg);

}

//进行解密

$userinfo = $this->getUserInfo($encryptedData, $iv, $session_key, $appid);

// 解密成功判断

if (isset($userinfo['code']) && 10001 == $userinfo['code']) {

$msg = "请重试"; // 用户不应看到程序细节

return $this->ApiSuccess($save, $msg);

}

session('myinfo', $userinfo);

$save['openid'] = &$userinfo['openId'];

$save['uname'] = &$userinfo['nickName'];

$save['unex'] = &$userinfo['gender'];

$save['address'] = &$userinfo['city'];

$save['avatarUrl'] = &$userinfo['avatarUrl'];

$save['time'] = time();

$map['openid'] = &$userinfo['openId'];

$msg = "获取成功";

//返回用户信息

return $this->ApiSuccess($save, $msg);

}

//获取微信用户信息

private function sendCode($appid, $appsecret, $code)

{

// 拼接请求地址

$url = 'https://api.weixin.qq.com/sns/jscode2session?appid='

. $appid . '&secret=' . $appsecret . '&js_code='

. $code . '&grant_type=authorization_code';

$arr = $this->vegt($url);

$arr = json_decode($arr, true);

return $arr['session_key'];

}

// curl 封装

private function vegt($url)

{

$info = curl_init();

curl_setopt($info, CURLOPT_RETURNTRANSFER, true);

curl_setopt($info, CURLOPT_HEADER, 0);

curl_setopt($info, CURLOPT_NOBODY, 0);

curl_setopt($info, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($info, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($info, CURLOPT_URL, $url);

$output = curl_exec($info);

curl_close($info);

return $output;

}

//信息解密

private function getUserInfo($encryptedData, $iv, $session_key, $APPID)

{

//进行解密

$pc = new WXBizDataCrypt($APPID, $session_key);

$decodeData = "";

$errCode = $pc->decryptData($encryptedData, $iv, $decodeData);

//判断解密是否成功

if ($errCode != 0) {

return [

'code' => 10001,

'message' => 'encryptedData 解密失败',

];

}

//返回解密数据

return json_decode($decodeData, true);

}

.

.

.

以上就是TP5获取微信小程序授权用户信息的实现流程。

可以将代码中vegt方法转到公共函数库中

sendCode和getUserInfo可以进行抽象、再次改进,实现功能分离。

以后如果有钉钉小程序,百度小程序等等用户信息获取,都可以用

本作品采用《CC 协议》,转载必须注明作者和本文链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值