标签:一个 name verify sig 请求 encrypt 用户信息 程序开发 alc
1.小程序端代码
var app = getApp();
var url = ‘http://shzujune.com/mianya/public/index/index/wxlogin‘;
var login = function (code, encrypteData, iv) {
var that = this
//创建一个dialog提示
wx.showToast({
title: ‘正在登录...‘,
icon: ‘loading‘,
duration: 5000
});
wx.request({
url: url,
method: ‘get‘,
data: {
code: code,
encrypteData: encrypteData,
iv: iv
},
header: {
‘Content-Type‘: ‘application/json‘
},
success: function (res) {
wx.hideToast()
//console.log(‘服务器返回‘ + res.data)
app.globalData.userInfo = res.data
},
fail: function () {
wx.showToast({
title: ‘网络错误!‘,
duration: 2000
})
},
complete: function () {
}
})
}
Page({
data: {
//判断小程序的API,回调,参数,组件等是否在当前版本可用。
canIUse: wx.canIUse(‘button.open-type.getUserInfo‘)
},
onLoad: function () {
var that = this
wx.login({
success: function (res) { //登录成功
//console.log(res)
if (res.code) {
var code = res.code
wx.getUserInfo({ //getUserInfo流程
success: function (data) { //getUserInfo获取用户信息成功
//console.log(data)
//encrypteData加密密文,iv偏移向量,encodeURIComponent把加密字符串解密成URI字符串
var encryptedData = encodeURIComponent(data.encryptedData);
var iv = data.iv;
//请求自己的服务器
login(code, encryptedData, iv);
//已经授权的用户
wx.switchTab({
url: ‘../rec/rec‘,
})
}
})
} else {
console.log(‘用户没有进行授权!‘ + res.errMsg)
}
}
});
},
bindGetUserInfo: function (e) {
//console.log(e)
if (e.detail.userInfo) {
//用户按了允许授权的按钮
var that = this
wx.login({
success: function (res) {
if (res.code) {
var code = res.code
wx.getUserInfo({
success: function (data) {
var encryptedData = encodeURIComponent(data.encryptedData);
var iv = data.iv;
//请求自己的服务器
login(code, encryptedData, iv);
}
})
}
}
})
//授权成功后,跳转进入小程序首页
wx.switchTab({
url: ‘../rec/rec‘
})
} else {
//用户按了拒绝按钮
wx.showModal({
title: ‘警告‘,
content: ‘您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!‘,
showCancel: false,
confirmText: ‘返回授权‘,
success: function (res) {
if (res.confirm) {
console.log(‘用户点击了“返回授权”‘)
}
}
})
}
},
})
2.php 端代码
<?php
namespace app\teacherapi\controller;
use think\Controller;
/**
* @date: 2018-12
* 微信操作类
*/
class WxDecode extends Controller
{
public function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
/**
* @author: zxf
* @date: 2018-12-08
* @description: 解密微信用户敏感数据
* @return array
*/
public function WxDecode()
{
// 接收参数
$data = request() -> param();
// 引入解密文件 在微信小程序开发文档下载
vendor(‘wx.WXBizDataCrypt‘);
vendor(‘wx.ErrorCode‘);
$appid = config(‘TESTPPID‘);
$appsecret = config(‘TESTSECREET‘);
$grant_type = "authorization_code"; //授权(必填)
$code = $data[‘code‘]; //有效期5分钟 登录会话
$encryptedData=$data[‘encryptedData‘];
$iv = $data[‘iv‘];
$signature = $data[‘signature‘];
$rawData = $data[‘rawData‘];
// 拼接url
$url = "https://api.weixin.qq.com/sns/jscode2session?"."appid=".$appid."&secret=".$appsecret."&js_code=".$code."&grant_type=".$grant_type;
$res = json_decode($this->httpGet($url),true);
$sessionKey = $res[‘session_key‘]; //取出json里对应的值
$signature2 = sha1(htmlspecialchars_decode($rawData).$sessionKey);
// 验证签名
if ($signature2 !== $signature){
return json("验签失败");
}
// 获取解密后的数据
$pc = new \WXBizDataCrypt($appid, $sessionKey);
$errCode = $pc->decryptData($encryptedData, $iv, $data );
if ($errCode == 0) {
return return_succ($data);
} else {
return return_error($errCode);
}
}
}
关于thinkphp 与微信小程序授权登录的心得,加上完整代码
标签:一个 name verify sig 请求 encrypt 用户信息 程序开发 alc
原文地址:https://www.cnblogs.com/zmdComeOn/p/12658635.html