精华内容
下载资源
问答
  • @Weixin需要配置value值,这个实际就是微信服务器配置里面URL最后的部分,当然包含域名和web应用的下文,切记,能包含web应用下文,其他4个部分配置内容也是公众号配置内容,我们只需要登录到公众号看下填...
  • Amango 芒果微信公众号管理框架是基于 Onethink 开源框架进行的二次开发,它继承Onethink的基本CMS管理理念,丰富了对微信公众号管理的更好得支持。 因此,它既可以兼容Onethink的插件也支持微信插件。本系统专注于...
  • 首先要知道一些基本知识:当微信小程序在会话时间想要再次向服务端请求时,需要再次登录,只需要把sessionid放进cookie中传递过去就可以了,为了防止跨域请求,还要携带csrftoken。微信小程序像浏览器那样在...

    本教程基于Django后端,在cookies的命名和csrftoken的接收上可能和其他语言框架的有所不同。

    首先要知道一些基本知识:当微信小程序在会话时间内想要再次向服务端请求时,不需要再次登录,只需要把sessionid放进cookie中传递过去就可以了,为了防止跨域请求,还要携带上csrftoken。微信小程序不像浏览器那样在二次请求时会自动携带cookiescookies需要我们自己写上。

    总体交流过程

    1、微信小程序使用wx.login()获取到code后发送给服务端

    2、服务端向微信服务器请求得到openidsession_key,后端处理注册登录后,通过session记录用户登录状态,最后返回给微信小程序的cookiescsrftokensessionid

    3、微信小程序二次请求时在请求头部携带cookiecookie中存放上次请求得到的csrftokensessionid,并且请求头部中还要有一个X-CSRFToken键值对。

    关键部分的详细操作

    第一步:微信小程序本地缓存 csrftoken 和 sessionid

    首先在第一次登录请求时就要把csrftokensessionid获取下来,并分别保存在缓存中。(为什么要分别保存?因为等下二次请求时要分别用到)

    wx.login({
      success: res => {
        if (res.code) {
          wx.request({
            url: xxx,
            method: 'POST',
            data: { 'code': res.code },
            success: res => {
              if (res.statusCode == 200) { //服务端处理正常,登录成功
                //wx.setStorageSync("cookies", res.header["Set-Cookie"]); //存进去的是所有cookie串在一起的字符串,包括csrftoken和sessionid,但我们不要用这个方式,原因见下文介绍
                wx.setStorageSync('csrftoken', res.cookies[0])
                wx.setStorageSync('sessionid', res.cookies[1])
              }
            },
          });
        }
      }
    });
    

    在上面你看到了,我在保存csrftokensessionid到缓存时,使用的是res.cookies,而不是res.header["Set-Cookie"],本来微信小程序接收到的cookies就是和 res.header["Set-Cookie"] 一样的,但在二次提交时这个东西并没有想象中那样可以直接使用。。

    第二步:微信小程序二次请求时携带 cookie 和 X-CSRFToken

    本地缓存中已经有csrftokensessionid了,二次请求时要先处理得出这两样东西:

    1、csrftokensessionid合并后的cookie

    2、纯粹的、没有cookie信息的csrftoken

    其实第一项中的cookie本来是可以直接用res.header["Set-Cookie"]这个得到的cookies字符串就可以了的,但不知道为什么,这个字符串中的csrftokensessionid这两个cookie并不是用分号;和空格隔开的,而是用一个逗号,隔开,这个cookie发送到后端是识别不出来的。。

    所以需要这样设计:

    let cookie = wx.getStorageSync("csrftoken") + '; ' + wx.getStorageSync("sessionid")
    

    而纯粹的、没有cookie信息的csrftoken又是怎么回事?

    用过ajaxDjango服务端发送请求的人都知道,在headers中是要填写X-CSRFToken键值对的,而在Django的模板语言中,我们往往可以直接用X-CSRFToken:'{{ csrftoken }}' 这样的简单方式来生成纯粹的csrftoken,但微信小程序可没有这个模板语言,而在我们保存的cookie中的那个csrftoken是携带着其他信息的,所以要我们去截取出纯粹的csrftoken

    截取方式:

    csrftoken = wx.getStorageSync("csrftoken").split(';')[0].split('=')[1]
    

    对这个截取方式不理解的可以展开wx.getStorageSync("csrftoken")看一下就明白了,其实就是对这个字符串先按分号分割然后取第一个元素再按等号分割后取第二个元素,也就是纯粹的csrftoken

    所以我们在二次请求时,应该这样:

    wx.request({
      url: xxx,
      data: "",
      method: 'POST',
      header: {
        'cookie': wx.getStorageSync("csrftoken") + '; ' + wx.getStorageSync("sessionid"),
        'X-CSRFToken': wx.getStorageSync("csrftoken").split(';')[0].split('=')[1]
      }
    })
    

    至此,我们就实现了微信小程序携带cookiecsrftoken向Django服务端请求的需求。

    注意:微信小程序wx.requestcookie是单数,header也是单数。

    我开了个微信公众号,经常在上面发一些个人思考和计算机技术、技巧的文章,欢迎来关注一下哈:
    在这里插入图片描述

    展开全文
  • 新增:引入MUI框架, 最大限度贴合原生APP操作体验 新增:简历多个意向地区 新增:后绑定**、邮箱直接登录 新增:企业会员新增消费模式(套餐消费) 新增:套餐续费、新购自定义累加、覆盖功能 新增:企业套餐等增值...
  • 可以做校园的,也可以做校区间的,可封装成APP或微信版,告别QQ空间的表白墙吧。 一键安装版,带详细配置说明。 安装说明:  安装完成右登录后点击头图进入后台 找到插件 安装表白墙配置插件 然后 找到...

    介绍:

    可以做校园内的,也可以做校区间的,可封装成APP或微信版,告别QQ空间的表白墙吧。
    一键安装版,带详细配置说明。

    安装说明: 
    安装完成右上角登录后点击头图进入后台 找到插件 安装表白墙配置插件 然后 找到模板 将表白墙模板同时设置为 移动端 和pc端模板
    后台配置插件一定要点安装!
    不然发布表白不显示!
    后台提示框架升级先不要升级


    网盘下载地址:

    http://kekewl.cc/DYOwRL4kIoY


    图片:








    展开全文
  • 点评系统一如既往的好用,功能细化到令人发指的地步,值得推荐,本资源像论坛那样购买...增加 框架内分站类接管当前城市信息读取 改进 分站以及URL解析代码 改进 所有现金支取必须进行双表验证 改进 后台广告列表改进
  • QQ、微信等用的都是私有协议,但是个人开发者要短时间从0到1编写一个即时聊天框架现实。现在有许多提供IM功能的框架或公开协议,比如蘑菇街、XMPP等。XMPP虽然存在一些问题,但是推出的早,因此帮助文档较多,...

    概述

    即时聊天功能是许多APP的刚需。QQ、微信等用的都是私有协议,但是个人开发者要短时间内从0到1编写一个即时聊天框架并不现实。现在有许多提供IM功能的框架或公开协议,比如蘑菇街、XMPP等。XMPP虽然存在一些问题,但是推出的早,因此帮助文档较多,对于新手或者时间上较紧迫的开发者来说,用XMPP实现IM功能是一个很好的选择。

    前期准备

    服务器端需要下载并配置Openfire,而客户端则采用Smack实现。
    服务器端建议申请一个云服务器,这样自己的电脑不用时刻开机,而且配置也方便很多。
    将服务器端Openfire配置完后,记下自己服务器的域名,这在之后的客户端编程中会用到。

    客户端使用Smack

    我们以Android Studio编程为例进行演示。

    权限配置、压缩包导入等

    1.在“AndroidManifest.xml”文件中添加如下代码:

    <uses-permission android:name="android.permission.INTERNET" />
    

    上述代码的功能是申请网络使用权限,因为即时聊天需要使用网络。
    2.在“build.gradle”文件中添加如下代码:

    //导入smack相关
    repositories {
        maven {
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenCentral()
    }
    
    //导入smack相关
        implementation 'org.igniterealtime.smack:smack-android-extensions:4.2.0'
        implementation 'org.igniterealtime.smack:smack-experimental:4.2.0'
        implementation 'org.igniterealtime.smack:smack-tcp:4.2.0'
    

    上述代码的功能是导入Smack相关的资源文件(压缩包)。本文以Android Studio为例,其他平台的资源文件导入方式在官网也都有详细的文档说明。

    客户端连接到服务器

    具体代码如下:

    public AbstractXMPPConnection mConnection(Context context) {
            XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
            //设置XMPP域名
            try {
                configBuilder.setXmppDomain("0.0.0.0");
            } catch (XmppStringprepException e) {
                e.printStackTrace();
            }
            //设置主机位置(即服务器ip)
            try {
                configBuilder.setHostAddress(InetAddress.getByName("0.0.0.0"));
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            //设置端口号
            configBuilder.setPort(5222);
            //设置不验证,否则需要TLS验证
            configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
            //设置更改用户当前状态(在线、离线等)
            configBuilder.setSendPresence(false);
            AbstractXMPPConnection connection = new XMPPTCPConnection(configBuilder.build());
            // 连接到服务器
            try {
                connection.connect();
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return connection;
        }
    

    注:
    1.上述代码中“0.0.0.0”即前文所提到的自己的服务器域名;
    2.建议将所有小功能(如连接到服务器、注册、登录等)分别使用子函数实现,之后作为接口调用。
    3.在所有操作做完后,要调用“.disconnect()”函数断开与服务器的连接。

    用户注册/登录功能

    (一)用户注册功能:

    connection = xmppManage.mConnection(LoginActivity.this);
                            AccountManager accountManager = AccountManager.getInstance(connection);
                            accountManager.sensitiveOperationOverInsecureConnection(true);
                            try {
                                accountManager.createAccount(Localpart.from(Username), Password);
                                //注册成功,则提示
                                Toast.makeText(LoginActivity.this,"注册成功,请登录!",Toast.LENGTH_SHORT).show();
                            } catch (SmackException.NoResponseException e) {
                                e.printStackTrace();
                            } catch (XMPPException.XMPPErrorException e) {
                                e.printStackTrace();
                            } catch (SmackException.NotConnectedException e) {
                                e.printStackTrace();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            } catch (XmppStringprepException e) {
                                e.printStackTrace();
                            }
                            connection.disconnect();
    

    (二)用户登录功能:

    /**
         * 用户登录功能实现
         */
        public boolean login(String userName, String passWord, AbstractXMPPConnection connect) {
            Log.d("记录", "正在登录...");
            try {
                // 判断是否登录
                if (!connect.isAuthenticated()) {
                    connect.login(userName, passWord);
                    //接收离线信息,设为离线状态
                    Presence presence = new Presence(Presence.Type.unavailable);
                    connect.sendStanza(presence);
                    Log.d("记录", "登录成功!");
                    return true;
                }
                Log.d("记录", "已被登录,登录失败...");
                return false;
            } catch (XMPPException | SmackException | IOException e) {
                e.printStackTrace();
                Log.d("记录", "登录出错...");
                return false;
            } catch (InterruptedException e) {
                e.printStackTrace();
                return false;
            }
        }
    

    注:登录成功后,要先将用户状态设置为离线,因为在线状态无法接收离线消息。

    离线消息接收

    代码如下:

    /**
         * 用户接收离线消息功能实现
         */
        public List<Message> getOfflineMessage(AbstractXMPPConnection connection) throws Exception{
            //将用户状态设为离线
            Presence presence1 = new Presence(Presence.Type.unavailable);
            connection.sendStanza(presence1);
            OfflineMessageManager offlineManager = new OfflineMessageManager(connection);
            //获取离线消息
            List<Message> messageList = offlineManager.getMessages();
            offlineManager.getHeaders();
            int i = offlineManager.getMessageCount();
            Log.d("记录", "getMessageCount:"+i);
            //获取后删除离线消息记录
            offlineManager.deleteMessages();
            //将用户状态设为在线
            Presence presence = new Presence(Presence.Type.available);
            connection.sendStanza(presence);
            return messageList;
        }
    

    注:1.上面子函数返回的是所有的离线消息;
    2.接收离线消息时,要将用户状态设置为离线。

    接收/发送消息

    (一)接收消息:

    /**
         * 消息监听,新消息提醒功能实现
         */
        public class InChatMessageListener implements IncomingChatMessageListener{
            @Override
            public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
                //对接收到的信息进行操作
            }
        }
    

    注意在退出APP时(调用“onDestroy()方法时”)要移除消息监听(“.removeListener(inListener)”)。

    (二)发送消息
    代码比较简单,具体如下:

    try {
                        LoginActivity.xmppManage.SendMessage(LoginActivity.connection, ChatActivity.exist_friendname, mecessage_content);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
    

    后记

    1.XMPP还可以实现聊天室(多人聊天)等功能。
    2.调试时可以使用Spark,Spark是一个电脑端的软件,也是使用XMPP实现的,功能很丰富。
    3.Openfire的配置之前也搞了好几天,以后有空的话争取进行补充。
    ——————————————————————————
    最后贴一下我的个人公众号:微信搜索“茶迁”或扫描下图。平时会更新一些编程相关的文章,欢迎大家关注~
    茶迁

    展开全文
  • 单点登录源码

    2018-01-09 20:56:08
    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ├── zheng-config -- 配置中心[端口:1001] ├── zheng-upms -- 用户权限管理系统 | ├── ...
  • 说到这些,都离开背后庞大的互联网体系的支撑,阿里作为国内最顶级的互联网企业必然也聚集了行业顶级的IT人才。 众所周知,阿里巴巴的主要开发语言就是Java,而对于Java开发者来说,最重要的就是学习Spring框架...

    前言

    现在刷抖音经常可以看到一些老外街坊,问他们最想把什么带回自己的国家,我听过很多的回答都是:淘宝,支付宝,美食,微信,外卖,高铁等等。

    确实如此,随着国家的快速发展吸引了不少国际上羡慕的目光,更让中国的新四大发明走向世界。说到这些,都离不开背后庞大的互联网体系的支撑,阿里作为国内最顶级的互联网企业必然也聚集了行业内顶级的IT人才。

    众所周知,阿里巴巴的主要开发语言就是Java,而对于Java开发者来说,最重要的就是学习Spring框架了。现在,我想跟大家分享出这份老外看外都不禁赞叹的《阿里技术官Spring全家桶笔记》,赶紧一睹为快吧。

    咱们都知道,学Spring最重要的还是它的核心思想AOP和IOC,这两个内容也单独拿出来做一份笔记来重点讲解了,先睹为快!

    由于篇幅限制,这两个知识点讲的干货内容非常多,这里只能截取部分文档内容展示,完整版获取在上面,感谢配合。

    1. 前言

    大家都知道,Postman是一个非常受欢迎的API接口调试工具,提供有Chrome扩展插件版和独立的APP,不过它的很多高级功能都需要付费才能使用。

    如果你连Postman都还没有用过,不妨可以先体验一番。

    Postman官网:

    https://www.getpostman.com/
    

    PS: 由于2018年初Chrome停止对Chrome应用程序的支持,你的P****ostman插件可能无法正常使用了,在这里建议大家直接下载它的应用程序进行使用。

    虽然Postman作为一款接口调试工具,算是非常优秀的了,但一说到使用高级功能要付费就有人坐不住了,决定自己造个轮子免费给大家使用,造福不愿付费的人群。

    于是,**Postwoman就诞生了!  **它的作者是一位叫 Liyas Thomas 的家伙。看名字就知道是冲着Postman来的,你敢收费,我就敢免费开源。(参与贡献者还是很多的)

    2. Postwoman介绍

    简单来说,Postwoman是一个Postman的免费、快速且美观的替代方案,它的设计初衷是为了帮助开发人员更快地创建请求,节省宝贵的开发时间,提升工作效率。并且Postwoman是开源产品,界面美观,更容易使用!

    PS: 下述两张图,是在Postwoman官网截取的两张图。

    使用操作和Postman基本一致,如果你从Postman迁移过来,基本上没有什么学习成本。

    GitHub项目官网:

    https://github.com/liyasthomas/postwoman
    

    3. 相关特性

    Postwoman是基于NodeJs编写的,主要特点除了可以支持主流的Restful接口调试之外,还支持 GraphQL和 WebSocket。

    作为一款开源的 Postman 替代品,主打特性有如下一些:

    • 轻盈,可直接在线访问;

    • 简约,采用简约的 UI 设计精心打造;

    • 支持 GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH 方法;

    • 支持验证;

    • 实时,发送请求即可获取响应。

    除了这些,还可自定义背景,前景色和强调色组合。

    1、自定义选项:

    • 选择主题:Kinda Dark(默认),Clearly White,Just Black和System主题

    • 选择强调颜色:绿色(默认),黄色,粉红色,红色,紫色,橙色,青色和蓝色

    2、PWA:

    可以通过PWA的方式安装。

    PS: PWA全称Progressive Web App,即渐进式WEB应用。

    特性:

    • 与Service Workers同时加载

    • 离线支持

    • 低RAM /内存和CPU使用率

    • 添加到主屏幕(页脚中的按钮)

    • 桌面PWA支持(页脚中的按钮)

    3、WebSocket:

    通过单个TCP连接建立全双工通信通道。发送和接收数据

    4、GraphQL

    GraphQL是API的查询语言。

    除以上以外还具备其他特性就不一一介绍了,读者使用后一试便知。

    4. 定制开发

    相比于其作为Postman的替代方案,笔者其实更在乎它的实现方式,Postwoman是一个基于Vue构建的Web项目,且可以构建成PWA应用,下述提供三种本地开发运行方式。

    方式一:npm本地构建运行:

    git clone https://github.com/liyasthomas/postwoman.git
    

    PS: 官网是直接建议npm install,但笔者在尝试时,发现npm installcnpm install安装时,会出现依赖的cypress安装失败的问题,如果读者也出现此问题,可以先单独安装cypress.

    方式二:docker-compose (需要本地先安装docerk-compose):

    git clone https://github.com/liyasthomas/postwoman.git
    

    方式三:docker (需要本地先安装docker环境):

    #pull
    

    三种方式,任意一种,本地运行成功后,打开浏览器,访问http://localhost:3000  即可。以方式一为例,通过npm run dev本地运行,如下图所示。

    本地服务启动后,可根据自己的定制开发需求,进行修改,如果你熟悉Vue的话,接下来就可以随意玩耍了,例如此处,笔者将Postwoman标题修改了一下。

    5. 总结

    单从本文介绍可能并不能体验到这样一个颜值颇高的API客户端,如果你觉得Postman不够好用或者确实是想要一个好看的界面,那么Postwoman将是你最佳的选择!

    最后

    针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

    image

    上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

    资料领取方式:点击这里免费获取

    image

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
    ,小部分截图)

    资料领取方式:点击这里免费获取

    [外链图片转存中…(img-JousRq3h-1620980113468)]

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    展开全文
  • 微信小程序之登录页实例-——-微信小程序实战系列(5) 微信小程序之自定义toast实例-——-微信小程序实战系列(6) 微信小程序之自定义抽屉菜单(从下拉出)实例-——-微信小程序实战系列(7) 微信小程序之自定义...
  • 获取微信内H5支付所需要的paySign wechat.GetAppPaySign() => 获取APP支付所需要的paySign wechat.ParseNotifyToBodyMap() => 解析微信支付异步通知的参数到BodyMap wechat.ParseNotify() => 解析微信支付...
  • 特点:支付回调通知,0手续费实时到账(经过任何第三方,直接到账微信/支付宝余额),提供无依赖服务端源代码运行在自己服务器,支持php/java/python等任意开发语言接入,监听方式非xp框架HOOK的方式,无需root...
  • (十七) 登录接口:QQ登录、微信登录、微博登录 (十八) 物流接口:快递100接口 (十九) 其他接口:LBS、UCenter通信接口(可与社区论坛等同步登录退出) 安装请确保PHP版本高于5.6。 商淘软件B2B2C多用户商城...
  • 177、修复部分机型Gms和Google Play启动到了正确的环境 176、修复新实现的StaticBroadcast导致的兼容性问题 175、修复Android P无法使用apache.http.legacy的问题 174、实现Native trace 173、优化IO Redirect...
  • 插件扩展:支付宝、微信支付、PAYPAL、QQ登录、微信登录、微博登录; 放心使用 系统免费开源,任何人可下载使用DouPHP,包括企业,我们并限制将DouPHP用于商业用途。关于定制开发,不会因为是DouPHP官方就收取更...
  • 支持自定义登录页面,代替微信登录功能 去除了小程序对页面层级的限制 实现了js版的wxml和wxss编译器以适应跨平台编译需求并无缝整合至weweb 适用场景 喜欢小程序的开发方式,或者只懂小程序开发,想通过小程序的...
  • 最新的华为应用市场要求,隐私政策提示框接受按钮的文本,必须为“同意”而能是其他有歧义的文字。 配置后提交云端打包后生效。理论绝大部分和manifest.json生效相关的配置均需要提交云打包后生效 10.拦截器...
  • 如果对您有帮助,您可以点右角 "Star" 支持一下 谢谢! =============== 运行环境 PHP 7.1 ~ 7.3 (7.4以上的版本暂兼容) PDO PHP Extension MBstring PHP Extension CURL PHP Extension Mylsqi ...
  • 事实在此我可以负责的告诉你,在sa-token中,登录授权就是如此的简单,需要什么全局过滤器,需要各种乱七八糟的配置!只需要这一行简单的API调用,即可完成会话的登录授权! 当你受够Shiro、Security等框架的...
  • 事实在此我可以负责的告诉你,在Sa-Token中,登录授权就是如此的简单,需要什么全局过滤器,需要各种乱七八糟的配置!只需要这一行简单的API调用,即可完成会话的登录授权! 当你受够Shiro、Spring Security等...
  • 事实在此我可以负责的告诉你,在Sa-Token中,登录授权就是如此的简单,需要什么全局过滤器,需要各种乱七八糟的配置!只需要这一行简单的API调用,即可完成会话的登录授权! 当你受够Shiro、Spring Security等...
  • 最新的华为应用市场要求,隐私政策提示框接受按钮的文本,必须为“同意”而能是其他有歧义的文字。 配置后提交云端打包后生效。理论绝大部分和manifest.json生效相关的配置均需要提交云打包后生效 10.拦截器...
  • 1、将微信支付、微信登录插件合并到开源版 2、会员手机号格式检查增加对199号段的支持 3、增加Tab切换区块 4、完成设计模块高级页面相关布局及操作 5、完成组件模块素材库页面视图切换方式 6、完成组件模块素材库...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

框架内微信登录不上