第三方App接入微信登录 解读

uniapp 安卓app 调起微信app 授权登录 要在UniApp中实现调起微信授权登录,需要使用微信的SDK以及UniApp提供的插件功能。以下是实现步骤和示例代码,包含详细注释。 阅读详情

最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢!

准备工作

1.在微信开放平台https://open.weixin.qq.com/注册成为开发者。

2.在“管理中心”中创建一个移动应用,需“应用名称、简介、及28*28和108*108的PNG图片各一张,且大小不超过300k”,点击下一步,需“应用官网地址,应用签名及包名”等信息,然后即可提交审核。 
说明: 
应用签名:可在微信开发平台的资源中心》》资源下载》》中下载“签名生成工具”,用户获取已经安装到手机的第三方应用的签名。输入应用包名,即可获得该应用的签名值。

3.提交审核后,在7个工作日内腾讯将给出审核结果。(通常较快,几个小时就可反馈结果)

微信登录接入

微信登录遵循协议Aouth2.0中的授权码模式

我们来看一下Aouth2.0中的授权码模式是怎么定义的:

授权码模式(authorization code)是功能最完整、流程最严密的授权模式。它的特点就是通过客户端的后台服务器,与”服务提供商”的认证服务器进行互动。 
它的步骤如下:

(A)用户访问客户端,后者将前者导向认证服务器。

(B)用户选择是否给予客户端授权。

(C)假设用户给予授权,认证服务器将用户导向客户端事先指定的”重定向URI”(redirection URI),同时附上一个授权码。

(D)客户端收到授权码,附上早先的”重定向URI”,向认证服务器申请令牌。这一步是在客户端的后台的服务器上完成的,对用户不可见。

(E)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)

微信登录的官方文档将微信登录分为3个步骤:

第一步.请求code

{
    // send oauth request 
     Final SendAuth.Req req = new SendAuth.Req();
     req.scope = "snsapi_userinfo";
     req.state = "wechat_sdk_demo_test";
     api.sendReq(req);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

用这段代码向微信开放平台请求授权码code,可拉起微信并打开授权登录页(前提是你安装了微信应用并已登录,未登录的会引导你先登录),如下图:

1.如果微信授权页不显示,请检查你的APP签名是否和你在腾讯开放平台的APP签名一致,不一致可修改腾讯开放平台中的APP签名,修改后重装微信或清除微信数据后重试。

2.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge,则新的包名为:net.sourceforge.wxapi),此处应注意包名不要弄错,新增类的名字必须为WXEntryActivity。

返回说明 
用户点击授权后,微信客户端会被拉起,跳转至授权界面,用户在该界面点击允许或取消,SDK通过SendAuth的Resp返回数据给调用方。回调WXEntryActivity中的onResp(BaseResp resp)方法,如下:

