微信小程序获取签名-微信小程序获取版本号
1、微信小程序
1). 调用 wx.login 获取代码。
2). 调用wx.getUserInfo获取签名所需的rawData、signatrue、encryptData。
3). 发起请求,将获取到的数据发送到后台。
//点击按钮-弹出授权
getUserInfo:函数(e){
//登录 - 获取代码
wx.login({
成功:res => {
变种代码= res。 代码;
// 获取授权信息
如果 (e.detail.errMsg == "getUserInfo:ok") {
// 获取原始数据、签名、加密数据、iv
// 并且 - 检查是否注册
var rawData = e.detail.rawData;
var signature = e.detail.signature;
var encryptedData = e.detail.encryptedData;
var iv = e.detail.iv;
wx.request({
url: '你自己的后台地址',
数据: {
“代码”:代码微信小程序获取签名,
“原始数据”:原始数据,
“签名”:签名,
'四':四,
'加密数据':加密数据
},
方法:'发布',
成功:功能(信息){
安慰。 日志(信息);
}
})
} 别的 {
console.log('用户授权失败!');
}
}
})
},
二、后台服务器
需要下载官方微信解密文件。 ——【用户数据的签名验证与加解密】
1、解压后会有不同语言的文件包。 这里使用PHP,文件夹放在vendor目录下。
2、根据登录凭证码获取session_key和openid。
3.数据签名验证。
4.数据解密。
5.生成第三方3rd_session返回微信小程序。
公共功能登录()
{
$post = input('post.');
if (empty($post['code']) || empty($post['iv']) || empty($post['rawData']) || empty($post['signature']) ||空($post['encryptedData'])){
return Sendmsg('301', '参数错误', '参数错误');
}
$code = $post['code'];
$iv = $post['iv'];
$rawData = $post['rawData'];
$signature = $post['signature'];
$encryptedData = $post['encryptedData'];
//从表中获取appid和secret key
$core = db::table('ot_fa_wx_core')->where('id', 1)->field('wxapp_appid,wxapp_appsecret')->find();
$appid = $core['wxapp_appid'];
$appsecret = $core['wxapp_appsecret'];
//请求链接
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$appsecret&js_code=$code&grant_type=authorization_code";
$res_data = json_decode($this->curl_get($url), true);
// 是否成功获取数据
如果 (!isset($res_data['openid'])) {
return Sendmsg('302', '获取openid失败');
}
$openid = $res_data['openid'];
$session_key = $res_data['session_key'];
// ==================== 签名验证+解密数据包 ====================
// 1. 数据签名验证
$signature2 = sha1($rawData.$session_key);
如果($签名!= $签名2){
return Sendmsg('303', '数据签名验证失败!');
}
// 2. 解密数据包
//加载解密后的文件微信小程序获取签名,可以在官网下载
import("wxapp_auth_verify.wxBizDataCrypt", EXTEND_PATH);
$pc = new \WXBizDataCrypt($appid, $session_key);
$errCode = $pc->decryptData($encryptedData, $iv, $data); // $data 包含所有用户数据
如果($errCode == 0){
//解密后的用户信息
$data = json_decode($data,true);
$user_info = $this->get_user_info($data['openId']);
返回 Sendmsg('200','OK',$user_info);
} 别的 {
//打印解密失败信息
返回 Sendmsg('400','错误',$errCode);
}
// ==================== 签名验证+解密数据包 ====================
}
//根据openID获取用户信息
公共函数 get_user_info($openId)
{
$is_have = db::table('ot_fa_wx_user')->where('openid_wxapp',$openId)->find();
如果($is_have){
返回 $is_have;
} 别的 {
//如果用户信息不存在--去注册
返回假;
}
}
// CURL实现的get方法请求
受保护的函数 curl_get($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) CarbonForum/5.0");
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec($ch);
curl_close($ch);
如果(空($响应)){
返回假;
}别的{
返回$响应;
}
}
三、其他