写微信小程序的一些总结
新入职一家搞商铺中介的网络公司,入职第一天的任务是写一个微信小程序的PHP后台,虽然之前没有写过小程序的后台,但做下来感觉其实和写网站后台基本差不多。由于之前没有做过小程序后台,所以还是碰到了一些坑的,在这里做一个分享,给大家参考,错误之处欢迎留言指正。

如何获取微信手机号?

微信的手机号是加密存放手机端的,需要发送到后端,后端使用从腾讯API接口拿到的sessionKey解密。下面贴出解密逻辑(php版),只有主体过程,其他细节请自己实现。

verify.php

 //引入微信解密脚本require_once "wxBizDataCrypt.php";//以下是解密手机号的逻辑$appid = "你的id";$appsecret = "你的密码";//这个地址有多个,不稳定的话,可以使用其他的;具体地址将腾讯小程序开发文档$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code";//curl获取sessionKey$sessionKey = getKey($url);$sessionKey = json_decode($sessionKey, true)['session_key'];//以下是解密手机号的逻辑$pc = new WXBizDataCrypt($appid, $sessionKey);//$data用在后面$errCode = $pc->decryptData($encryptedData, $iv, $data);if ($errCode == 0) {//取得手机号$phoneNumber = json_decode($data, true)['phoneNumber'];}//curl请求sessionkey,参数是请求地址
function getKey($url)
{$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);curl_setopt($curl, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');//这是根据           http://curl.haxx.se/ca/cacert.pem 下载的证书,添加这句话之后就运行正常了curl_setopt($curl, CURLOPT_URL, $url);$res = curl_exec($curl);curl_close($curl);return $res;
}

wxBizDataCrypt.php

include_once "errorCode.php";class WXBizDataCrypt
{private $appid;private $sessionKey;/*** 构造函数* @param $sessionKey string 用户在小程序登录后获取的会话密钥* @param $appid string 小程序的appid*/public function __construct( $appid, $sessionKey){$this->sessionKey = $sessionKey;$this->appid = $appid;}/*** 检验数据的真实性,并且获取解密后的明文.* @param $encryptedData string 加密的用户数据* @param $iv string 与用户数据一同返回的初始向量* @param $data string 解密后的原文** @return int 成功0,失败返回对应的错误码*/public function decryptData( $encryptedData, $iv, &$data ){if (strlen($this->sessionKey) != 24) {return ErrorCode::$IllegalAesKey;}$aesKey=base64_decode($this->sessionKey);if (strlen($iv) != 24) {return ErrorCode::$IllegalIv;}$aesIV=base64_decode($iv);$aesCipher=base64_decode($encryptedData);$result=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);$dataObj=json_decode( $result );if( $dataObj  == NULL ){return ErrorCode::$IllegalBuffer;}if( $dataObj->watermark->appid != $this->appid ){return ErrorCode::$IllegalBuffer;}$data = $result;return ErrorCode::$OK;}}

errorCode.php

/*** error code 说明.* <ul>*    <li>-41001: encodingAesKey 非法</li>*    <li>-41003: aes 解密失败</li>*    <li>-41004: 解密后得到的buffer非法</li>*    <li>-41005: base64加密失败</li>*    <li>-41016: base64解密失败</li>* </ul>*/
class ErrorCode
{public static $OK = 0;public static $IllegalAesKey = -41001;public static $IllegalIv = -41002;public static $IllegalBuffer = -41003;public static $DecodeBase64Error = -41004;
}?>

如何保持小程序登陆状态和身份验证

刚开始的时候,对于登陆状态和身份验证,我使用的是cookie,但是发现微信小程序并不支持这个,于是,改为token验证。
利用微信小程序手机号、encryptedData、iv、sessionKey一一对应的关系,前端将前三者保存在本地缓存,服务端存放sessionKey,前端请求时,将验证数据发到后台,后台取出sessionKey解密手机号,将解密的手机号与前端传来的手机号核对,一致即代表用户身份验证成功。
利用上述的验证逻辑,即可实现用户的登陆状态保持和身份验证。

