当前位置: 主页 > 建站知识 > 小程序

微信小程序获取签名-微信小程序获取版本号

发布时间:2023-01-22 11:32   浏览次数:次   作者:佚名

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);

如果(空($响应)){

返回假;

}别的{

返回$响应;

}

}

三、其他