apicloud微信登录

在一次使用apicloud框架开发时候,遇到了微信登录配置问题

  • 首先先要进官网在此项目中加入wx模块,便能使用模块里的一些功能。

  • 本模块封装了微信开放平台的原生 SDK,集成了微信登录、微信分享功能;可用于实现微信账号登录,分享内容到朋友圈或好友、收藏等功能;轻松、高效集成微信功能到自己的 app 内。使自己的 app 和微信实现无缝链接。

  • 使用此模块之前建议先配置 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 申请方法参考微信开放平台接入文档

  • 引入模块,判断当前手机是否安装微信客户端
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,则无法打开微信进行登录。
    scope:
  • 类型:字符串
    描述:(可选项)授权域,什么是授权域?
    默认:snsapi_userinfo
    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(需要登录授权成功)
开发者可不通过本接口来获取token,可自行访问微信接口获取。

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);
    }
});

getUserInfo
获取用户信息(需要获取 accessToken 成功)
开发者可不通过本接口来获取,可自行访问微信接口获取。
getUserInfo({params}, callback(ret, err))

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);
    }
});

refreshToken
调用 getUserInfo 接口错误码返回1时,代表 accessToken 过期,调用此接口刷新 accessToken

本接口封装的微信刷新 token 的接口。详情参考微信官方文档之-----第三步:通过access_token调用接口
refreshToken({params}, callback(ret, err))
params
apiKey:

  • 类型:字符串
    描述:(可选项)从微信开放平台获取的 appid,若不传则从当前 widget 的 config.xml 中读取。
    dynamicToken:
  • 类型:字符串
    描述:getToken 接口或 refreshToken 接口获取的 dynamicToken 值
    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(refreshToken值为空),
                //3(refreshToken非法),
                //4(网络超时)
}

示例代码

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

给大家看下我的例子

wxl() {
    if (api.systemType != "ios") {
        wx.isInstalled(function (ret, err) {
            if (ret.installed) {
                wxl();
            } else {
                api.toast({
                    msg: '请安装微信客户端后重试',
                    duration: 2000,
                    location: 'middle'
                });
            }
        });
    } else {
        wxl();
    }
}
```wxl () {
      var wx = api.require('wx');
      wx.auth({
        apiKey: ''
      }, function(ret, err) {
        // alert(ret.code)
        console.log(ret.code)
        // return
        if (ret.status) {
          http.get('/user/wLogin',{
            code: ret.code
          }).then(res => {
            // alert(JSON.stringify(res))
            if (res.code === 0) {
              utils.storage.set('Token', res.data.usernfo.token)
              utils.storage.set('userInfo', res.data.useinfo)
              api.toast({
                msg: res.msg,
                duration: 2000,
                location: 'bottom',
                global: true
              })
              api.sendEvent({
                name: 'login'
              });
              api.closeToWin({
                name: 'root'
              })
            
            } else {
              api.toast({
                msg: res.msg,
                duration: 2000,
                location: 'bottom',
                global: true
              })
            }
          })
        } else {
          // alert(err.code);
        }
      });
    },

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值