精华内容
下载资源
问答
  • 模拟制作网页版聊天 项目采用逆向工程完成 实现功能 登录 注册 聊天 后期的个人信息没有开发 (文件包含项目(mvn) 及数据库表结构(采用MySQL数据库)试用于刚开始做开发或是java初学者作为参考 如有疑问或是改进提供 ...
  • 45网页自动填表注册软件是一款方便好用的网页自动填表软件工具,它可以帮助用户自动网页自动注册QQ,163邮箱等。是一款不错的网页自动填表软件工具和网页自动注册软件工具。 软件功能 1.QQ自动注册 2.163邮箱自动...
  • PHP微信网页版功能分析

    千次阅读 2016-09-29 13:40:00
    首先说明一点:微信目前分为2个版本,所以在获取接口时候请求的路径也不一样,很早以前注册的用户请求地址一般为wx.qq.com,新注册用户为wx2.qq.com,导致很多开发者在开发微信网页版的时候返现有些用户能登录并获取...

    PHP微信网页版功能分析

    提供微信网页版接口分析:
    全部接口参照:http://blog.csdn.net/qq_27263649/article/details/52750877
    - 首先说明一点:微信目前分为2个版本,所以在获取接口时候请求的路径也不一样,很早以前注册的用户请求地址一般为wx.qq.com,新注册用户为wx2.qq.com,导致很多开发者在开发微信网页版的时候返现有些用户能登录并获取到消息,有的只能登录不能获取到消息
    - 第二点:给大家介绍一下微信返回码RetCode和相应的解决方案:0-正常;1-失败,refresh;1101/1100-登出/失败,refresh/重新登录;1203-恭喜您,几个小时后重试,没有解决方案;Selector:2-新消息,6/7-进入/离开聊天界面通常是在手机上进行操作,重新初始化即可,0-正常;话不多说,上代码!


    登录

    /**
     * 获取uuid
     * @param: appid = 'wx782c26e4c19acffb'
     */
    public function get_uuid($appid)
    {
        $url = 'https://login.weixin.qq.com/jslogin';
        $url .= '?appid=' . $appid;
        $url .= '&fun=new';
        $url .= '&lang=zh_CN';
        $url .= '&_=' . time();
        //使用curl进行抓取页面信息
        $content = $this->curlPost($url);
        //抓取出来的信息使用正则匹配,正则不好的同学也可以学我这样
        $content = explode(';', $content);
        $content_uuid = explode('"', $content[1]);
        $uuid = $content_uuid[1];
        return $uuid;
    }
    

    生成登录二维码

     /**
     * 生成登录二维码
     * @param:uuid
     */
    public function qrcode($uuid)
    {
        $url = 'https://login.weixin.qq.com/qrcode/' . $uuid . '?t=webwx';
        $html = "<img class='img' src=" . $url . "/>";
        return $html;
    }
    

    这部分很简单不多解释。

    获取回调地址

    /**
     * 获取回调地址
     * @param:uuid
     */
      public function get_uri($uuid)
    {
        $url = 'https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=' . $uuid. '&tip=0&_=e' . time();
        $content = $this->curlPost($url);
        $content = explode(';', $content);
        $content_uri = explode('"', $content[1]);
        $uri = $content_uri[1];
        //重点:根据不同版本的微信返回的回调地址是不同的匹配出相应的回调头地址
        preg_match("~^https:?(//([^/?#]*))?~", $uri, $match);
        $https_header = $match[0];
        session('https_header', $https_header);
        $base_url = $_SESSION['https_header'] . "/cgi-bin/mmwebwx-bin";
        session('base_url', $base_url);
        $new_uri = explode('scan', $uri);
        $uri = $new_uri[0] . 'fun=new&scan=' . time();
        $res = $this->curlPost($uri);
        if (!$res) {
            $this->error("登录超时", 'index');
        }
        $res = simplexml_load_string($res);
        $data = (array)$res;
        return $data;
    }
    

    初始化

        /**
     * 初始化
     */
    /**
     * 获取post数据
     */
    public function get_self($data)
    {
        $ret = $data['ret'];
        if ($ret == '1203') {
            $this->error('未知错误,请2小时后重试', 'index');
        }
        if ($ret == '0') {
            $this->self->BaseRequest = array(
                'Uin' => $data['wxuin'],
                'Sid' => $data['wxsid'],
                'Skey' => $data['skey'],
                'DeviceID' => 'e' . rand(10000000, 99999999) . rand(1000000, 9999999),
                //16位
            );
    
            $this->self->skey = $data['skey'];
    
            $this->self->pass_ticket = $data['pass_ticket'];
    
            $this->self->sid = $data['wxsid'];
    
            $this->self->uin = $data['wxuin'];
    
            session('self', $this->self);
    
            return $this->self;
        } else {
            return $ret;
        }
    }
    
     /**
     * 获取MsgId
     */
    public
    function wxstatusnotify()
    {
        $self = $_SESSION['self'];
        $User = $self->User;
    
        $url = $_SESSION['base_url'] . '/webwxstatusnotify?lang=zh_CN&pass_ticket=' . $self->pass_ticket;
    
        $params = array(
            'BaseRequest' => $self->BaseRequest,
            "Code" => 3,
            "FromUserName" => $User['UserName'],
            "ToUserName" => $User['UserName'],
            "ClientMsgId" => time()
        );
    
        $res = $this->curlPost($url, $params);
    
        $res = json_decode($res, true);
    
        return $res;
    }
    
    /**
     * 获取联系人
     *params:JSON
     */
    public function webwxgetcontact()
    {
        $self = $_SESSION['self'];
    
        $url = $_SESSION['base_url'] . '/webwxgetcontact?pass_ticket=' . $self->pass_ticket . '&seq=0&skey=' . $self->skey . '&r=' . time();
    
        $params['BaseRequest'] = $self->BaseRequest;
    
        $data = $this->curlPost($url, $params);
    
        return $data;
    }
    
    /**
     * 获取当前活跃群信息
     */
    public function webwxbatchgetcontact($self, $group_list)
    {
        $url = $_SESSION['base_url'] . '/webwxbatchgetcontact?type=ex&lang=zh_CN&r=' . time() . '&pass_ticket=' . $self->pass_ticket;
    
        $params['BaseRequest'] = $self->BaseRequest;
    
        $params['Count'] = count($group_list);
    
        foreach ($group_list as $key => $value) {
            if ($value[MemberCount] == 0) {
                $params['List'][] = array(
                    'UserName' => $value['UserName'],
                    'ChatRoomId' => "",
                );
            }
            $params['List'][] = array(
                'UserName' => $value['UserName'],
                'EncryChatRoomId' => "",
            );
    
        }
    
        $data = $this->curlPost($url, $params);
    
        $data = json_decode($data, true);
    
    
        if ($data['BaseResponse']['Ret'] == '1205') {
            foreach ($group_list['MemberList'] as $key => $value) {
                $value['NickName'] = $this->getFriend($value['UserName']);
                if (!$value['NickName']) {
                    $value['NickName'] = '非好友';
                }
            }
            $data = $group_list;
        }
    
        return $data;
    }
    
     /**
     * 心跳检测 0正常;1101失败/登出;2新消息;7不要耍手机了我都收不到消息了;
     */
    public
    function synccheck()
    {
    
        $self = $_SESSION['self'];
    
        $SyncKey = $_SESSION['synckey'];
        if (!$SyncKey['List']) {
            $SyncKey = $_SESSION['json']['SyncKey'];
        }
        foreach ($SyncKey['List'] as $key => $value) {
    
            if ($key == 1) {
                $SyncKey_value = $value['Key'] . '_' . $value['Val'];
            } else {
                $SyncKey_value .= '|' . $value['Key'] . '_' . $value['Val'];
            }
    
        }
    
        $header = array(
            '0' => 'https://webpush.wx2.qq.com',
            '1' => 'https://webpush.wx.qq.com',
        );
    
        foreach ($header as $key => $value) {
    
            $url = $value . "/cgi-bin/mmwebwx-bin/synccheck?r=" . getMillisecond() . "&skey=" . urlencode($self->skey) . "&sid=" . $self->sid . "&deviceid=" . $self->BaseRequest['DeviceID'] . "&uin=" . $self->uin . "&synckey=" . urlencode($SyncKey_value) . "&_=" . getMillisecond();
            //getMillisecond()时间戳15位
            $data[] = $this->curlPost($url);
        }
        foreach ($data as $k => $val) {
            $rule = '/window.synccheck={retcode:"(\d+)",selector:"(\d+)"}/';
            preg_match($rule, $data[$k], $match);
            if ($match[1] == '0') {
                $retcode = $match[1];
                $selector = $match[2];
            }
        }
        $status = array(
            'ret' => $retcode,
            'sel' => $selector,
        );
        return $status;
    }
    
    /**
     * 获取最新消息
     */
    public
    function webwxsync()
    {
        $self = $_SESSION['self'];
    
        $SyncKey = $_SESSION['synckey'];
    
        $url = $_SESSION['https_header'] . '/cgi-bin/mmwebwx-bin/webwxsync?sid=' . $self->sid . '&skey=' . $self->skey . '&pass_ticket=' . $self->pass_ticket;
    
        $params = array(
            'BaseRequest' => $self->BaseRequest,
            'SyncKey' => $SyncKey,
            'rr' => ~time(),
        );
        $data = $this->curlPost($url, $params);
    
        return $data;
    }
    
    /**
     * 发送消息
     */
    public function sendMsg($username, $content)
    {
        header("Content-Type: text/html; charset=UTF-8");
        $this->webwxsendmsg($_SESSION['self'], $username, $content);
    }
    
    /**
     * 发送消息
     */
    public
    function webwxsendmsg($self, $to, $word)
    {
    
        header("Content-Type: text/html; charset=UTF-8");
        $url = $_SESSION['https_header'] . '/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=' . $self->pass_ticket;
        $clientMsgId = getMillisecond() * 1000 + rand(1000, 9999);
        $params = array(
            'Msg' => array(
                "Type" => 1,
                "Content" => $word,
                "FromUserName" => $self->User['UserName'],
                "ToUserName" => $to,
                "LocalID" => $clientMsgId,
                "ClientMsgId" => $clientMsgId
            ),
            'BaseRequest' => $self->BaseRequest,
        );
        $data = $this->curlPost($url, $params, 1);
        return $data;
    }
    

    好了不多解释了,有问题github:https://github.com/yjliushigui/wxrobot

    转载请注名出处http://blog.csdn.net/qq_27263649/article/details/52701181

    展开全文
  • 弘一网童(WebPortero)是一款智能化的网页保存工具,集网页抓取、内容识别、网页编辑、格式转换于一体,可以... 看到网页上漂亮的Flash,想要引用它,网童会为您提取出Flash的文件地址,方便您引用,如装扮您的QQ空间。
  • 首先,去微信公众平台测试号管理注册公众号。 地址:http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index IDE:IntelliJ IDEA 2020.1.3 x64 (找度娘破解) 微信开发者工具 (官网去...
  • 网页自动填表工具是一款可以帮助你上网时自动填表的软件,同时也是一款网页自动注册软件工具 功能:软件支持QQ自动注册和163邮箱自动注册,方便大家日常使用。 点一下就可以填完整页表格。每个站都可设不同的密码,...
  • 如果您的机子出现了莫名奇妙的错误,比如常常弹出错误对话框,看电影的时候突然中断,连接不上网,打不开QQ,打不开网页,插入U盘的时候系统蓝屏等问题,都可以用本软件进行扫描修复。 此版本是已注册绿色,解压...
  • 购物网站系统源代码网页模板正式

    千次下载 热门讨论 2009-12-03 11:13:42
    网上商城购物网站系统源代码,网上开店系统网页模板正式,您还在为苦苦寻找一套适合的购物系统而烦恼吗?您是否觉得单一色彩、风格的购物系统已经让您厌倦不堪?您是否想过只须用鼠标轻轻一点,整站风格即会变幻无穷...
  • 曾几何时,迅雷离线,QQ离线,115离线,多么的风靡,现在基本上都用不成了。。 最近发现国外有一个非常好的离线下载工具,在线的,非常给力。 重点:点我进入,当然, 目前的话,正常访问即可打开,不知道以后会...

    曾几何时,迅雷离线,QQ离线,115离线,多么的风靡,现在基本上都用不成了。。

    最近发现国外有一个非常好的离线下载工具,在线版的,非常给力。

    重点: 点我进入 ,当然, 目前的话,正常访问即可打开,不知道以后会不会被kill掉。。有需要的小伙伴可以试一下。

    简单说下功能:

    1、支持离线下载,磁力链,种子

    2、冷门资源还是可以的,一般都能下的动,因为我测试过了。

    3、刚注册后,只有2G空间,免费用户每次只能进行一个离线下载任务。

    4、可以在twitter上分享,或者转发给朋友注册,共同获取奖励空间。

    展开全文
  • 注册码 = 取文本左边 (注册码, 32) 置入代码 ({ 235, 16, 86, 77, 80, 114, 111, 116, 101, 99, 116, 32, 98, 101, 103, 105, 110, 0 }) ' VMP过程加密开始 按钮_注册.禁止 = 真 按钮_试用.禁止 = 真 .判断开始 ...
  • 5.程序员可根基自身系统的实际情况,制定适合自己的界面(完全自由设计),如做成通用型界面、QQ邮箱附件界面,或更强大界面。 6.控件提供非常完整的属性、参数、方法和函数供程序员调用。结合回调函数和触发过程,...
  • 测试地址:  配置设备地址 ... ... 作者:小黄人软件 QQ:345139427 手机:18910620895 有问题找我。 ...该项目是物联网系统 : 网页控制远程wifi 分为登录,注册(短信验证),重置密码(短信验

    数据模型:

    手机或电脑浏览器<======>厂家云端<======>用户路由器<======>用户esp8266模块<======>开关


    测试地址:

     配置设备地址 http://wifi.supermindsoft.com/admin/

    设备控制地址 http://wifi.supermindsoft.com/




    作者:小黄人软件 QQ:345139427     手机:18910620895   有问题找我。


    该项目是物联网系统 : 网页控制远程wifi 分为登录,注册(短信验证),重置密码(短信验证),控制开关,配置开关(可动态新增或删除开关)
    wifi模块:esp8266  或购买 ESP8266 5V WiFi继电器智能物联网模块 智能家居 手机APP遥控开关  https://detail.tmall.com/item.htm?spm=a230r.1.14.13.EmkbSA&id=542582931435&cm_id=140105335569ed55e27b&abbucket=17
    短信接口:https://my.luosimao.com
    环境:php+mysql
    编码:所有文件使用utf-8,数据库也是。
    云端:http://iot.espressif.cn


    一、安装说明:
    1、将项目根目录下面的phpjyz_eg1.sql导入数据库,创建该项目所需要的表。
    2、将项目里面的所有文件和文件夹放入网站根目录。
    3、修改conf/db.phpp配置数据库。
    4、设备控制地址 :在浏览器地址访问http://域名/index.php即可。
       配置设备地址:在浏览器地址访问http://域名/admin/index.php即可




    二、项目目录结构:
    |--conf
    |----db.php【数据库配置文件】


    |--template
    |----login.php【登录页面】
    |----member.php【用户中心】
    |----register.php【注册页面】
    |----loginconfig.php【配置登录页面】
    |----resetpassword.php【重置密码页面】
    |----myswitch.php【控制设备页面】
    |----configswitch.php【配置设备页面】
    |----adddel.php【添加删除设备--数据库操作】
    |----switch.php【控制设备--与云端交互接口curl】
    |----getallswitch.php【得到该用户所有已经配置的设备--数据库操作】
    |----myinfo.php【用户信息--不用】
    |----sendSMS.php【发送验证码--与短信验证平台接口】


    |--index.php【入口文件】


    |--phpjyz_eg1.sql【所需数据SQL】


    |--使用说明.txt【使用说明书】




    三、使用说明
    1.注册:安装好环境后,先进入 配置设备地址注册:在浏览器地址访问http://域名/admin/index.php即可 
    2.添加设备:设备名和云ID ,云ID可通过安卓apk获得
    3.控制:进入设备控制地址 :在浏览器地址访问http://域名/index.php即可。




    20160729更新
    1.登录页面,如果密码输入错误,左右抖动。或有输入框为空,左右抖动 字变红。
    2.忘记密码页面,发验证码的改成60秒倒计时。有输入框为空,左右抖动 。
    3.注册页面,发验证码的改成60秒倒计时。有输入框为空,左右抖动 








    附:




    测试:
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in F:\WWW\template\register.php on line 33
    echo '<meta http-equiv="Content-Type" content="text/hmtl; charset=utf-8" />';


    34134b0e814094b49a8bf58fd8e63ea35bc89e9d
    ba60f70924dbc962f5eab7ad02351bd82da2aa68

    展开全文
  • 适用于所有应用程序,如QQ,MSN,Skype,word,Excel,记事本,写字板,IE网页等任何键盘输入程序。 广泛用于家长对孩子的管教和企业对员工的监督,计算机教室,网吧的监控与管理。 作者提醒:用户输入的帐号密码能记录...
  • 首先呢,“登录”、“授权”、“授权登录”,是一样的意思,不用纠结。 写小程序授权登录的代码前,需要...官网地址:https://open.weixin.qq.com 除了这个微信开放平台,还有另一个叫做 “微信公众平台”,可注册...

    首先呢,“登录”、“授权”、“授权登录”,是一样的意思,不用纠结。

    写小程序授权登录的代码前,需要了解清楚openid与unionid的区别,这里再简单介绍一下:

    1. 腾讯有个 “微信·开放平台”,只有企业才能注册账号,可理解为微信体系里,最顶级的账号。官网地址:https://open.weixin.qq.com
    2. 除了这个微信开放平台,还有另一个叫做 “微信公众平台”,可注册四种账号,包括服务号、订阅号、小程序、企业微信。也就是说,公众号(服务号和订阅号可统称为公众号)占一个账号,小程序也占一个账号。在没有绑定开放平台前,小程序授权登录只能拿到用户的openid。官网地址:https://mp.weixin.qq.com
    3. 小程序可绑定在公众号下,公众号可以绑定在微信开放平台下,小程序也可以绑定在微信开放平台下。(好像有点小绕)简单点说,所有的公众平台账号都需要绑定在 “开放平台” 下,才可获得的unionid,这是打通同个企业下所有微信公众账号的最有效方法(官方推荐)
    4. 更加具体的可自行百度…

    一、以下为小程序登录的代码:

    • 方式一:通过code调用code2session接口获得message,包含openid、session_key,满足条件的情况下还能直接获得unionid

      • 条件如下:(存在局限性)
      1. 官方说明UnionID获取途径,如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID,无须用户再次授权。

      2. 开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。也可通过code2session获取该用户的 UnionID。

     1/**
     2 * Author: huanglp
     3 * Date: 2018-11-28
     4 */
     5public class WeiXinUtils {
     6
     7    private static Logger log = LoggerFactory.getLogger(WeiXinUtils.class);
     8
     9    /**
    10     * 通过前端传过来的code, 调用小程序登录接口, 获取到message并返回 (包含openid session_key等)
    11     *
    12     * @param code
    13     * @return
    14     */
    15    public static JSONObject login(String code) {
    16        log.info("==============小程序登录方法开始================");
    17        WxMiniProperties properties = WeiXinPropertiesUtils.getWxMiniProperties();
    18        String url = properties.getInterfaceUrl() + "/sns/jscode2session?appid="
    19            + properties.getAppId() + "&secret=" + properties.getAppSecret() 
    20            + "&js_code=" + code + "&grant_type=authorization_code";
    21        JSONObject message;
    22        try {
    23            // RestTemplate是Spring封装好的, 挺好用, 可做成单例模式
    24            RestTemplate restTemplate = new RestTemplate();
    25            String response = restTemplate.getForObject(url, String.class);
    26            message = JSON.parseObject(response);
    27        } catch (Exception e) {
    28            log.error("微信服务器请求错误", e);
    29            message = new JSONObject();
    30        }
    31        log.info("message:" + message.toString());
    32        log.info("==============小程序登录方法结束================");
    33        return message;
    34
    35        // 后续, 可获取openid session_key等数据, 以下代码一般放在Service层
    36        //if (message.get("errcode") != null) {
    37        //    throw new ValidationException(message.toString());
    38        //}
    39        //String openid = message.get("openid").toString();
    40        //String sessionKey = message.get("session_key").toString();
    41        //...
    42
    43    }
    44}
    复制代码
    • - 补充1: WeiXinPropertiesUtils工具类
     1public class WeiXinPropertiesUtils {
     2
     3    // 微信小程序配置
     4    private static WxMiniProperties miniProperties;
     5    // 微信公众号配置
     6    private static WxProperties wxProperties;
     7
     8    private static void init() {
     9        if (miniProperties == null) {
    10            miniProperties = ContextLoader.getCurrentWebApplicationContext()
    11                .getBean(WxMiniProperties.class);
    12        }
    13        if (wxProperties == null) {
    14            wxProperties = ContextLoader.getCurrentWebApplicationContext()
    15                .getBean(WxProperties.class);
    16        }
    17    }
    18
    19    public static WxMiniProperties getWxMiniProperties() {
    20        init();
    21        return miniProperties;
    22    }
    23
    24    public static WxProperties getWxProperties() {
    25        init();
    26        return wxProperties;
    27    }
    28}
    复制代码
    • - 补充2: WxMiniProperties配置类
     1@Data
     2@Component
     3@ConfigurationProperties(prefix = "luwei.module.wx-mini")
     4public class WxMiniProperties {
     5
     6    private String appId;
     7    private String appSecret;
     8    private String interfaceUrl;
     9
    10}
    复制代码

    到此已能通过code获取到用户的openid和session_key,但若不满足条件,即使将小程序绑定到微信开放平台上,也获取不到unionid,所以此方式不稳定,推荐使用解密的方式获取数据。

    • 方式二:通过解密的方式获取用户unionid
     1/**
     2 * 通过encryptedData,sessionKey,iv获得解密信息, 拥有用户丰富的信息, 包含openid,unionid,昵称等
     3 */
     4public static JSONObject decryptWxData(String encryptedData, String sessionKey, String iv) throws Exception {
     5    log.info("============小程序登录解析数据方法开始==========");
     6    String result = AesCbcUtil.decrypt(encryptedData, sessionKey, iv, "UTF-8");
     7    JSONObject userInfo = new JSONObject();
     8    if (null != result && result.length() > 0) {
     9        userInfo = JSONObject.parseObject(result);
    10    }
    11    log.info("result: " + userInfo);
    12    log.info("============小程序登录解析数据方法结束==========");
    13    return userInfo;
    14}
    复制代码
    • - 补充1: AesCbcUtil工具类,直接复制即可,需要添加bouncycastle依赖。BouncyCastle是一个开源的加解密解决方案,官网可查看www.bouncycastle.org/
     1package com.luwei.common.utils;
     2
     3import org.bouncycastle.jce.provider.BouncyCastleProvider;
     4import org.apache.commons.codec.binary.Base64;
     5import javax.crypto.Cipher;
     6import javax.crypto.spec.IvParameterSpec;
     7import javax.crypto.spec.SecretKeySpec;
     8import java.security.AlgorithmParameters;
     9import java.security.Security;
    10
    11/**
    12 * Updated by huanglp
    13 * Date: 2018-11-28
    14 */
    15public class AesCbcUtil {
    16
    17    static {
    18        Security.addProvider(new BouncyCastleProvider());
    19    }
    20
    21    /**
    22     * AES解密
    23     *
    24     * @param data     //被加密的数据
    25     * @param key      //加密秘钥
    26     * @param iv       //偏移量
    27     * @param encoding //解密后的结果需要进行的编码
    28     */
    29    public static String decrypt(String data, String key, String iv, String encoding) {
    30
    31        // org.apache.commons.codec.binary.Base64
    32        byte[] dataByte = Base64.decodeBase64(data);
    33        byte[] keyByte = Base64.decodeBase64(key);
    34        byte[] ivByte = Base64.decodeBase64(iv);
    35
    36        try {
    37            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    38            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
    39            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
    40            parameters.init(new IvParameterSpec(ivByte));
    41
    42            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
    43            byte[] resultByte = cipher.doFinal(dataByte);
    44            if (null != resultByte && resultByte.length > 0) {
    45                return new String(resultByte, encoding);
    46            }
    47            return null;
    48
    49        } catch (Exception e) {
    50            e.printStackTrace();
    51        }
    52
    53        return null;
    54    }
    55}
    复制代码

    到此已经获取到 JSONObject类型的 userInfo,包含openid,unionid,昵称,头像等数据

    后续可以将用户信息保存到数据库,再返回给前端一个token即可,shiro经过公司封装了一层,代码如下:

    1...
    2// 获得用户ID
    3int userId = wxUser.getWxUserId();
    4shiroTokenService.afterLogout(userId);
    5String uuid = UUID.randomUUID().toString();
    6String token = StringUtils.deleteAny(uuid, "-") + Long.toString(System.currentTimeMillis(), Character.MAX_RADIX);
    7shiroTokenService.afterLogin(userId, token, null);
    8return token;
    复制代码

    二、以下为公众号(网页)授权的代码:

    网页授权更加简单,可查看 官方文档

    需添加 riversoft 相关依赖包,公众号网页授权,只需要将公众号绑定了开放平台,就能获取到unionid及其他用户信息。

     1public static OpenUser webSiteLogin(String code, String state) {
     2    log.info("============微信公众号(网页)授权开始===========");
     3    WxProperties properties = WeiXinPropertiesUtils.getWxProperties();
     4    AppSetting appSetting = new AppSetting(properties.getAppId(), properties.getAppSecret());
     5    OpenOAuth2s openOAuth2s = OpenOAuth2s.with(appSetting);
     6    AccessToken accessToken = openOAuth2s.getAccessToken(code);
     7
     8    // 获取用户信息
     9    OpenUser openUser = openOAuth2s.userInfo(accessToken.getAccessToken(), accessToken.getOpenId());
    10    log.info("============微信公众号(网页)授权结束===========");
    11    return openUser;
    12
    13    // 后续, 可将用户信息保存
    14    // 最后一步, 生成token后, 需重定向回页面
    15    //return "redirect:" + state + "?token=" + token;
    16}
    复制代码

    以下就是本人整理的关于微信公众号授权和小程序授权的一些经验和问题汇总,希望大家能够从中获得解决方法。


    作者:广州芦苇科技Java开发团队
    链接:https://juejin.im/post/5c125b5f6fb9a049b13e1404

    转载于:https://www.cnblogs.com/kkdn/p/10137322.html

    展开全文
  • 客服QQ: 812011861 客服E-mail:pgy5@163.com 版本升级日志: 1.60(春节): 自动检测系统语言 显示各分类站点数量 登录框,查看框等细节改进,支持更多站点 1.59(**): 支持简体中文/繁体中文自由切换 优化等待...
  • 无法使用聊天软件(如QQ、UC、MSN、POPO等十余种)上网聊天;无法运行你指定的软件(本软件已预设了三十多种游戏软件);无法使用IE、Maxthon、TT等浏览软件浏览网页;无法更改系统时间(防止通过此方法破坏定时关机...
  • P2P终结者是一款优秀的网络管理软件,它可以让您轻松地、傻瓜化地管理局域网中BT、电驴等大量占用带宽的网络引用,为家庭、企业节省宝贵的有限带宽,从而保障网页浏览,邮件,企业ERP等关键应用。 功能特性 安装...
  • 高级控制有以下功能:禁止使用聊天软件(如QQ、UC、MSN、POPO等十余种)上网聊天;禁止运行你指定的软件(本软件已预设了三十多种游戏软件);禁止使用IE、Maxthon、TT等浏览软件浏览网页;禁止在你设定的时间段使用...
  • java Swing 聊天室 仿QQ 群聊/私聊 注册/登录 可数据库

    千次阅读 多人点赞 2018-12-22 18:08:32
    大二上java期末设计要求做个聊天室,本来想用自学的javaee 做个网页版微信在老师面前嘚瑟下的(~ ̄▽ ̄)~,结果老师 看了后淡定的说要窗体的-_- , 所以又做了 窗体版的QQ  ̄へ ̄ ,大家看看效果吧 。百度云链接 : ...
  • 讯客分类信息网源码下载,采集黄页手机版qq登录讯客信息网源码下载 asp+MSSQL大型数据库编程的分类信息网站管理系统源程序下载,分类网站模板,分类信息网页模板,信息发布网站系统商业.一个建站分类信息网站的智能建...
  • P2P终结者是一款优秀的网络管理软件,它可以让您轻松地、傻瓜化地管理局域网中BT、电驴等大量占用带宽的网络引用,为家庭、企业节省宝贵的有限带宽,从而保障网页浏览,邮件,企业ERP等关键应用。 ----------------...
  • 酷云网页特效2008

    2010-05-14 14:22:08
    该版本为奥运版本,可免费注册,免费注册时,请发送软件提供的机器码到我的E-mail或QQ注册后您可以无限制的使用本软件的任何功能,并且还提供升级
  • 网页扩展小知识收集

    2018-12-09 12:37:23
    jQuery bootstrap登录、注册页面 jquery弹出谈话框适配移动端 jQuery仿QQ在线聊天窗口自动回复代码 jquery模仿win8风格悬浮右侧多功能在线客服代码 jquery气泡跟随功能,气泡提示,萌萌的网页新功能指引...
  • 网页版的在线二人斗地主游戏,打开网页即可直接斗地主,无需下载客户端! 游戏流程跟QQ斗地主差不多,可使用注册的帐号登陆游戏,也可以在登陆游戏后邀请好友以客人的身份加入对战。 界面比较简单明了,经过...
  • Discuz网页斗地主插件

    2013-05-05 20:16:26
    Discuz网页斗地主插件V2SP3正式稳定,消耗会员积分,支持多人联机和X2.5版本! 这是一款能集成到论坛的社交游戏 。 插件特点: 1.可与社区积分数据共享-消耗用户积分(站长可在启动.exe里控制积分消耗数量) 2....
  • 网上购物系统英文综合网店,完全免费的网店模版下载,电子商务时代,需要一个互联网站,开拓网络市场,请人建网站,设计网页花费巨大,功能还不怎么样,后续技术支持费用又高,何不用网软网上开店的购物网站系统正式,...
  • java实现邮箱激活注册账号完整案例

    千次阅读 2019-01-15 23:02:48
    项目业务流程介绍:1.用户填写用户名,邮箱,注册密码,提交注册信息(此时还不能登录系统)。2.系统通过一个已配置...1.两个QQ邮箱,并且用于发送激活邮件的qq邮箱需要进行如下配置,进入QQ邮箱首页(网页版)点击...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 372
精华内容 148
关键字:

qq注册网页版