小程序php开发_php实现简单登录和注册功能

2022-09-30 19:08:42 浏览数 (15)

大家好,又见面了,我是你们的朋友全栈君。

微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。

微信小程序端

1).调用wx.login获取 code 。

2).调用wx.getuserinfo获取签名所需的 rawdata , signatrue , encryptdata 。

3).发起请求将获取的数据发送的后台。

login: function(e) {

var that = this;

wx.login({

success: function(res){

var code = res.code; //获取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,

“signature” : signature,

‘iv’ : iv,

‘encrypteddata’: encrypteddata

},

method: ‘get’,

success: function(info){

console.log(info);

}

})

}

})

},

})

}

服务端

需下载微信官方解密文件。 ——

1.解压后会出现不同语言的文件包,这里用的是php,将文件夹放到vendor目录下。

2.根据登陆凭证 code 获取 session_key 和 openid。

3.数据签名校验。

4.数据解密。

5.生成第三方3rd_session并返回微信小程序端。

/*

*登录(调用wx.login获取)

* @param $code string

* @param $rawdata string

* @param $signatrue string

* @param $encrypteddata string

* @param $iv string

* @return $code 成功码

* @return $session3rd 第三方3rd_session

* @return $data 用户数据

*/

public function login()

{

//开发者使用登陆凭证 code 获取 session_key 和 openid

$appid = ”;//自己配置

$appsecret = ”;//自己配置

$code = input(‘code’);

url = “https://api.weixin.qq.com/sns/jscode2session?appid=” . appid . “&secret=” . appsecret . “&js_code=” .

arr = this->vget(

arr = json_decode(arr, true);

openid = arr[‘openid’];

session_key = arr[‘session_key’];

// 数据签名校验

$signature = input(‘signature’);

$rawdata = request::instance()->post(‘rawdata’);

signature2 = sha1(rawdata .

if (signature != signature2) {

return json([‘code’ => 500, ‘msg’ => ‘数据签名验证失败!’]);

}

vendor(“php.wxbizdatacrypt”); //加载解密文件,在官方有下载

$encrypteddata = input(‘encrypteddata’);

$iv = input(‘iv’);

pc = new wxbizdatacrypt(appid,

errcode = pc->decryptdata(encrypteddata, iv, data); //其中data包含用户的所有数据

data = json_decode(data);

if ($errcode == 0) {

dump($data);

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($info);

return $output;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192591.html原文链接:https://javaforall.cn

0 人点赞