@Override
    public void onResp(BaseResp resp) {
        int errorCode = resp.errCode;
        switch (errorCode) {
        case BaseResp.ErrCode.ERR_OK:
            //用户同意
            String code = ((SendAuth.Resp) resp).code;
            break;
        case BaseResp.ErrCode.ERR_AUTH_DENIED:
            //用户拒绝
            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            //用户取消
            break;
        default:
            break;
        }
        ToastUtil.showMessageLong(this, resp.errStr);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

客户端收到授权码后,向自己的服务器发起登录请求,并附带收到的授权码。

服务端收到登录请求,向微信开放平台请求获取access_token,微信开放平台返回Json字符串:

第二步:通过code获取access_token(在自己服务器端做)

获取第一步的code后,请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

private String getAccessToken(String code) {
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
        URI uri = URI.create(url);
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(uri);

        HttpResponse response;
        try {
            response = client.execute(get);
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();

                BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
                StringBuilder sb = new StringBuilder();

                for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {
                    sb.append(temp);
                }

                JSONObject object = new JSONObject(sb.toString().trim());
                accessToken = object.getString("access_token");
                openID = object.getString("openid");
                refreshToken = object.getString("refresh_token");
                expires_in = object.getLong("expires_in");
                return accessToken;
            }
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block 
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

参数说明

参数        是否必须        说明 
appid       是        应用唯一标识,在微信开放平台提交应用审核通过后获得

secret      是      应用密钥AppSecret,在微信开放平台提交应用审核通过后获得

code        是       填写第一步获取的code参数

grant_type  是      填authorization_code回说明**
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

正确的返回:

{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE",
"unionid":"o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
    参数                              说明
access_token                    接口调用凭证
expires_in  access_token        接口调用凭证超时时间,单位(秒)
refresh_token                   用户刷新access_token
openid                          授权用户唯一标识
scope                           用户授权的作用域,使用逗号(,)分隔
unionid          只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
错误返回样例:
{"errcode":40029,"errmsg":"invalid code"}
  • 1
  • 2

服务端收到返回的access_token,将access_token,expires_in,access_token是否有效 等数据返回给客户端,客户端成功登录

客户端可利用已有的access_token获取微信用户信息

第三步:通过access_token调用接口

获取access_token后,进行接口调用,有以下前提:

  1. access_token有效且未超时;
  2. 微信用户已授权给第三方应用帐号相应接口作用域(scope)。

对于接口作用域(scope),能调用的接口有以下:

授权作用域(scope)             接口                接口说明
snsapi_base       /sns/oauth2/access_token     通过code换取              access_token、refresh_token和已授权scope
                    /sns/oauth2/refresh_token  刷新或续期access_token使用
                    /sns/auth                  检查access_token有效性
snsapi_userinfo    /sns/userinfo               获取用户个人信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

其中snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。

以获取用户信息为例:

private void getUserInfo() {
        if (isAccessTokenIsInvalid() && System.currentTimeMillis() < expires_in) {
            String uri = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openID;
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(URI.create(uri));
            try {
                HttpResponse response = client.execute(get);
                if (response.getStatusLine().getStatusCode() == 200) {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
                    StringBuilder builder = new StringBuilder();
                    for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {
                        builder.append(temp);
                    }
                    JSONObject object = new JSONObject(builder.toString().trim());
                    String nikeName = object.getString("nickname");
                }
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

微信重复登录

假设用户已经获得授权,则下次登录时只需要验证access_token是否有效,无效则重新获取授权,有效则无需重新获得授权。

1.用户向自己的服务器请求登录,登录方式为微信登录,附带上次登录返回的的access_token

2.服务器收到用户的登录请求,向微信开放平台发送access_token是否有效的验证请求如下:

private boolean isAccessTokenIsInvalid() {
        String url = "https://api.weixin.qq.com/sns/auth?access_token=" + accessToken + "&openid=" + openID;
        URI uri = URI.create(url);
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(uri);
        HttpResponse response;
        try {
            response = client.execute(get);
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();

                BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
                StringBuilder sb = new StringBuilder();

                for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {
                    sb.append(temp);
                }
                JSONObject object = new JSONObject(sb.toString().trim());
                int errorCode = object.getInt("errcode");
                if (errorCode == 0) {
                    return true;
                }
            }
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

返回说明

正确的Json返回结果:
{ 
"errcode":0,"errmsg":"ok"
}
错误的Json返回示例:
{ 
"errcode":40003,"errmsg":"invalid openid"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果access_token有效,服务端将信息返回给客户端,客户端成功登录。

如果access_token无效,服务端向微信开放平台发送刷新access_token的请求如下:

access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新,access_token刷新结果有两种:

1.若access_token已超时,那么进行refresh_token会获取一个新的access_token,新的超时时间; 
2.若access_token未超时,那么进行refresh_token不会改变access_token,但超时时间会刷新,相当于续期access_token。

refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。

private void refreshAccessToken() {
        String uri = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + ShareUtil.APP_ID + "&grant_type=refresh_token&refresh_token="
                + refreshToken;
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(URI.create(uri));
        try {
            HttpResponse response = client.execute(get);
            if (response.getStatusLine().getStatusCode() == 200) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
                StringBuilder builder = new StringBuilder();
                for (String temp = reader.readLine(); temp != null; temp = reader.readLine()) {
                    builder.append(temp);
                }
                JSONObject object = new JSONObject(builder.toString().trim());
                accessToken = object.getString("access_token");
                refreshToken = object.getString("refresh_token");
                openID = object.getString("openid");
                expires_in = object.getLong("expires_in");
            }
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

返回说明

正确的返回:
{ 
"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN", 
"openid":"OPENID", 
"scope":"SCOPE" 
}
参数                    说明
access_token       接口调用凭证
expires_in        access_token接口调用凭证超时时间,单位(秒)
refresh_token     用户刷新access_token
openid           授权用户唯一标识
scope          用户授权的作用域,使用逗号(,)分隔

错误返回样例:
{
"errcode":40030,"errmsg":"invalid refresh_token"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

3.服务端获取到新的access_token等信息,并返回给客户端,客户端成功登录或者重新获取授权。

Android Studio App 接入微信登录 安卓接入微信登录 微信开发平台获取AppId和AppSecret开始接入添加依赖注册wxApi登录调用监听登录回调注意事项 微信开发平台获取AppId和AppSecret 创建应用 填写对应资料 开始接入 添加依赖 Android Studio环境下: 在build.gradle文件中,添加如下依赖即可: dependencies { compile ‘com.tencent.mm.open... 阅读详情

相关推荐

最新!!! iOS app添加微信授权登录——Qt for IOS

前言 为了将Qt开发的ios app增加微信授权登录的功能,我用了很长的时间去查资料和测试。之前我对于Qt开发苹果移动端不甚了解,只按照教程和自己琢磨,写过一版简单的app(那是我第一次接触ios),对于Qt是怎么实现跨平台到ios的,也不清楚,至于Qt框架是怎么转化成xcode那套框架的,这个从未想过。现在不容我再犯懒了:微信,无论是开发文档,还是库文件、接口,都是针对苹果原生态那套东西,接口的调用也是在原生态框架上,对于我跨平台实现,就太不友好了,所以怎么获取到原生态框架,是我的一大难点。 在我跨过

xiaopei_yan的博客 2524

Android APP开发集成微信登陆流程(手把手新手版)

本文比较适合新手玩家,老玩家就不要看了昨天整了下微信登陆,乍一看官方文档还有点难懂!遂自己整理了下流程,给大家参考参考。官方文档链接:准备工作 | 微信开放文档微信开发者平台文档微信开放平台注意事项:包名和签名信息一定不能错,错了拉不起微信!应用通过审核了才能进行测试。

Monkey_King_Bar的博客 1万+

APP上架APP Store因为苹果登录被拒,该如何解决

如果 APP 使用第三方或社交登录服务 (例如,Facebook 登录、Google 登录、通过 Twitter 登录、通过 LinkedIn 登录、通过 Amazon 登录或微信登录) 来对其进行设置或验证这个 APP 的用户主帐户,则该 APP 必须同时提供“通过Apple 登录”作为同等选项。用户的主帐户是指在 APP 中建立的、用于标识身份、登录和访问功能和相关服务的帐户。

cuckoomin的博客 2139

第三方App接入微信登录 解读流程(完善中)

第三方App接入微信登录 解读 准备工作 1.在微信开放平台https://open.weixin.qq.com/注册成为开发者。 2.在“管理中心”中创建一个移动应用,需“应用名称、简介、及28*28和108*108的PNG图片各一张,且大小不超过300k”,点击下一步,需“应用官网地址,应用签名及包名”等信息,然后即可提交审核。  说明:  应用签名:可在微信开发平台的资源中

qq_38243970的博客 2337

uni-app第三方登录集成:微信、QQ、微博一键登录

在当今的移动应用开发中,用户希望能够快速便捷地登录应用。第三方登录就是一个很好的解决方案,它允许用户使用自己已有的微信、QQ、微博等账号来登录我们的应用,无需再注册新账号。本文的目的就是教大家如何在uni-app中集成微信、QQ、微博的第三方登录功能。范围涵盖了从原理讲解到实际代码实现的整个过程。本文首先会介绍第三方登录相关的核心概念,包括它们的原理和相互关系。然后会详细讲解实现第三方登录的核心算法原理和具体操作步骤,还会给出数学模型和公式。接着通过项目实战,展示代码的实际案例并进行详细解读。

小程序开发 831

Zemax实战录——非序列模式下的微透镜阵列仿真与优化

本文详细介绍了在Zemax非序列模式下进行微透镜阵列仿真的完整流程与优化技巧。文章重点阐述了从序列模式切换到非序列模式的必要性,并逐步指导如何搭建光源、阵列与探测器的仿真环境。核心在于通过调整圆锥系数等关键参数优化像差,并增加光线数以提升仿真精度与均匀性,为光学设计提供可靠依据。

weixin_28339967的博客 524

第三方App接入微信登录 解读 (微信开放平台)

http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台  和  微信公众平台  概念不同。 第一步:获取AppID AppSecret(不做解释,自己去微信公众平台申请)   第二步:生成扫描二维码,获取code https://open.weixin.qq.com/connect/qrconnect?appid=AppID&

北极洲的博客 6万+

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 435

第三方App接入微信登录 解读(转)

转自http://blog.youkuaiyun.com/luoyan973387349/article/details/49815225 , 更多详细资料请参考原文 最近在做一个微信登录功能,发现腾讯的API文档写的实在是让人摸不着头脑,也没有搜到很详细的能让人参考的文章,借此把自己的一点儿使用心得与大家分享,欢迎指正其中的不足之处,谢谢! 准备工作 1.在微信开放平台https://open.wei...

weixin_30920091的博客 145

意图识别和纠错问题

可想而知,错误的意图识别会带来多大的负面影响。基于词典,就是对用户query内容和词典内容进行比对,比较常见的方式是序列标注问题里用的最大逆向匹配,通过这种方式找到词典里的实体词,匹配触发了自然就有意图了,而在词典匹配的时候,不是使用链表之类的来构造匹配结构,而是使用搜索树的结构,这种匹配的复杂度最低,速度也快,两者结合,其速度甚至比很多模型要快得多(基本上1ms以内就能完成),fasttext速度非常快,但是textcnn之类的其实就已经达到ms级别以上,bert甚至在10ms级别。

TURING.DT 4573

Redhawk解析PAD / IOPAD的实现方法

Redhawk解析IOPAD的实现方法1. IOPAD DEF的概念说明2. 生成 IOPAD GDS文件3. 生成 IOPAD DEF文件4. Redhawk解析过程中读取IOPAD DEF 本文主要简述【Redhawk解析IOPAD】的实现原理方法,具体脚本没有放在这里。 1. IOPAD DEF的概念说明 2. 生成 IOPAD GDS文件 注: getinfo2IODEF.tcl 是基于innovus获取IOPAD的摆放信息以及库信息。 run_cerate_iopadgds.csh 是基于c

kobayashiyou的博客 3155

第三方App(或网页应用)接入微信登录 解读 (微信开放平台)

http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台  和  微信公众平台  概念不同。   1、首先需要注册微信开放平台,然后获取开发者认证。审批通过之后再创建一个移动应用同样还是需要审批。通过之后就可以给这个应用添加微信授权登陆以及相应功能了。这里移动应用审批通过之后会给你两个参数,一个叫AppId,一个叫Secret。这两个参数在...

一路奔跑94的博客 7万+

揭秘大厂 Unity 红点系统设计:别小看右上角那颗小红点,它能把你项目搞崩

本文详细探讨了游戏大厂如何设计高性能红点系统。红点作为提升用户活跃和转化率的重要工具,需要支持多级联动、动态判断和全局一致性。系统采用观察者模式和树形结构,分为数据管理、逻辑判定、订阅通知和UI展示四大模块,通过事件驱动方式实现高效刷新。文章特别强调了解耦设计、配置化管理和性能优化,并提出了热更新、数据分析等高级应用场景。最终指出,优秀的红点系统需要架构标准化、自动化配置和团队紧密协作,是大型游戏项目的关键技术基础。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 378

uniapp微信多端登录的解读

小程序:利用微信提供的原生能力 (uni.login),体验最流畅。H5 网页:遵循标准的 OAuth 2.0 网页授权协议,根据是否在微信环境内,使用不同的授权入口 (vsqrconnect原生 App:依赖微信官方 SDK,并需要进行严格的平台相关配置(安卓的 AppID 签名,iOS 的 Universal Links)。

chaoxxggg的博客 1304

【产品经理修炼之道】-如何搭建企业级账务系统?

笔者公司的业务模式具有一定的独特性,不同于我们常见的市面上供应链类公司的进销存模式。公司主要为各大银行和金融机构提供信贷领域的风控服务,客户主要通过请求公司的数据产品接口产生费用,可以简单地理解为请求一次接口收费0.5元,一个月若是有1w人请求同一个接口则公司需要收费5000元。

xiaoli8748的专栏 5407

uniapp - 详细手机端h5网页调用手机摄像头进行二维码识别扫描,在uniapp的H5移动端微信网页平台中,在浏览器中调用手机扫码功能详细教程,识别二维码并获取扫描结果(完整示例源码,一键复制即用

uniapp,h5,手机端网页,H5手机网页,uniapp开发h5实现扫码功能,uniapp微信h5网页扫码sdk使用教程,uniapp h5网页如何实现浏览器扫码,uniapp扫码功能怎么兼容h5_uniapph5怎么做扫码功能,uniapp的手机网页如何实现扫二维码一维码,浏览器H5实现js扫码,H5调用摄像头和扫一扫功能,亲测可用,H5调用本地摄像头实现扫一扫,uni-h5项目解决扫码功能,uniapp实现微信H5扫码,解决uniapp在H5端使用不能扫码问题,uni-app的h5扫码(二维码、条形码

✅ 精选推荐文章 1万+

解读第三方授权登录:OAuth2.0协议标准的应用与流程

OAuth是Open Authorization(开放授权)的缩写,它是一项业界标准的授权协议,主要用于授权第三方应用访问其他应用的资源,同时避免用户将自身的凭据(用户名和密码)直接提供给第三方应用。OAuth2.0是OAuth协议的延续版本,相比于OAuth1.0采用了更简单和更安全的授权流程,同时引入了一些新的安全特性。如果向前兼容OAuth1.0,难以确保整个授权体系的安全性,所以OAuth2.0不向前兼容OAuth1.0。

zhuanzhuantech的博客 4044

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

PSO-BP和BP多输入多输出回归预测模型 matlab (多输入多输出)

算法如诗的博客 258

egret微端安卓接入微信登录

前言: 1.egret版本5.25 2.微端版本0.1.18 3.接入时间2019/12/30 4.默认你的app已经审核通过,有了自己的appId 本文主要讲解接入egret安卓微端接入微信登录的一些坑吧,主要思路以微信开放平台官方文档为主,根据官方文档,难理解的地方进行讲解。 内容: 1.熟读官方文档,熟读官方文档,每个人都是踩着坑过来的,即使没有这篇文章,你也可以自己弄出来 ...

xzl159的专栏 628

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 2017年最新苹果开发者账号注册申请流程最强详解!
下一篇: unity shader 流水线及矩阵
FoxGameY
博客等级 码龄13年 81粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值