前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序php开发_php实现简单登录和注册功能

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

作者头像
全栈程序员站长
发布2022-09-30 19:08:42
5.8K0
发布2022-09-30 19:08:42
举报

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

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

8a9f51969f5171587d89e9d4da289349.png
8a9f51969f5171587d89e9d4da289349.png

微信小程序端

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月17日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库一体机 TData
数据库一体机 TData 是融合了高性能计算、热插拔闪存、Infiniband 网络、RDMA 远程直接存取数据的数据库解决方案,为用户提供高可用、易扩展、高性能的数据库服务,适用于 OLAP、 OLTP 以及混合负载等各种应用场景下的极限性能需求,支持 Oracle、SQL Server、MySQL 和 PostgreSQL 等各种主流数据库。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档