精华内容
下载资源
问答
  • CocosCreator系列教程——接入原生微信登陆功能 先看一下微信官方的接入文档吧,不得不说,我真的怀疑微信的文档肯定不是技术写的,简直乱得一批,看的人头昏脑胀,主要看一下这个链接的接入流程就行了,不要看接入...
  • asp微信登陆asp微信登陆
  • Delphi微信登陆

    2020-11-24 19:00:35
    【Delphi 微信登陆】扫描登陆二维码,即可获取微信的openid,实现微信授权登陆。
  • 主要介绍了python抓取需要扫微信登陆页面的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Unity微信登陆分享SDK

    2018-08-29 11:11:03
    unity 微信sdk接入之Android版,通过打jar包供unity调用,分为两个工程,一个unity工程,一个AndroidStudio工程。可改包名直接打包供unity用,微信sdk要包名,appid,签名一致才能调起
  • 易语言微信登陆例子

    2018-10-14 19:42:45
    一段易语言微信登陆例子,主要是获取微信登陆后用户头像等信息
  • java微信登陆

    2018-05-05 18:44:51
    java微信登陆demo包含所需要的jar包。前端写的随便,请忽略。
  • vue项目+hbuilder打包实现微信登陆
  • 微信登陆易语言例子
  • 判断微信内置浏览器主要通过 MicroMessenger 字段,如果有这个字段,则判断该浏览器为微信客户端浏览器。可以根据本文的两种方法
  • 主要介绍了Android调用微信登陆、分享、支付的相关资料,需要的朋友可以参考下
  • android微信登陆界面

    2014-07-03 10:51:49
    安卓微信登陆界面,可直接部署运行。学习参考必备。
  • 支持电脑版+手机版+支付宝及微信支付,支持QQ和微信一键登陆,系统集众家之所长,大气超美观页面+手机版+商品组合套餐+限时抢购秒杀+图片批量上传+淘宝数据包导入+弹出式分类菜单+不同规格不同价格+新订单邮件通知+...
  • 基于微信生态的产品,微信登陆、模版消息、微信支付、微信分享已经成为标准配置,可以依赖微信强大的用户基础和庞大的社交网络来实现业务目标。 使用微信登录就是为了获取openid和用户的基本信息如昵称、头像、性别...
  • asp微信登陆.rar

    2020-02-11 22:34:35
    asp微信登录,微信登录asp网页,获取用户信息,asp实现微信登录授权(获取用户信息) ,亲测可用。公众号认证。
  • 主要介绍了微信小程序调用微信登陆获取openid及java做为服务端示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆。只不过是,还没有写入到咱们自家的后台中而已。 新建一个...


    简介:

    微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆。只不过是,还没有写入到咱们自家的后台中而已。



    新建一个Hello World项目,找到app.js文件打开,代码如下:

    app.js

    App({

      onLaunch: function () {

        //调用API从本地缓存中获取数据

        var logs = wx.getStorageSync('logs') || []

        logs.unshift(Date.now())

        wx.setStorageSync('logs', logs)

      },

      getUserInfo:function(cb){

        var that = this

        if(this.globalData.userInfo){

          typeof cb == "function" && cb(this.globalData.userInfo)

        }else{

          //调用登录接口

          wx.login({

            success: function () {

              wx.getUserInfo({

                success: function (res) {

                  that.globalData.userInfo = res.userInfo

                  typeof cb == "function" && cb(that.globalData.userInfo)

                }

              })

            }

          })

        }

      },

      globalData:{

        userInfo:null

      }

    })

    黄色标注的部分就是登陆部分



     

    下面详细介绍微信小程序的微信登陆

     

    第一步:获取登陆态code

    微信登陆部分,首先需要使用微信小程序的api—— wx.login(OBJECT)来获取登录态

    这个登陆态的作用是为了获取用户的openid(用户的唯一标识)


    相关链接:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject

     

    示例:官方示例

    js

    //调用登录

        wx.login({

          success: function(res) {

           console.log(res);

            if (res.code) {

              //发起网络请求

              //doSomething

            } else {

              console.log('获取用户登录态失败!' + res.errMsg)

            }

          },

      fail: function(){

        console.log("启用wx.login函数,失败!");

      },

      complete:function(){

        console.log("已启用wx.login函数");

      }

     

    });

     

    TIPS

    上面这段代码的console.log(res);输出wx.login(OBJECT)success成功回调函数返回值res的内容如下:

    情况一:

    出现这个code:”the code is a mock one”是在项目没有使用appid的情况下返回的,正常不是返回这个的!!


    情况二:

    项目在绑定appID后才能成功返回登录态,正确的登陆态如下图所示:




     

    第二步:将登陆态code发送给第三方服务器(即自家的服务器)

     

    上面通过wx.login(OBJECT)获取了登录态后,接下来就是将code发送给第三方服务器

     

    我们先看看微信登陆的序时图:

    序时图所示,通过wx.login()获取了code后,就使用wx.request()发送code给第三方服务器(也就是自家的服务器)



    下面用代码来进行讲解这一步如何操作

     

    示例:官方示例

    wx.login获取到的res.code返回值,直接以参数的形式,发起网络请求发送登陆态给自家服务器

    js

    //调用登录

        wx.login({

          success: function(res) {

           console.log(res);

            if (res.code) {

              //就是在这里发起网络请求,使用wx.request(),将登陆态发送给自家的服务器上

              wx.request({

                url: 'https://test.com/onLogin',

                data: {

                  code: res.code

                },

                method: 'POST',  

          header: {'content-type': 'application/json'},

                success: function(data){

                }

              })

            } else {

              console.log('获取用户登录态失败!' + res.errMsg)

            }

          },

      fail: function(){

        console.log("启用wx.login函数,失败!");

      },

      complete:function(){

        console.log("已启用wx.login函数");

      }

    });

     

    如何使用微信小程序发起网络请求?

    请看如下教程:微信小程序的网络请求 ——微信小程序教程系列(14

     

     

     

     

    第三步:code 换取 session_keyopenid

     

    登陆态发送给自家的服务器后,接下来就是后台进行操作

    下面我把 自家的服务器简称 后台,方便阅读(你知道我说的后台指的是我们自己的服务器,而不是微信的服务器就行)。

    后台接收到登陆态后,由后台发起网络请求给微信服务器

    备注:后台没有语言要求!!任意一门后台语言都可以。

     

    接口地址:

    https://api.weixin.qq.com/sns/jscode2session


    参数说明:

     

    备注:

    appidsecret登陆微信公众平台,打开设置——开发设置,即可获取(app secret需要生成)。


    grant_type是固定写法,值为authorization_code即可。

     

    返回结果:


    后台发送请求成后,腾讯服务器会返回session_key openid,如下图:

    成功返回的结果


    失败返回的结果





    第四步:生成3rd_session返回给客户端

     

    第四步也是做后台中的操作!!

    此时把微信服务器返回的session_key openid保留在后台中,由于考虑安全性的问题,不要直接返回给客户端。

    然后用操作系统提供的随机数算法生成一个新的session,微信把它叫做3rd_session。(注意:这个session要有足够的长度,建议有2^128种组合,即长度为16B;设置一定的时效性)

    3rd_session为名作为key,返回的session_keyopenid作为值,保存在后台上。

    最后只需要在后台,返回一个3rd_session给客户端即可。

     

    以后客户端部分,就使用这个3rd_session发送给后台,后台接收3rd_session获取对应的session_keyopenid,再通过session_keyopenid判断对应的用户返回该用户相关的数据

     

    备注:小程序用这种方法来代替浏览器自身发送的cookie,因为web的做法是服务器A会保存起访问登录接口的这个cookiesession中,当你再次访问其他接口的时候,服务器A首先会判断这个session,是否是之间的cookie从而知道是不是对应的用户。(http协议是一种短链接的关系,其特点是客户端发起请求链接到服务端,服务端返回数据,链接断开!因此之间是不会有任何数据的储存。)

     

    示例:接上示例

    js

        wx.login({

          success: function(res) {

           console.log(res);

            if (res.code) {

              wx.request({

                url: 'https://test.com/onLogin',

                data: {

                  code: res.code

                },

                method: 'POST',  

           header: {'content-type': 'application/json'},

    // 在发送请求成功的部分,返回的数据是后台返回的3rd_session

                success: function(data){

    console.log(data)

                }

              })

            } else {

              console.log('获取用户登录态失败!' + res.errMsg)

            }

          },

      fail: function(){

        console.log("启用wx.login函数,失败!");

      },

      complete:function(){

        console.log("已启用wx.login函数");

      }

    });

     

    PS

    要是阅读到这里,有不明之处,请叫上后台的小伙伴一起过来阅读这篇文章

    第三步,和第四步,要交给后台的同事去处理!!!

     

     

     

     

    第五步:客户端保存3rd_session

     

    回到客户端的工作了。

    从第四步后台返回的3rd_session后,需要将3rd_session存入缓存中。

    小程序提供了保存到本地缓存的api,使用非常简单。

     

    1wx.setStorage(OBJECT)

    传入keydata即可。


    2wx.setStorageSync(KEY,DATA)






    第六步:获取用户信息



    相关连接:https://mp.weixin.qq.com/debug/wxadoc/dev/api/open.html

     

     

    示例:接上示例

    js

        wx.login({

          success: function(res) {

           console.log(res);

            if (res.code) {

              wx.request({

                url: 'https://test.com/onLogin',

                data: {

                  code: res.code

                },

                method: 'POST',  

           header: {'content-type': 'application/json'},

                success: function(data){

    console.log(data)

                }

              })

              // 使用wx.getUserInfo获取用户信息

      wx.getUserInfo({

            success: function (res) {

                utils.log(res);

            },

    fail:function(){

    console.log("启用app.getUserInfo函数,失败!");

    },

    complete:function(){

    console.log("已启用app.getUserInfo函数");   

          });

     

            } else {

              console.log('获取用户登录态失败!' + res.errMsg)

            }

          },

      fail: function(){

        console.log("启用wx.login函数,失败!");

      },

      complete:function(){

        console.log("已启用wx.login函数");

      }

    });

     

    输出wx.getUserInfosuccess成功回调函数返回值res的内容如下:


    userInfo对象内是用户的信息:

    avatarUrl: 用户头像

    city: 城市

    country: 国家

    gender: 性别

    language: 语言

    nickName: 昵称

    province: 省份

     

     

     

     

     

    第七步:登录态维护

    通过上面六步,已经成功登陆微信小程序了,但是还需要做登陆维护。

    也就是说,登陆小程序后,然后又退出该小程序了。在一段时间内,再次进入该小程序,视为有效登陆,如果超出这个指定的时间,则视为无效登陆,需要重新登陆






    微信小程序教程系列

    相关连接:http://blog.csdn.net/michael_ouyang/article/details/54700871


    注册上线篇

    ------------------------------------------------------------

    微信小程序之如何注册微信小程序

    微信小程序之小程序上线


    基础篇

    ------------------------------------------------------------

    微信开发者工具的快捷键

    微信小程序的文件结构 —— 微信小程序教程系列(1)

    微信小程序的生命周期实例演示 —— 微信小程序教程系列(2)

    微信小程序的动态修改视图层的数据 —— 微信小程序教程系列(3)

    微信小程序的新建页面 —— 微信小程序教程系列(4)

    微信小程序的如何使用全局属性 —— 微信小程序教程系列(5)

    微信小程序的页面跳转 —— 微信小程序教程系列(6)

    微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)

    微信小程序的作用域和模块化 —— 微信小程序教程系列(8)

    微信小程序视图层的数据绑定 —— 微信小程序教程系列(9)

    微信小程序视图层的条件渲染 —— 微信小程序教程系列(10)

    微信小程序视图层的列表渲染 —— 微信小程序教程系列(11)

    微信小程序视图层的模板 —— 微信小程序教程系列(12)

    微信小程序之wxss —— 微信小程序教程系列(13)

    微信小程序的网络请求 —— 微信小程序教程系列(14)

    微信小程序的百度地图获取地理位置 —— 微信小程序教程系列(15)

    微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)

    微信小程序获取系统日期和时间 —— 微信小程序教程系列(17)

    微信小程序之上拉加载和下拉刷新 —— 微信小程序教程系列(18)

    微信小程序之组件 —— 微信小程序教程系列(19)

    微信小程序之微信登陆 —— 微信小程序教程系列(20)


    实战篇

    ------------------------------------------------------------

    微信小程序之顶部导航栏实例 —— 微信小程序实战系列(1)

    微信小程序之上拉加载(分页加载)实例 —— 微信小程序实战系列(2)

    微信小程序之轮播图实例 —— 微信小程序实战系列(3)

    微信小程序之仿android fragment之可滑动的底部导航栏实例 —— 微信小程序实战系列(4)

    微信小程序之登录页实例 —— 微信小程序实战系列(5)

    微信小程序之自定义toast实例 —— 微信小程序实战系列(6)

    微信小程序之自定义抽屉菜单(从下拉出)实例 —— 微信小程序实战系列(7)

    微信小程序之自定义模态弹窗(带动画)实例 —— 微信小程序实战系列(8)


    电商篇

    ------------------------------------------------------------

    微信小程序之侧栏分类 —— 微信小程序实战商城系列(1)

    微信小程序之仿淘宝分类入口 —— 微信小程序实战商城系列(2)

    微信小程序之购物数量加减 —— 微信小程序实战商城系列(3)

    微信小程序之商品属性分类 —— 微信小程序实战商城系列(4)

    微信小程序之购物车 —— 微信小程序实战商城系列(5)


    未完待续。。。


    更多小程序的教程:http://blog.csdn.net/column/details/14653.html

    展开全文
  • 模拟微信登陆操作手册 功能说明 功能说明:本操作手册成功后开发人员可模拟微信登陆,便于开发人员最终前端、后台代码。 准备工作 安装natapp 安装步骤参考:https://www.jianshu.com/p/cc1b1050b5b4 登录...

    模拟微信登陆操作手册

    功能说明

    功能说明:本操作手册成功后开发人员可模拟微信登陆,便于开发人员最终前端、后台代码。

    准备工作

    1. 安装natapp
    1. 安装步骤参考:https://www.jianshu.com/p/cc1b1050b5b4
    2. 登录natapp网址,改端口号为8081,进行支付宝认证,申请免费的token,申请成功后如图1。
    3. 用命令在cmd框内生成ip地址(natapp –authtoken  b42076601e77ef04(这是我申请的token)
     
    
    图1
    1. 安装微信开发者工具
    1. 官网地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/stable.html
    2. 下载图2

     

    图2

    1. 替换svn-人员培训-修改文件里的文件
    2. 启动tomcat,执行npm run dev前端打包
    3. 执行vip端口:

    执行前端、后端natapp命令,即7070,8080端口要处于开启状态(有人执行过即可)

    1. 启动7070前端并获取ip地址:natapp –authtoken 7b2e98c0a27c196f
    2. 启动8080后端并获取ip地址:natapp –authtoken 461a744582e8f456
    1. 执行自己的端口
    1. 启动自己的端口并获得ip地址:natapp –authtoken  b42076601e77ef04
    2. 获取ip地址并粘贴到下面文件中F:\WorkSpace\tfsworkspace\src\main\webapp\weidian_mobile\src\views\homepage\homeHomepage\homeHomepage.controller.js
    这个位置写natappfree地址
     
    
    这个位置写natappvip地址
     
    
    F:\WorkSpace\tfsworkspace\src\main\webapp\weidian_mobile_rebuild\src\views\homepage\homeHomepage\homeHomepage.controller.js
    这个位置(需注意这里要加上new路径名称

    注意:以上命令执行过后窗口不可关闭,否则下面会无法成功登陆

    1. Weichatserviceimpl中填写自己的unionid这样就能登录自己的页面(在客户表根据phone字段找到自己的unionid)
    2. 以上执行成功后,打开微信开发者工具,输入登陆地址即可;
    1. 登录需要用购买的vip地址进行登录(url最后一个字段为shopid),登陆地址:
    http://be13e3a10d71.natappvip.cc/#!/webapp/homepage/4e0c8c9992dc4ac4b3d836b2efc4d49e
    1. 问题解决(这里我枚举了两个,其它同学可以进行补充):
    1. 如果登陆出现404,那么可能是因为homeHomepage.controller.js里面的地址不会最新生成的。

    此问题解决需要再次执行获取ip地址的命令(natapp –authtoken  b42076601e77ef04)。并修改两个homeHomepage.controller.js文件natappfree地址

    如果登陆出现无法正常运作,登陆网址有问题错误

    重新用上面的网址登陆即可执行命令

    安装、替换成功后,每次登陆需要执行以下命令:

    1. 启动tomcat、执行npm run dev命令,运行前端
    2. 启动命令:natapp -authtoken 7b2e98c0a27c196f(vip前端)
    3. 启动命令:natapp -authtoken  461a744582e8f456(vip后端)
    第2.3点只要有人执行即可
    1. natapp –authtoken  b42076601e77ef04(这是我申请的token)并将ip替换到两个homeHomepage.controller.js文件中
    2. 进入登陆即可看到如下页

     

    展开全文
  • 本篇文章主要是介绍了微信小程序-微信登陆、微信支付、模板消息,具有一定的参考价值,有需要的可以了解一下。
  • 微信获取好友信息&获取微信聊天信息&微信登陆(通过http抓包)。。。。。。。。。。。。。
  • 第三方登陆(一)微信登陆

    千次阅读 2019-05-01 19:02:39
    现在微信越来越流行,我们开发的app或者网站如果想从微信导流的话可以选择微信登陆。 现在这里介绍怎样集成微信登陆功能 首先我们要做好前期工作,就是注册账号,目的就是获取appID 和appsecret ,并设置好回调地址...

    现在微信越来越流行,我们开发的app或者网站如果想从微信导流的话可以选择微信登陆。

    现在这里介绍怎样集成微信登陆功能

    首先我们要做好前期工作,就是注册账号,目的就是获取appID 和appsecret ,并设置好回调地址,下面介绍两种注册方式。

    我们有两种注册方式:

    1. 微信公众号(公众平台)
    2. 微信开放平台

    1.我们需要在微信公众号(公众平台)账号

    地址是:https://open.weixin.qq.com/

    下面是我们注册的页面:

     

    注册成功之后我们就可以创建应用了:

    这里我们就可以取得设置回调地址和获取appID 和 appsecret

     

    2.如果你想测试,我们可以申请微信开放平台

    这里我们就不多说,下面我们也可以申请测试账号http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

     

     

    这是我们就可以获取appID 和 appsecret

    最后我们要设置回调地址,这里就是我们的域名,并不加http:// 或 http:// 只是填写域名就可以:

    点击网页授权获取用户信息 最右侧的修改就可以填写回调地址:

    之后我们需要开发者认证,这里要掏钱了:

     

    功能的集成

    前期的工作准备好以后我们就可看集成的文档了:

    文档的地址是: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

    具体流程图如下:

    具体而言,网页授权流程分为四步:

    • 1、引导用户进入授权页面同意授权,获取code
    • 2、通过code换取网页授权access_token(与基础支持中的access_token不同)
    • 3、如果需要,开发者可以刷新网页授权access_token,避免过期
    • 4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

    下面就是我们的代码部分了:

    maven依赖:

    <dependency>
          <groupId>commons-httpclient</groupId>
          <artifactId>commons-httpclient</artifactId>
          <version>3.0.1</version>
       </dependency>
    
       <dependency>
       	<groupId>org.springframework.boot</groupId>
       	<artifactId>spring-boot-devtools</artifactId>
       </dependency>
       <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
    </dependency>
    
     <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
      </dependency>
    
     <dependency>
          <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.2</version>
        </dependency>
    
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.38</version>
        </dependency>
    

    配置application.properties:

    ####微信的登陆密钥#######
    #微信开放平台创建的网站应用的appid 和 appsecret
    appid=
    appsecret=
    scope=snsapi_login
    #微信开放平台创建的网站 设置的授权回调域
    callBack=

     

    scope部分我们要特别注意的是: 

     微信公众号(公众平台) 和 微信开放平台 是两码事。公众号(公众平台)获取的scope只包括两种:snsapi_base 和snsapi_userinfo,前者是静默获取,用户无感知;后者是需要用户确认同意的。

    但是微信开放平台(https://open.weixin.qq.com/) 就可以获取snsapi_login这种scope。坑爹的是,公众平台的认证和开放平台的认证是独立的,你如果想获取snsapi_login,还需要重新注册开放平台,交300块钱认证。

    如果你只是想实现微信扫二维码登录的话,其实snsapi_base 也足够了,因为它可以获取到用户的openid,你可以之后用来和自己数据库中作比对。

     

    下面是工具类,HttpRequestUtils.java:

    package com.haihua.haihua.Utils;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    /**
     * Created by liuzp on 2018/5/10.
     */
    public class HttpRequestUtils {
    
        private static  Logger log = LoggerFactory.getLogger(HttpRequestUtils.class);
    
        private static ObjectMapper objectMapper = new ObjectMapper();
    
        /**
         * http请求工具类,post请求
         *
         * @param url    url
         * @param params 参数值 仅支持String和list两种类型
         * @return
         * @throws Exception
         */
        public static String httpPost(String url, Map<String, Object> params) throws Exception {
            DefaultHttpClient defaultHttpClient = null;
            BufferedReader bufferedReader = null;
            try {
                defaultHttpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setHeader("Content-Type", "application/json;charset=ut-8");
                if (params != null) {
                    //转换为json格式并打印,不需要的你们可以不要
                    String jsonParams = objectMapper.writeValueAsString(params);
                    log.info("参数值:{}", jsonParams);
                    HttpEntity httpEntity = new StringEntity(jsonParams, "utf-8");
                    httpPost.setEntity(httpEntity);
                }
                HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
                if (httpResponse.getStatusLine().getStatusCode() != 200) {
                    String errorLog="请求失败,errorCode:"+httpResponse.getStatusLine().getStatusCode();
                    log.info(errorLog);
                    throw new Exception(url+errorLog);
                }
                //读取返回信息
                String output;
                bufferedReader=new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"utf-8"));
                StringBuilder stringBuilder=new StringBuilder();
                while ((output=bufferedReader.readLine())!=null){
                    stringBuilder.append(output);
                }
                return stringBuilder.toString();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                throw e;
            }catch (IOException e){
                e.printStackTrace();
                throw e;
            }finally {
                if(defaultHttpClient!=null)
                    defaultHttpClient.getConnectionManager().shutdown();
                if(bufferedReader!=null)
                    bufferedReader.close();
            }
        }
    
        /**
         * http请求工具类,get请求
         * @param url
         * @param params
         * @param resonseCharSet
         * @return
         * @throws Exception
         */
        public static String httpGet(String url, Map<String, Object> params,String ...resonseCharSet) throws Exception {
            DefaultHttpClient defaultHttpClient = null;
            BufferedReader bufferedReader = null;
            try {
                defaultHttpClient = new DefaultHttpClient();
                if(params!=null){
                    StringBuilder stringBuilder=new StringBuilder();
                    Iterator<String> iterator=params.keySet().iterator();
                    String key;
                    while (iterator.hasNext()){
                        key=iterator.next();
                        Object val=params.get(key);
                        if(val instanceof List){
                            List v= (List) val;
                            for (Object o:v){
                                stringBuilder.append(key).append("=").append(o.toString()).append("&");
                            }
                        }else{
                            stringBuilder.append(key).append("=").append(val.toString()).append("&");
                        }
                    }
                    stringBuilder.deleteCharAt(stringBuilder.length()-1);
                    url=url+"?"+stringBuilder.toString();
                    log.info("url:{}",url);
                }
                HttpGet httpGet = new HttpGet(url);
                httpGet.setHeader("Content-Type", "application/json;charset=ut-8");
                HttpResponse httpResponse = defaultHttpClient.execute(httpGet);
                if (httpResponse.getStatusLine().getStatusCode() != 200) {
                    String errorLog="请求失败,errorCode:"+httpResponse.getStatusLine().getStatusCode();
                    log.info(errorLog);
                    throw new Exception(url+errorLog);
                }
                //读取返回信息
                String charSet="utf-8";
                if(resonseCharSet!=null && resonseCharSet.length>0)
                    charSet=resonseCharSet[0];
                String output;
                bufferedReader=new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),charSet));
    
                StringBuilder dataBuilder=new StringBuilder();
                while ((output=bufferedReader.readLine())!=null){
                    dataBuilder.append(output);
                }
                return dataBuilder.toString();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                throw e;
            }catch (IOException e){
                e.printStackTrace();
                throw e;
            }finally {
                if(defaultHttpClient!=null)
                    defaultHttpClient.getConnectionManager().shutdown();
                if(bufferedReader!=null)
                    bufferedReader.close();
            }
        }
    
        //测试方法
        public static void main(String[] args) {
            String url="这里填写你的地址";
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("index","aaa");//这里是参数值
            try {
                String output=httpPost(url,map);
                log.info(output);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
    }

    下面是CoreController.java

    package com.haihua.haihua.controller;
    
    
    import com.haihua.haihua.Utils.HttpRequestUtils;
    import org.json.JSONObject;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    
    /**
     * Created by liuzp on 2018/5/9.
     */
    @Controller
    public class CoreController {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @Value("${appid}")
        private String appid;
    
        @Value("${callBack}")
        private String callBack;
    
        @Value("${scope}")
        private String scope;
    
        @Value("${appsecret}")
        private String appsecret;
    
    @RequestMapping("/1")
        public String index1(Model model) throws UnsupportedEncodingException {
            String redirect_uri = URLEncoder.encode(callBack, "utf-8"); ;
            model.addAttribute("name","liuzp");
            model.addAttribute("appid",appid);
            model.addAttribute("scope",scope);
            model.addAttribute("redirect_uri",redirect_uri);
            return "index1";
        }
    
    
        @RequestMapping("/")
        public String index(Model model) throws UnsupportedEncodingException {
            String oauthUrl = "https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
            String redirect_uri = URLEncoder.encode(callBack, "utf-8"); ;
            oauthUrl =  oauthUrl.replace("APPID",appid).replace("REDIRECT_URI",redirect_uri).replace("SCOPE",scope);
            model.addAttribute("name","liuzp");
            model.addAttribute("oauthUrl",oauthUrl);
            return "index2";
        }
    
        
        @RequestMapping("/callBack")
        public String callBack(String code,String state,Model model) throws Exception{
            logger.info("进入授权回调,code:{},state:{}",code,state);
    
            //1.通过code获取access_token
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
            url = url.replace("APPID",appid).replace("SECRET",appsecret).replace("CODE",code);
            String tokenInfoStr =  HttpRequestUtils.httpGet(url,null,null);
    
            JSONObject tokenInfoObject = new JSONObject(tokenInfoStr);
            logger.info("tokenInfoObject:{}",tokenInfoObject);
    
            //2.通过access_token和openid获取用户信息
            String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
            userInfoUrl = userInfoUrl.replace("ACCESS_TOKEN",tokenInfoObject.getString("access_token")).replace("OPENID",tokenInfoObject.getString("openid"));
            String userInfoStr =  HttpRequestUtils.httpGet(userInfoUrl,null,null);
            logger.info("userInfoObject:{}",userInfoStr);
    
            model.addAttribute("tokenInfoObject",tokenInfoObject);
            model.addAttribute("userInfoObject",userInfoStr);
    
            return "result";
        }
    
    
    
    }
    

    前端 index1.html

     

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>内嵌(自定义二维码)</title>
    </head>
    <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
    
    <body>
    <h1>hello! <label th:text="${name}"></label></h1>
    <div id="login_container"></div>
    <script th:inline="javascript">
        var obj = new WxLogin({
            self_redirect:true,
            id:"login_container",
            appid: [[${appid}]],
            scope: [[${scope}]],
            redirect_uri: [[${redirect_uri}]],
            state: "",
            style: "",
            href: ""
        });
    </script>
    </body>
    </html>

    前端 index2.html

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>hello! <label th:text="${name}"></label></h1>
    <a  th:href="${oauthUrl}">点击扫码登录</a>
    </body>
    </html>

    前端 result.html:

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>授权结果页</title>
    </head>
    <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
    
    <body>
    <h2>你好,授权成功!</h2><br>
    <h3>通过code换取access_token 结果:</h3>
    <p th:text="${tokenInfoObject}"></p>
    <h3>通过access_token获取用户信息 结果:</h3>
    <p th:text="${userInfoObject}"></p>
    </body>
    </html>

     

    这了我们就完成了微信登录的功能,当然最重要的是要给腾讯掏钱,坑爹!

    展开全文
  • 微信认证。 备案过的域名。 服务器。  0x01 手动触发dns更新 0x02 配置业务域名   0x03 将服务器请求转发到本地 修改服务器的 /etc/ssh/sshd_config 加入 GatewayPorts yes ssh -R 0.0.0.0:80:localhost:...
  • 简单的PC端微信登陆易语言DEMO,学习可以,获取好友,公众号,列表。
  • CocosCreator系列教程——接入原生微信登陆功能 先看一下微信官方的接入文档吧,不得不说,我真的怀疑微信的文档肯定不是技术写的,简直乱得一批,看的人头昏脑胀,主要看一下这个链接的接入流程就行了,不要看接入...

    CocosCreator系列——接入原生微信登陆功能

    先看一下微信官方的接入文档吧,不得不说,我真的怀疑微信的文档肯定不是技术写的,简直乱得一批,看的人头昏脑胀,主要看一下这个链接的接入流程就行了,不要看接入的技术文档,跳到坑里怕是就爬不上来了(小吐槽一波微信),好了,吐槽就到这里,接下来该真枪真刀的实干一番了。
    前期准备工作:准备好在微信开放平台上申请的AppIDAppSecret
    1.直接上快车下载微信sdk吧,官网上的打开一个下载链接简直是蜗牛拖着乌龟爬的速度。
    2.新建一个hello world工程,来一个微信登陆的按钮,然后绑定拉起微信登陆的代码
    在这里插入图片描述

    onWeiXinLoginClick() {
            if (cc.sys.os == cc.sys.OS_ANDROID) {
                jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "login", "()V");
            }
        },
    

    3.打开构建好的工程,在NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app此目录下新建一个lib文件夹,把下载的微信sdk拖入
    在这里插入图片描述
    4.用Android studio工具 import工程文件,AppActivity中初始化个参数

     private static final String APP_ID = "你申请的appid";
     private static IWXAPI api;
     public static AppActivity app = null;
    

    5.在onCreate()方法里面注册

    app = this;
    // 通过WXAPIFactory工厂,获取IWXAPI的实例
    api = WXAPIFactory.createWXAPI(this, APP_ID, true);
    // 将应用的appId注册到微信
    api.registerApp(APP_ID);
    Log.e("注册成功:::","111111111111111111111");
    

    6.js客户端点击微信登陆调用的方法

    public static void login(){
    		SendAuth.Req req = new SendAuth.Req();
    		req.scope = "snsapi_userinfo";
    		req.state = "wechat_sdk_aifuns";
    		api.sendReq(req);
    		Log.e("登陆成功:::","111111111111111111111");
        }
    

    7.下面的两个方法等下要在微信回调类里面用要用

    public static AppActivity getInstance(){
            return app;
        }
    public static IWXAPI GetAPI() {
            return api;
        }
    

    8.NewProject01\build\jsb-link\frameworks\runtime-src\proj.android-studio\app\src目录下新建com.xxx.xxx.wxapi路径,注意:这里有个坑,com.xxx.xxx对应的是Android studio工程build.gradle中对应的applicationId,不然会出现登陆微信成功以后收不到回调的问题,然后再com.xxx.xxx.wxapi目录下新建WXEntryActivity.java,然后编辑代码,下面奉上这个类的全部代码

    package com.XXX.XXX.wxapi;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    
    import com.tencent.mm.opensdk.constants.ConstantsAPI;
    import com.tencent.mm.opensdk.modelbase.BaseReq;
    import com.tencent.mm.opensdk.modelbase.BaseResp;
    import com.tencent.mm.opensdk.modelmsg.SendAuth;
    import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
    
    import org.cocos2dx.javascript.AppActivity;
    
    public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
        }
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            AppActivity.getInstance().GetAPI().handleIntent(getIntent(), this);
            finish();
        }
        @Override
        public void onReq(BaseReq req) {
            // TODO Auto-generated method stub
            Log.e("WeiChatLogin", "onReq++++++++++++");
            finish();
        }
        @Override
        //微信登陆成功后,会回调此方法
        public void onResp(BaseResp resp) {
            switch (resp.getType()) {
                case ConstantsAPI.COMMAND_SENDAUTH:
                    final SendAuth.Resp authResp = (SendAuth.Resp) resp;
                    //在这里处理的逻辑就可以了
                    Log.e("code",authResp.code);
                    Log.e("state",authResp.state);
                    Log.isLoggable("errCode",authResp.errCode);
                    break;
                case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: // 分享给好友、朋友圈
                case ConstantsAPI.COMMAND_PAY_BY_WX:
                    break;
            }
            finish();
        }
    }
    

    好了,其实只要到这一步,拿到回调以后,跟服务器调一下就可以了,剩下的工作就是水到渠成的事了,很简单的一个东西,不知道微信的文档都写的什么东西,(手动头大)。
    这里登陆的时候还有一个坑,可能会提示签名不一致,看我的另一篇文档吧

    确定不粉我一下么 ( ̄▽ ̄)"

    展开全文
  • 微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加密。 微信小程序端 login: function(e) { var that = this; wx.login({ success: function(res){ var code = res.code; //获取code ...
  • 如何利用微信登陆自己的网站

    千次阅读 2020-06-18 16:26:58
    理解如下: 这个默认显示的二维码其实是个固定的链接地址 扫描之后,发送请求到微信开放平台,获取code ... 获取access token之后,就可以调用微信接口获取用户信息了,包括昵称、照片等等 另.
  • cocos creator接入微信登陆sdk ios篇

    千次阅读 2019-06-06 17:18:29
    cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在“info”标签栏的“URL type“添加“URL scheme”为你所...
  • 有问题请私信支持thinkphp5微信登陆授权插件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,134
精华内容 20,453
关键字:

微信登陆