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

小程序php开发_php实现简单登录和注册功能微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。微信小程序端1).调用wx.login获取code。2).调用wx.getuserinfo获取签名所需的rawdata,signatrue,encryptdata。3).发起请求将获取的数据发送的后台。login:function(e){varthat=this;wx.login({success…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

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=” . $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’ => ‘数据签名验证失败!’]);

}

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

$encrypteddata = input(‘encrypteddata’);

$iv = input(‘iv’);

$pc = new \wxbizdatacrypt($appid, $session_key);

$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.net/192591.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图片链接如何在excel里转成图片_mdf文件怎么转成Excel

    图片链接如何在excel里转成图片_mdf文件怎么转成Excel前阵子从数据库中导出数据给业务,但是图片是个URL,业务需要在Excel中直接显示图片,因此在网上爬了很多VB脚本尝试修改,最终将Excel中的图片URL转换成了图片。VB脚本LoadImage.bas:’charsetGB2312.Excel中的图片链接转为图片文件AttributeVB_Name=”LoadImage加载图片”SubLoadImage()

    2022年9月22日
    1
  • 《关于VirtualBox在桥接模式下无法联网 解决方案》

    《关于VirtualBox在桥接模式下无法联网 解决方案》博主遇到了这个问题,百度了大半天还是没有解决到,可能是由于下面链接的文章的标题关键词比较偏,很难精确的定位到此文章,于是博主就决定总结归纳了一下,希望对大家有所帮助。。经过无数次的百度,早已厌倦粘贴党,问牛答马党,错误党,大大的浪费了大家的时间,于是博主开了这篇文章..我们在VBOX上面安装了Linux之后,VBOX默认网络设置是使用NAT模式的,这种方式宿

    2022年5月8日
    650
  • pycharm windows 重置_pycharm重置设置,恢复默认设置「建议收藏」

    pycharm windows 重置_pycharm重置设置,恢复默认设置「建议收藏」备忘,备忘,备忘2020-03-23日更新,重置有问题的,请参考底部官网链接.(另外:喷我并不能解决你的问题.)window系统找到下方目录–>删除.再重新打开pycharm#WindowsVista,7,8,10:\Users\\.例:C:\Users\Administrator\.PyCharm2018.1#WindowsXP:\DocumentsandSett…

    2022年8月27日
    1
  • java打印数组内容

    java打印数组内容在java中直接输出数组只能得到引用地址byte[]bytes={1,2,3,4,5};int[]ints={1,2,3,4,5};System.out.println(bytes);System.out.println(ints);输出[B@1b6d3586[S@4554617c打印数组内容publicstaticvoidmain(Stringargs

    2022年4月29日
    49
  • 交通信号灯控制器C语言代码,交通信号灯控制器代码及说明.doc

    交通信号灯控制器C语言代码,交通信号灯控制器代码及说明.docPAGEPAGE3课程设计报告课程名称:FPGA现代数字系统设计设计名称:交通信号灯控制器姓名:***学号:2010000379专业:通信指导教师:***起止日期:2010.12.25-2011.1.9课程设计任务书设计名称:设计要求:(1)设计一个交通信号灯控制器…

    2022年9月24日
    0
  • java学习笔记 head first java

    java学习笔记 head first java文章目录golangtojavaHeadFirstJavagolangtojavagolang工程师,最近开始学习一些javaHeadFirstJavainstanceof相当于断言Dogd=newDog()Objecto=dif(oinstanceofDog){ Dogd=(Dog)o}interface在java和golang中基本一致,java中的interfece是一个100%抽象类,所有函数都是抽象的。必须要用implements显

    2022年7月7日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号