精华内容
下载资源
问答
  • 微信小程序登录换取token
    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设置详解的相关资料,希望通过本文能帮助到大家解决类似问题,需要的朋友可以参考下,希望能帮助到大家。微信小程序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验证webtoken 是什么?token 顾名思义就是令牌,也就是一种身份标志。用于和服务器肯定身份,它具备时效性,超过...
  • 本文将带你了解微信小程序开发之登录换取token,希望本文对大家学微信有所帮助前言:这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。最近小程序可以说在开发届...
  • 该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:53
    25、获取验证码的两个步骤 获取短信token 参数token,手机号,systeam再次请求 获取短信 26、app.json 中的布尔值,无需加双引号。 "window": { "navigationBarBackgroundColor": "#fff", "enablePullDownRefresh":...
  • JustAuth【1】 已发布1.13.2版本,新增微信公众平台的授权登录 文章内所有的引用链接,都会用【x】标注,并且在文末给出详情 本次更新内容如下 新增 增加微信、QQ、支付宝、微博授权登录的帮助文档,请参考帮助...
  • 微信开发者工具经常热更新不起作用甚至白屏,重新编译也不行,只能强行退出后再次打开; 跟上一条类似,有时候一点样式出错,预览整个都白屏,调试器里也不说哪里的问题,直接就给你弃疗不显示,重新编译也无法解决...
  • 1、可能是字段名称错误导致 "component_AppId":"AppId_value" ,应该是"component_appid":"AppId_value" 2、可能是你设置的全局变量发生了冲突(“APPID”和“App secret”) 尝试获取一下看看是否和你设置的值一致...
  • 1.登录 ## 调用wx.login获取code ## 用wx.request发送code,返回token ## 把token存入storage... menus:["shareAppMessage","shareTimeline"] //第一个词语代表朋友圈,第二个代表微信好友 }) ## 点击分享按钮分享
  • JAVA开发微信小程序订阅消息服务端

    千次阅读 热门讨论 2019-12-30 19:58:50
    微信小程序的开发(非云服务) 开发背景 由于项目需要实现手机端推送消息的的功能,ios和安卓的开发学习成本太高了(尤其是安卓每年一个大版本,想想就脑瓜子疼),所以就想到了最近比较火的微信小程序,看了小程序...
  • "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*...
  •  console.log("Token==============" + data.map.Token);  console.log("OpenId==============" + data.map.OpenId);  }  else{  console.log("返回代码:" + data.code + "返回信息:" + data); ...
  • 库版本.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框架是一个在此基础上又封装了一层的轮子,从社区热度到开发体验上都十分优秀,...
  • /** * 微信小程序 * 校验文字/图片是否含有违法违规内容 * @author Administrator */ public class ChickContent { /** * 检查图片是否含有违法违规内容 * @param inputStream * @param contentType * @...
  • 微信小程序模板消息推送

    千次阅读 2021-12-24 10:42:54
    微信小程序模板消息推送
  • 校园查分助手-微信小程序背景准备工作思路总结二级目录三级目录 背景 本科时我们的成绩系统在欧洲,网络延迟很严重,而且查分的时候需要跳转好多个页面,非常麻烦。出分的时候本来就够紧张的了。。还得看页面转圈圈...
  • 微信查询教务处成绩、用户信息===============基于ThinkPHP5 基础上开发的微信查成绩、发红包等ThinkPHP5的运行环境要求PHP5.4以上。目录结构初始的目录结构如下:www WEB部署目录(或者子目录)├─application 应用...
  • 本文为大家分享微信小程序的图片上传及图片预览功能,如下图所示: 需求分析: 图片上传可以从本地图库选择也可调用相机进行拍照上传 上传完成之后图片可以进行删除、预览等功能 图片上传至服务器进行后台调用 ...
  • 开篇先说明最重要的一点,微信小程序提供的HTTP API访问云数据库,需要post的数据格式一定要严格按照官方文档的格式来post,包括标点符号!具体怎样访问微信小程序云数据库,请查看我...
  • 这个命令格式也是参考的:微信官方文档.小程序 ---> 开发辅助 --->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.
  • 但是后端在拿到openID和access_token之后在最后一步拉取用户信息的时候,遇到了乱码问题,特别是中文。 解决方案如下(python): user_info_response = requests.get(getuserinfourl)#getuserinfourl为拉取用户...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 177
精华内容 70
关键字:

微信小程token