一、首先当我们借助小程序实现我们的网站搭建时,就需要使用小程序自带的一些功能;且需要根据该小程序获取到的一些参数存储到对应的数据库中。

openID:每个微信用户使用该小程序时都会产生一个openID,且该openID是唯一标识,因此可将其存储在用户表中。

token:这个token值是我们自己在内部生成的,主要是为了安全获取UID,UID在数据库中存储中的是数据记录的唯一ID,如果单纯的传入UID值来获取

该UID的信息值的话,会不安全,因此需要通过token来获取,如何获取我会提供一系列代码;

//随意生成的TOKEN值public static function generateToken(){$randChar = getRandChar(32);$timestamp = $_SERVER['REQUEST_TIME_FLOAT'];$tokenSalt = config('secure.salt');return md5($randChar . $timestamp . $tokenSalt);}
public static function verifyToken($token){$exist = Cache::get($token);if($exist){return true;}else{return false;}}//获取以token为键值的部分,获取对应的值public static function getCurrentTokenVar($key){$request=Request::instance();$token = input("token");if($token==""){$token=$request->header("token");}$vars = Cache::get($token);if (!$vars){throw new TokenException();}else {if(!is_array($vars)){$vars = json_decode($vars, true);}if (array_key_exists($key, $vars)) {return $vars[$key];}else{
//                throw new Exception('尝试获取的Token变量并不存在');return false;}}}

