-
2021-01-13 05:04:08
前言:
这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。
最近小程序可以说在开发届狠狠的火了一把。微信小程序可以开发游戏,腾讯率先带头,做出了一个跳一跳也是点爆朋友圈。所谓落后就要挨打,那么今天就开始学习小程序的一些小知识吧(本文基于十年磨一剑的tp5)
目录:
微信登录换取token的流程
如何将code变成openid和session_key
抛出错误异常和派发令牌
一:微信登录换取token的流程
多说无益,直接上图
这里介绍的主要是后端开发的流程,前端的不是本文介绍的重点
二:如何将code变成openid和session_key
我们后端开发人员对这个业务是从接受code开始的,由客户端发来一个code码。
我们接受后先进行验证
//创建独立验证器,调用验证器中的验证方法
TokenCheck::instance()->goCheck();
如果不是很清楚验证器的用法的朋友 可以先看看我之前写的验证器的使用
验证规则很简单,就是判断不为空就可以了
下一步就是我们需要把code换取openid 和session_key了
首先我们需要在创建一个service层的类,(为什么要使用service层呢?主要是我为了让模型层粒度细一些。业务比较复杂的就放在service层。这样比较利于后期修改和升级)
class UserToken extends Token
{
protected $wxAppId;
protected $wxAppSecret;
protected $wxLoginUrl;
//构造函数中赋值成员变量
public function __construct($code)
{
$this->wxAppId = config('wx.app_id');
$this->wxAppSecret = config('wx.app_secret');
$this->wxLoginUrl = sprintf(config('wx.login_url'), $this->wxAppId, $this->wxAppSecret, $code);
}
}
写一个构造函数,让在对象生成的时候就赋值成员变量方便使用,这里的appid和appsecret 都是在微信申请小程序的时候就有了的。这里就不介绍了。之前我是把他们全部存在我的配置文件的。使用tp5提供的config函数将他们提出来。最后使用 sprintf方法,将这些参数拼接到wxLoginUrl中,方便我们访问。
熟悉Oauth2.0的朋友都知道,拿到这个url其实就是微信的一个接口,我们去换取授权。
下面我们创建一个getUserToken方法
/**
* 获取用户的令牌方法
* @throws Exception
*/
public function getUserToken()
{
//调用公共函数中的http方法(也就是curl的方法,我也是在网上抄的。存放在common.php中就可以直接用了)
$result = http($this->wxLoginUrl, 'post');
//判断连接是否成功
if ($result[0] == 200) {
//将返回的json处理成数组
$wxResult = json_decode($result[1], true);
//判空
if (empty($wxResult)) {
throw new Exception('获取session_key,openID时异常,微信内部错误');
} else {
//判断返回的结果中是否有错误码
if (isset($wxResult['errcode'])) {
//如果有错误码,调用抛出错误方法
$this->_throwWxError($wxResult);
} else {
//没有错误码,调用私有的派发token方法
$token = $this->_grantToken($wxResult);
return $token;
}
}
} else {
throw new Exception('连接微信服务器失败');
}
}
写好了,方法之后,只需要在控制器中调用这个getUserToken方法就可以了。
大家可能会问,那个_throwWxError和_grantToken方法是干什么的?
可能大家也看出来了,这个getUserToken方法中我们一个获取到了微信返回的结果,也就是$wxResult变量中的数据。如果不出别的意外那么,里面就有我们需要的openid和session_key。这不过,介绍到这里,我们还没有开始使用他们
三:抛出错误异常和派发令牌
这里两个其实就是两个方法,重点是派发令牌。这里的抛出异常。我准备单独写一次介绍。
/**
* 微信获取open_id失败,抛出异常方法
* @param $wxResult
* @throws WxException
*/
private function _throwWxError($wxResult)
{
throw new WxException(
[
'message' => $wxResult['errmsg'],
'errorCode' => $wxResult['errcode']
]
);
}
我们来看_grantToken方法
更多相关内容 -
微信小程序url与token如何设置
2020-12-21 21:20:35本文主要介绍了微信小程序url与token设置详解的相关资料,希望通过本文能帮助到大家解决类似问题,需要的朋友可以参考下,希望能帮助到大家。微信小程序url与token设置详解新浪云应用sae的代码里创建一个weixin.php...本文主要介绍了微信小程序url与token设置详解的相关资料,希望通过本文能帮助到大家解决类似问题,需要的朋友可以参考下,希望能帮助到大家。
微信小程序url与token设置详解
新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码define("TOKEN","myToken");// 后台填写的token,在微信公众平台启用
$wechatObj = new wechatAPI();
$wechatObj->isValid();
class wechatAPI
{
public function isValid()//验证微信接口,验证函数以外的代码和微信公众号开发token设置相同
{
$echoStr = $_GET["echostr"];
if ($this->checkSignature()) {
header('content-type:text');//add,一定要加入header
echo $echoStr;
exit;
}
}
private function checkSignature() //官方的验证函数
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
};
保存后通过url访问,在地址栏复制url,写入微信公众平台中
在微信公众平台的开发设置中,填入以上获得的url和设置的token,自动生成EncodingASEKey
设置完成
相关推荐:
-
微信小程序url与token设置详解
2020-12-21 21:20:30微信小程序url与token设置详解新浪...class wechatAPI{public function isValid()//验证微信接口,验证函数以外的代码和微信公众号开发token设置相同{$echoStr = $_GET["echostr"];if ($this->checkSignature()) ...微信小程序url与token设置详解
新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码
isValid();
class wechatAPI
{
public function isValid()//验证微信接口,验证函数以外的代码和微信公众号开发token设置相同
{
$echoStr = $_GET["echostr"];
if ($this->checkSignature()) {
header('content-type:text');//add,一定要加入header
echo $echoStr;
exit;
}
}
private function checkSignature() //官方的验证函数
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token,$timestamp,$nonce);
sort($tmpArr,SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
};
保存后通过url访问,在地址栏复制url,写入微信公众平台中
在微信公众平台的开发设置中,填入以上获得的url和设置的token,自动生成EncodingASEKey
设置完成
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
-
node.js使用token处理小程序登录
2019-05-25 12:23:33根据用户请求,拿到code,去请求微信接口获取openid,拿到后查询数据库是否存在该用户openid,存在 则将该用户的uuid放入token,返回token给用户,如果不存在,则创建该用户,将该用户的uuid放入token,并返回token...说明
数据库使用 mysql
使用sequelize操作mysql流程说明
根据用户请求,拿到code,去请求微信接口获取openid,拿到后查询数据库是否存在该用户openid,存在 则将该用户的uuid放入token,返回token给用户,如果不存在,则创建该用户,将该用户的uuid放入token,并返回token。
·---------------------------------------------------------------wxuser表模型
const Sequelize = require('sequelize'); let sequelize = require('../db/db') let moment = require('moment'); const wxUser = sequelize.define('wxuser', { // timestamps: false, uuid: { type: Sequelize.UUID, primaryKey: true }, session_key: { type: Sequelize.STRING }, openid: { type: Sequelize.STRING }, createdAt: { type: Sequelize.DATE, defaultValue: Sequelize.NOW, get() { return moment(this.getDataValue('ServiceTime')).format('YYYY-MM-DD HH:mm:ss'); } }, updatedAt: { type: Sequelize.DATE, allowNull: false, defaultValue: Sequelize.NOW, get() { return moment(this.getDataValue('ServiceTime')).format('YYYY-MM-DD HH:mm:ss'); } } }); // 创建完表后注释一下方法******************************* // force: true 如果表已经存在,将会丢弃表 // wxUser.sync({force: true}).then(() => { // // 表已创建 // return; // }); module.exports = wxUser
·------------------------------------------------
数据库模型
let axios = require('axios') let {wxapp} = require('../utils/wxConfig') let wxUser = require('../model/wxUser') const jwt = require('jsonwebtoken'); // 秘钥 const {secret} = require('../utils/jwtKey') let wxLogin = (req, res) => { let code = req.body.code // console.log(wxapp.appId,wxapp.appSecret,code) // 根据请求的code,调用微信接口获取openid axios.get(`https://api.weixin.qq.com/sns/jscode2session?appid=${wxapp.appId}&secret=${wxapp.appSecret}&js_code=${code}&grant_type=authorization_code`).then(result => { // 根据openid查询数据库 let data = result.data wxUser.findOne({ where: { openid: data.openid } }).then(rest => { // 数据库没有该用户openid,则创建并返回token if(!rest) { wxUser.create({uuid: require('../utils/util').uuid,session_key: data.session_key, openid: data.openid}).then(resul =>{ let userInfo={ uuid: resul.uuid } const token = jwt.sign(userInfo, secret, { expiresIn: '1day' }) res.json({token: token}) // 删除uuid缓存,否则每次会取到相同的uuid delete require.cache[require.resolve("../utils/util")] }).catch(err => { // console.log(err) res.json({ msg: err }) }) } else { // 存在该用户,直接返回token let userInfo={ uuid: rest.uuid } const token = jwt.sign(userInfo, secret, { expiresIn: '1day' }) res.json({token: token}) } }) }).catch(err=>{ // console.log(err) res.json({ msg: err }) }) } module.exports = { wxLogin }
jwt可以参考上一篇博客
-
微信小程序-携带Token无感知登陆的网络请求方案
2021-01-13 05:04:05去年写了一个网络请求工具封装的文章微信小程序~ 网络请求工具的封装当时没有考虑登陆须要服务器token验证webtoken 是什么?token 顾名思义就是令牌,也就是一种身份标志。用于和服务器肯定身份,它具备时效性,超过... -
微信小程序开发之登录换取token
2020-12-21 21:20:33本文将带你了解微信小程序开发之登录换取token,希望本文对大家学微信有所帮助前言:这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。最近小程序可以说在开发届... -
微信小程序 SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse ()
2021-04-23 17:40:52该url指向的AD.json的内容 {"text":null,"imgURL":null} 运行错误显示 SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse () at success (index.js? [sm]:28) at Function.i. (VM6677 ... -
微信开发小程序
2021-11-24 11:06:5325、获取验证码的两个步骤 获取短信token 参数token,手机号,systeam再次请求 获取短信 26、app.json 中的布尔值,无需加双引号。 "window": { "navigationBarBackgroundColor": "#fff", "enablePullDownRefresh":... -
JustAuth发布1.13.2版本,新增微信公众平台的授权登录
2019-12-24 20:15:25JustAuth【1】 已发布1.13.2版本,新增微信公众平台的授权登录 文章内所有的引用链接,都会用【x】标注,并且在文末给出详情 本次更新内容如下 新增 增加微信、QQ、支付宝、微博授权登录的帮助文档,请参考帮助... -
微信小程序开发小技巧
2020-08-28 16:04:40微信开发者工具经常热更新不起作用甚至白屏,重新编译也不行,只能强行退出后再次打开; 跟上一条类似,有时候一点样式出错,预览整个都白屏,调试器里也不说哪里的问题,直接就给你弃疗不显示,重新编译也无法解决... -
微信小程序access_token fail: {“errcode“:41002,“errmsg“:“appid missing rid: 60d921ff-6557c15f-59...
2021-06-28 09:16:201、可能是字段名称错误导致 "component_AppId":"AppId_value" ,应该是"component_appid":"AppId_value" 2、可能是你设置的全局变量发生了冲突(“APPID”和“App secret”) 尝试获取一下看看是否和你设置的值一致... -
微信小程序登录,分享,获取手机号,支付
2021-10-06 10:15:011.登录 ## 调用wx.login获取code ## 用wx.request发送code,返回token ## 把token存入storage... menus:["shareAppMessage","shareTimeline"] //第一个词语代表朋友圈,第二个代表微信好友 }) ## 点击分享按钮分享 -
JAVA开发微信小程序订阅消息服务端
2019-12-30 19:58:50微信小程序的开发(非云服务) 开发背景 由于项目需要实现手机端推送消息的的功能,ios和安卓的开发学习成本太高了(尤其是安卓每年一个大版本,想想就脑瓜子疼),所以就想到了最近比较火的微信小程序,看了小程序... -
微信小程序里的触底加载实现流程
2021-04-26 17:54:43"RJQ1YJ7APA", "Cookie":"kw_token=RJQ1YJ7APA" }, success:res=>{ this.setData({ singerList:[...this.data.singerList,...res.data.data.artistList], }) } }) }, // 监听页面加载 onLoad:function(options){ ... -
【微信小程序】云函数报错:Unexpected token *
2020-02-24 16:32:01云函数日志信息 {“errorCode”:1,“errorMessage”:“user code exception caught”,“stackTrace”:“Unexpected token *”} 3.使用got发送http请求 问题原因 got新版的js文件在云函数端无法正常解析语法function*... -
微信小程序授权登陆代码 前台
2018-09-27 14:59:38console.log("Token==============" + data.map.Token); console.log("OpenId==============" + data.map.OpenId); } else{ console.log("返回代码:" + data.code + "返回信息:" + data); ... -
asp.net core 3.x 微信小程序登录库(也可用于abp)
2021-08-14 03:33:29库版本.net core 3.1我的abp版本:abp5.3 .net core 3.1请先看微信小程序官方文档。下面说说abp中如何使用。原生asp.net core可以参考实现服务端配置1、安装nuget包Install-Package BXJG.WeChart -Version 1.0.02、... -
微信小程序客服消息
2020-08-10 21:41:03在下面一步微信小程序后台开发设置的时候前提是此接口已经完成、否则微信小程序会验签失败! package com.cong.controller; import java.security.MessageDigest; import java.util.Arrays; import javax.servlet.... -
微信小程序Taro + React开发实践
2022-04-23 12:29:29微信小程序Taro + React开发实践 微信小程序原生开发有一套自己的规范和写法,开发体验十分类似Vue,但如果你想减少学习成本,那么Taro框架是一个在此基础上又封装了一层的轮子,从社区热度到开发体验上都十分优秀,... -
微信小程序发布时需要校验违法违规内容、图片,Java后端接口
2020-07-06 12:03:15/** * 微信小程序 * 校验文字/图片是否含有违法违规内容 * @author Administrator */ public class ChickContent { /** * 检查图片是否含有违法违规内容 * @param inputStream * @param contentType * @... -
微信小程序模板消息推送
2021-12-24 10:42:54微信小程序模板消息推送 -
微信小程序实现的校园查分助手
2022-03-01 19:18:02校园查分助手-微信小程序背景准备工作思路总结二级目录三级目录 背景 本科时我们的成绩系统在欧洲,网络延迟很严重,而且查分的时候需要跳转好多个页面,非常麻烦。出分的时候本来就够紧张的了。。还得看页面转圈圈... -
PHP-Educational-Administration
2021-04-28 08:45:18微信查询教务处成绩、用户信息===============基于ThinkPHP5 基础上开发的微信查成绩、发红包等ThinkPHP5的运行环境要求PHP5.4以上。目录结构初始的目录结构如下:www WEB部署目录(或者子目录)├─application 应用... -
微信小程序的图片上传及图片预览功能
2021-11-11 10:23:15本文为大家分享微信小程序的图片上传及图片预览功能,如下图所示: 需求分析: 图片上传可以从本地图库选择也可调用相机进行拍照上传 上传完成之后图片可以进行删除、预览等功能 图片上传至服务器进行后台调用 ... -
C# winform访问微信小程序云数据库
2021-01-20 00:36:41开篇先说明最重要的一点,微信小程序提供的HTTP API访问云数据库,需要post的数据格式一定要严格按照官方文档的格式来post,包括标点符号!具体怎样访问微信小程序云数据库,请查看我... -
微信小程序入门(四):miniprogram-ci + Jenkins + git 实现小程序代码的上传等操作
2021-09-06 14:49:41这个命令格式也是参考的:微信官方文档.小程序 ---> 开发辅助 --->CI 10.27补图: 2.2 Jenkins中运行构建任务,在小程序页面检查上传结果,没问题 3. 实现方式二 3.1 在Jenkins命令行(Windows批处理命令)... -
微信小程序登陆流程
2021-07-25 20:51:35微信小程序登陆流程 环境:springboot、小程序(ts) 官方实例: ...流程1:微信小程序通过wx.login获取到code,并将该code发送到后台, 这里我选择的是java后台, 当然也可以是node甚至... const token: string = wx. -
微信网页开发拉取用户信息时乱码问题
2020-10-19 16:20:04但是后端在拿到openID和access_token之后在最后一步拉取用户信息的时候,遇到了乱码问题,特别是中文。 解决方案如下(python): user_info_response = requests.get(getuserinfourl)#getuserinfourl为拉取用户...