PHP开发微信小程序的经验总结相关推荐

  1. 免费生成微信小程序的经验

    为了做小程序,我试过自己开发,也用过市面上的可以免费一键生成小程序的平台.对于新手来说还是有蛮多需要注意的地方,为避免大家走弯路,就跟大家分享一下我的一些关于免费生成微信小程序的经验. 1.小程序到底 ...

  2. uniapp开发微信小程序,从构建到上线

    前言: 本文主要介绍 uniapp 的基础使用,以及使用 uniapp 在企业开发的过程中的一个详细流程,比较适合第一次使用uniapp 开发微信小程序的伙伴,或者没有过实战经验的小伙伴参考:使用 H ...

  3. uniapp开发微信小程序-7.用户填写表单信息

    uniapp开发微信小程序-7.用户填写表单信息 本章让用户通过表单更新自己的个人信息,也是本系列文章最后一篇入门分享,之后碰到新颖.常用的功能会继续分享给大家,如果大家有任何问题欢迎留言,我会尽快线 ...

  4. uniapp开发微信小程序使用painter绘制海报

    uniapp开发微信小程序使用painter绘制海报 参考文章: 1.简书大佬文章https://www.jianshu.com/p/e9cab600cf6c 2.CSDN大佬文章https://bl ...

  5. 【直播报名】使用mpvue开发微信小程序的最佳实践

    美团点评技术沙龙Online:美团点评技术团队推出的线上分享课程,每月2-3期,我们采用视频直播形式,邀请来自美团点评的技术专家,面向互联网技术从业人员,搭建线上技术分享平台,分享一线实战经验.欢迎关 ...

  6. uniapp开发微信小程序-4.页面跳转与横向滑动

    uniapp开发微信小程序-4.页面跳转与横向滑动 本篇文章主要是想记录一下横向滑动功能,备忘的同时给大家做个分享. 但既然是初级分享系列文章,为了方便新手朋友的上手工作,还是在此之前说一下页面跳转的 ...

  7. 视频教程-从零开发微信小程序-微信开发

    从零开发微信小程序 目前就职于中国唯品会做iOS开发工程师,在良师益友网,麦子学院任职iOS讲师,出版iOS编程学习书籍<7天玩转iOS界面开发>,<初级到AppStore上架> ...

  8. 不知道这几点,千万别开发微信小程序

    [回复"1024",送你一个特别推送] 最近经常在各个技术论坛和社区有人吐槽,说:为什么我开发的微信小程序经常审核不通过?为什么别人的半天就能通过,而我的要来来回回的审核,拒绝,再 ...

  9. uni-app开发微信小程序的简要流程

    uni-app开发微信小程序 开发uni-app的技术条件就是微信小程序及Vue,不熟悉vue的同学要先学习了解一下.不熟悉小程序可以直接看uni文档.https://uniapp.dcloud.io ...

最新文章

  1. linux-shell数据重定向详细分析
  2. 教程:创建简单的 ETL 包
  3. SqlSugar最容易使用的ORM
  4. java递增_java-8 – 如何按组递增
  5. 凸优化第二章凸集 2.2重要例子
  6. OpenCvSharp DnnSuperres图像超分辨率Demo测试
  7. mysql代码创建表博客园_数据库——用代码创建表
  8. 神灵武装908服务器维护,神陵武装127服银河之心开服时间表_神陵武装新区开服预告_第一手游网手游开服表...
  9. 喜马拉雅.xm转化为.mp3格式
  10. 粘性布局 以及粘性布局失效问题
  11. DDR4内存大小等信息计算
  12. 13计算机组装,舞阳中专2012-13年度《计算机组装与维修》期中考试试题
  13. render_template()
  14. 新概念2 课文和单词(8)
  15. 怎么搭建自己的播客_如何开始自己的播客(逐步)
  16. Phython基础笔记
  17. daas 数据即服务_什么是云计算?云的基本特征;云服务模型;--IT基础知识系列...
  18. 解决百度网盘、微软网盘、Google网盘相互转存文件
  19. 【过关斩将】2020年互联网公司运维岗位面试题 -技能篇02
  20. 同一个路由器共享打印机

热门文章

  1. abap语言去除重复项怎么写
  2. Vizard基础操作
  3. 使用c#建立奥运奖牌榜
  4. 在树莓派中Linux环境下rpm包的安装
  5. 先锋年度新品T1,真无线通话降噪蓝牙耳机测评
  6. 解决D3DCompiler_47.dll文件丢失找不到问题
  7. 被诸葛亮的光环掩盖起来的三国英雄
  8. 谷歌浏览器安全证书不受信任_windows7系统下谷歌浏览器提示该网站的安全证书不受信任如何解决...
  9. 阿里数据分析师面试准备二:对阿里数据分析师岗位的理解
  10. 再探JS---eval函数