APICloud 微信授权登录

本文介绍如何通过配置config.xml并使用wx模块实现微信登录授权流程,包括判断微信客户端安装状态、获取授权code、利用code换取accessToken及刷新令牌,最后通过accessToken获取用户详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

使用此模块之前建议先配置 config.xml 文件,配置完毕,需通过云端编译生效,配置方法如下:

 

  • 名称:wx
  • 参数:urlScheme、apiKey、apiSecret
  • 配置示例:
  <feature name="wx">
    <param name="urlScheme" value="wxd0d84bbf23b4a0e4"/>
    <param name="apiKey" value="wxd0d84bbf23b4a0e4"/>
    <param name="apiSecret" value="a354f72aa1b4c2b8eaad137ac81434cd"/>
  </feature>
  • 字段描述:

    urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动微信客户端,也可以从微信客户端跳回本应用。urlScheme 的 value 值是从微信开放平台获取的 appid。appid 申请方法参考微信开放平台接入文档

    apiKey:(必须配置)从微信开放平台获取的 appid,值与 urlScheme 相同。appid 申请方法参考微信开放平台接入文档

    apiSecret:从微信开放平台获取的 secret。获取 accessToken 时需要配置此项。appid 申请方法参考微信开放平台接入文档

 

 

引入wx模块

var wx = api.require('wx');

判断当前手机是否安装微信客户端

wx.isInstalled(function(ret, err) {
    if (ret.installed) {
        alert("当前设备已安装微信客户端");
    } else {
        alert('当前设备未安装微信客户端');
    }
});

auth 登录授权(用于实现第三方登录

auth({params}, callback(ret, err))

params

apiKey:

  • 类型:字符串
  • 描述:(可选项)从微信开放平台获取的 appid,若不传则从当前 widget 的 config.xml 中读取,不传或传入错误的 apiKey,则无法打开微信进行登录。

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
  status: true,       //布尔型;true||false
  code: ''           //字符串类型;getToken 接口需传入此值,用于换取 accessToken
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    code: 0     //数字类型;
                //错误码:
                //-1(未知错误),
                //0(成功,用户同意)
                //1 (用户取消)
                //2 (用户拒绝授权)
                //3 (当前设备未安装微信客户端)
}

示例代码

var wx = api.require('wx');
wx.auth({
    apiKey: ''
}, function(ret, err) {
    if (ret.status) {
        alert(JSON.stringify(ret));
    } else {
        alert(err.code);
    }
});

getToken获取授权 accessToken(需要登录授权成功

getToken({params}, callback(ret, err))

params

apiKey:

  • 类型:字符串
  • 描述:(可选项)从微信开放平台获取的 appid,若不传则从当前 widget 的 config.xml 中读取。

apiSecret

  • 类型:字符串
  • 描述:(可选项)从微信开放平台获取的 secret,若不传则从当前 widget 的 config.xml 中读取。

code

  • 类型:字符串
  • 描述:通过 auth 接口授权成功后返回的 code 参数

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
  status: true,      //布尔型;true||false
  accessToken: '',   //字符串类型;接口调用凭证,传给 getUserInfo 接口 获取用户信息;有效期2小时
  dynamicToken: '',  //字符串类型;当 accessToken 过期时把该值传给 refreshToken 接口刷新 accessToken 的有效期。dynamicToken 的有效期为30天
  expires: 7200,     //数字类型;accessToken 有效期,单位(秒)
  openId: ''         //字符串类型;授权用户唯一标识
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    code: 0     //数字类型;
                //错误码:
                //-1(未知错误),
                //0 (成功)
                //1 (apiKey值为空或非法)
                //2 (apiSecret值为空或非法)
                //3 (code值为空或非法)
                //4 (网络超时)
}

示例代码

var wx = api.require('wx');
wx.getToken({
    apiKey: '',
    apiSecret: '',
    code: "12346857684"
}, function(ret, err) {
    if (ret.status) {
        alert(JSON.stringify(ret));
    } else {
        alert(err.code);
    }
});

补充说明

此接口需要访问网络,异步调用 callback 需要一段时间才能返回 accessToken

getUserInfo获取用户信息(需要获取 accessToken 成功

params

accessToken:

  • 类型:字符串
  • 描述:getToken 接口或 refreshToken 接口成功获取的 accessToken 值

openId:

  • 类型:字符串
  • 描述:getToken 接口或 refreshToken 接口成功获取的 openId 值

lang:

  • 类型:字符串
  • 描述:(可选项)国家地区语言版本
  • 默认:zh_CN
  • 取值范围:
    • zh_CN 简体
    • zh_TW 繁体
    • en 英语

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status: true,      //布尔型;true||false
    openid: '',        //字符串类型;普通用户的标识,对当前开发者帐号唯一
    nickname: '',      //字符串类型;普通用户昵称
    sex: 1,            //数字类型;普通用户性别,1为男性,2为女性
    headimgurl: '',    //字符串类型;用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
    privilege: [],     //数组类型;用户特权信息,如微信沃卡用户为(chinaunicom)
    unionid: ''        //字符串类型;用户统一标识。针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
}

err:

  • 类型:JSON 对象
  • 内部字段:
{
    code: 0     //数字类型;
                //错误码:
                //-1(未知错误),
                //0 (成功),
                //1 (accessToken 过期),
                //2  (openId非法),
                //3  (openId值为空),
                //4     (accessToken值为空),
                //5     (accessToken非法)
                //6     (网络超时)
}

示例代码

var wx = api.require('wx');
wx.getUserInfo({
    accessToken: '',
    openId: ''
}, function(ret, err) {
    if (ret.status) {
        alert(JSON.stringify(ret));
    } else {
        alert(err.code);
    }
});

 

给大家讲下 自己做到列子,

apiKey和apiSecret 都是官网提供的,不能授权登录获取到用户信息

function initWXBind() {
	
     var wx = api.require('wx');
     var code = '';
	wx.isInstalled(function(ret, err) {
	    if (!ret.installed) {
	        alert("当前设备未安装微信客户端");
	    } else {
	    	wx.auth({
			    apiKey: 'wxd0d84bbf23b4a0e4'
			}, function(ret, err) {
			    if (ret.status) {
			        wx.getToken({
					    apiKey: 'wxd0d84bbf23b4a0e4',
					    apiSecret: 'a354f72aa1b4c2b8eaad137ac81434cd',
					    code: ret.code
					}, function(ret, err) {
					    if (ret.status) {
					    	 api.showProgress({
	                            style: 'default',
	                            animationType: 'fade',
	                            title: '授权成功',
	                            text: '绑定处理中...',
	                            modal: true
	                        });
	                         wx.getUserInfo({
	                            accessToken: ret.accessToken,
	                            openId: ret.openId
	                        }, function(ret, err) {
	                            if (ret.status) {
	                                // 绑定成功 
	                                WXbindAccount(ret.openid);
	                                api.hideProgress();
	                                
	                               
	                            }
	                        }); 
					    } else {
					        alert(err.code);
					    }
					});
		    } 
			});
	    }
	});
}  

 

调用接口,传参

function WXbindAccount(参数1) {  
    api.ajax({
        url: '接口',
        method: 'get',
        data: {
            values: { 
                openid: 参数, 
            }
        }
    }, function(ret, err) { 
        if (ret.retCode == 200) {
        	$api.setStorage("保存当前user",ret.data);
        	api.closeWin({
            	name:"login"
            }); 
        	return true; 
        } 
    });
}

 

 

 

 

 

转载于:https://my.oschina.net/zqouba/blog/806954

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值