微信小程序获取签名-微信小程序获取节点
官方微信小程序已经给出了非常详细的登录时序图。 当然微信小程序获取签名,为了安全起见,还要加上签名加密。
微信小程序
1). 调用 wx.login 获取代码。
2). 调用wx.getUserInfo获取签名所需的rawData、signatrue、encryptData。
3). 发起请求,将获取到的数据发送到后台。
登录:函数(e){ var that = this; wx.login({ success: function(res){ var code = res.code; // 获取代码 wx.getUserInfo({ // 获取rawData, signatrue, encryptData success: function(data){ var rawData = data.rawData; var signature = data.signature; var encryptedData = data.encryptedData; var iv = data.iv; wx.request({ url: '你自己的后台地址', data: { "code" : code, "rawData" : rawData, “签名”:签名,'iv':iv,'encryptedData':encryptedData},方法:'GET'微信小程序获取签名,成功:函数(信息){console.log(信息);}})}})},})}
服务器
需要下载官方微信解密文件。 ——【用户数据的签名验证与加解密】
1、解压后会有不同语言的文件包。 这里使用PHP,文件夹放在vendor目录下。
2、根据登录凭证码获取session_key和openid。
3.数据签名验证。
4.数据解密。
5.生成第三方3rd_session返回微信小程序。
public function login() { //开发者使用登录凭证code获取session_key和openid $APPID = '';//Configure $AppSecret = '';//Configure $code = input('code'); $url = "https://api.weixin.qq.com/sns/jscode2session?appid=". $APPID。 “&秘密=”。 $应用程序秘密。 “&js_code=”。 $代码。 "&grant_type=authorization_code"; $arr = $this->vget($url); // 使用curl实现的get方法请求 $arr = json_decode($arr, true); $openid = $arr['openid'] ; $session_key = $arr['session_key']; // 数据签名验证 $signature = input('signature'); $rawData = Request::instance()->post('rawData'); $signature2 = sha1 ($rawData.
$session_key); if ($signature != $signature2) { return json(['code' => 500, 'msg' => '数据签名验证失败!']); 供应商(“PHP.wxBizDataCrypt”); //加载解密后的文件,从官网下载 $encryptedData = input('encryptedData'); $iv = 输入('iv'); $pc = new \WXBizDataCrypt($APPID, $session_key); $errCode = $pc- >decryptData($encryptedData, $iv, $data); //其中 $data 包含所有用户数据 $data = json_decode($data); 如果($errCode == 0){ 转储($数据); die;/ /打印解密后的用户信息} else { echo $errCode;//打印失败信息} } public function vget($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($信息); 返回$输出;}