function __construct($code){$this->code=$code;$this->wxAppId=config("wx.app_id");$this->wxAppSecret=config("wx.app_secret");$this->wxLoginUrl=sprintf(config("wx.login_url"),$this->wxAppId,$this->wxAppSecret,$this->code);}/** 登录*/public function get(){$result = curl_get($this->wxLoginUrl);// 注意json_decode的第一个参数true// 这将使字符串被转化为数组而非对象$wxResult = json_decode($result, true);if (empty($wxResult)) {// 为什么以empty判断是否错误,这是根据微信返回// 规则摸索出来的// 这种情况通常是由于传入不合法的codethrow new Exception('获取session_key及openID时异常,微信内部错误');}else {// 建议用明确的变量来表示是否成功// 微信服务器并不会将错误标记为400,无论成功还是失败都标记成200// 这样非常不好判断,只能使用errcode是否存在来判断$loginFail = array_key_exists('errcode', $wxResult);if ($loginFail) {$this->processLoginError($wxResult);}else {return $this->grantToken($wxResult);}}}//颁发令牌private function grantToken($wxResult){// 此处生成令牌使用的是TP5自带的令牌// 如果想要更加安全可以考虑自己生成更复杂的令牌// 比如使用JWT并加入盐,如果不加入盐有一定的几率伪造令牌//        $token = Request::instance()->token('token', 'md5');$openid = $wxResult['openid'];$user = User::getByOpenID($openid);if (!$user)// 借助微信的openid作为用户标识// 但在系统中的相关查询还是使用自己的uid
        {$uid = $this->newUser($openid);$type=0;}else {$uid = $user->id;$type=$user->type;}$cachedValue = $this->prepareCachedValue($wxResult, $uid,$type);$token = $this->saveToCache($cachedValue);return $token;}private function processLoginError($wxResult){throw new WeChatException(['msg' => $wxResult['errmsg'],'errorCode' => $wxResult['errcode']]);}/**创建一个新用户* @param $openid* @return mixed*/private function newUser($openid){// 有可能会有异常,如果没有特别处理// 这里不需要try——catch// 全局异常处理会记录日志// 并且这样的异常属于服务器异常// 也不应该定义BaseException返回到客户端$user = User::create(['openid' => $openid]);return $user->id;}/**准备存入缓存的数据* @param $wxResult* @param $uid* @return mixed*/private function prepareCachedValue($wxResult, $uid,$type){$cachedValue = $wxResult;$cachedValue['uid'] = $uid;$cachedValue['type']=$type;$cachedValue['scope'] =config("secure.user");;return $cachedValue ;}/*** 存入缓存*/private function saveToCache($wxResult){$key = self::generateToken();$value = json_encode($wxResult);$expire_in = config('secure.time');$result = cache($key, $value, $expire_in);if (!$result){throw new TokenException(['msg' => '服务器缓存异常','errorCode' => 10005]);}return $key;}

二、当获取到token时,需要在小程序的缓存中也存入该token值;

wx.setStorageSync('token', res.data.token);

使用小程序请求数据时,将token的值存入Header中,后台获取到Token的值,会进行相应的处理,获取到对应的UID

转载于:https://www.cnblogs.com/baiyangLI/p/9300147.html

做小程序的流程总结(基本篇)相关推荐

  1. 你的产品适不适合做微信小程序?你需要这篇产品逻辑分析

    自2017年1月9日张小龙宣布万众瞩目的"微信小程序"正式上线了.以名字看,感觉像是突出了"将你的程序接入微信"的意思. 我们此前分析过微信的功能迭代节奏:一般 ...

  2. ui测试怎么做?依据文档有哪些_微信小程序开发流程有哪些?各个环节注意事项...

    微信小程序开发流程有哪些?各个环节注意事项是什么?微信小程序开发有哪些注意事项,开发流程是怎样的?下面就一起来看看吧. 1.微信小程序开发之注册小程序 在开发小程序之前,首先就是要注册一个小程序.不过 ...

  3. 微店铺是什么?做一个微店铺小程序的流程

    微店铺是什么? 微店铺是指在微信平台上主要通过微信小程序方式创建的一个在线店铺.微店铺和传统的电商平台相比,具有更低的成本.更好的管理.更便捷的体验等优点,同时也有利于商家与用户之间的互动和沟通. 如 ...

  4. 微信小程序怎么在wxml中插入多个图片_兰州小程序开发流程费用推荐品牌_便企网...

    兰州小程序开发流程费用推荐品牌,有人说既然开发文档这么详细那直接跟着开发文档来学习就可以轻松入门,你有这份自信是非常好的,也希望你有很强的学习能力,但对于很多的普通人新手来说(当然也包括我),做作品的 ...

  5. 武装你的小程序——开发流程指南

    前端工程本质上是软件工程的一种.软件工程化关注的是性能.稳定性.可用性.可维护性等方面,注重基本的开发效率.运行效率的同时,思考维护效率.一切以这些为目标的工作都是"前端工程化". ...

  6. 实体店为什么要做小程序

    实体店为什么要做小程序 如果要让我来回答这个问题,那么我的答案会是:因为你的客户在用微信啊!但很多店老板,似乎认为这个理由还不够充足,那好,我今天就跟大家详细的聊一下. 一.大势所趋 这四个字听起来特 ...

  7. 微信小程序开发详细步骤(企业小程序开发流程)

    今天珍奶bb给大家简单唠唠微信小程序开发详细步骤(企业小程序开发流程)? 微信小程序制作流程是什么?微信小程序制作模板套用怎么操作?今天珍奶bb给大家简单唠唠微信小程序制作流程是什么? 在唠微信小程序 ...

  8. 地表最全企业级微信小程序开发流程(帮你尽可能减少开发周期)

    如果你读到这篇文章,很庆幸从注册到上线至少节约90天开发周期 写在前面:大部分同学做企业级微信小程序应该有两种情况.第一为企业做开发(这类情况后期账号准备和发布流程就比较简单),第二就是做小程序想要开 ...

  9. 支付宝小程序授权登录 (Java 后台篇)

    支付宝小程序授权登录 (Java 后台篇) 开始 : 实现支付宝小程序授权登录功能, 本文主要是介绍支付宝小程序授权登录流程,与关键登录与处理代码. 流程 : 关键代码 : 1.获取用户信息 /*** ...

最新文章

  1. Android TrafficStats类的使用
  2. 查看TCP进程各状态连接数 IP封掉 的两个脚本
  3. JavaScript 技术篇-一段js代码展示可以随鼠标移动变换样式的卡通人物,动态女生眼睛跟着鼠转动
  4. CSS中的选择器之类选择器和id选择器
  5. c#winform pictureBox使用url加载图片
  6. 如何设计数据库表实现完整的RBAC(基于角色权限控制)
  7. LeetCode 274. H指数(排序,哈希)
  8. python-第一个python程序-向世界问好
  9. 转: React系统的入门系统
  10. (转) 淘淘商城系列——解决KindEditor上传图片浏览器兼容性问题
  11. Fixjs——自定义事件处理
  12. (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数
  13. Vue.js(2.x)之插值
  14. 第五章 线性回归 学习笔记上
  15. vue下载图片到本地的方法
  16. 操作系统期末复习题库
  17. 魔兽世界插件开发:Beginning Lua with World of Warcraft Add-ons 中文翻译及学习 (1.1)
  18. 从农民到“互联网+农牧业”老板 谈谈我的站长之路
  19. TRC格列卫(甲磺酸伊马替尼)病毒-宿主融合抑制剂方案
  20. python调用360浏览器浏览网页

热门文章

  1. flask接收前台的form数据
  2. Gerrit的用法及与gitlab的区别
  3. C++ 面向对象(三)—— 类之间的关系
  4. [C++11 std::thread] 使用C++11 编写 Linux 多线程程序
  5. 移植gdb到DM368 IPNC中 linux arm gdb
  6. js获取cookie获取不到问题 vue获取cookie以及获取不到问题
  7. [vue] vue部署上线前需要做哪些准备工作?
  8. [vue] 有使用过vue吗?说说你对vue的理解
  9. [css] 实现单行文本居中和多行文本左对齐并超出显示“...“
  10. 工作301:substring使用