智能小程序

优质
小牛编辑
128浏览
2023-12-01

智能小程序

网盘小程序和手百小程序使用同一框架。为了对小程序的权限进行控制,网盘自定了一些scope,如下:

scope描述
pcs_doc_read_write读写网盘文档、文件列表
pcs_pic_rw读写您百度网盘图片资源
pcs_video_rw读写您百度网盘视频资源
pcs_audio_rw读写您百度网盘音频资源
pcs_app_rw读写您百度网盘应用资源

接入流程

1、去 百度智能小程序平台 注册应用,详见 智能小程序注册指导文档

2、开发者发送鉴权邮件,邮件格式如下:

收件人:mars-union@baidu.com
邮件主题:内部API开通鉴权申请-小程序名称-小程序APPID
邮件内容:
小程序信息:小程序名称+APPID
需要鉴权的scope列表:
业务接口人:
业务对接部门:
使用场景描述:
预估收益:

例: 邮件主题:内部API开通鉴权申请-扫描-1482 邮件内容: 小程序信息:扫描-1482 需要鉴权的scope列表:pcs_pic_rw 业务接口人:严* 业务对接部门: 使用场景描述:应用到扫描小程序中,提供图片扫描文字等相关功能 预估收益:***w pv

3、小程序调用SwanCore的api (swan.authorize) 传入网盘scope参数,获取访问用户网盘数据授权

4、小程序调用swan.login取得授权码code

5、小程序通过code2token接口换取access_token

code2token接口由小程序开发者server端自行实现,内部调用http://openapi.baidu.com/nalogin/code2token 实现access_token的获取。

接口参数

参数名是否必须说明
code通过上面第一步所获得的Authorization Code
client_id智能小程序的App Key
sk智能小程序的App Secret

代码示例

swan.authorize

swan.authorize({
     scope: 'pcs_pic_rw',
     success: function (res) {
         swan.login({
             success: function (res) {
                swan.request({
                 url: 'https://code2token接口',
                 method: 'GET',
                 data: {
                     code: res.code,
                     client_id: 'xxxxxxxx',
                 },
                 success:function(data){
                 //从data中获取token
                 },
                 fail:function(){}
                });
             },
             fail: function (err) {
                 console.log('登陆失败', err);
             }
         });
     },
     fail: function (err) {
         console.log(err, 'auth-fail');
     }
 });

code2token

1、请求
curl -X POST "http://openapi.baidu.com/nalogin/code2token"  -d 'client_id=123&sk=456&code=7a8a7941ec877d25af7be341e04abac7'

2、响应 { "openid": "mE1X4nXnGw4IgKMmYXpHX_IYQe", "session_key": "5e6a9eac2dfd043bfc91c3e905fa4821", "token": { "expires_in": 2592000, "refresh_token": "22.8349ff7613add1a5ec58b8d28ec750d0.315360000.1871276124.3344746846-15262859", "access_token": "21.05744f8121f2575e5d1894bf8524358c.2592000.1558508124.3344746846-15262859", "scope": "snsapi_base pcs_pic_rw" } }

使用access_token

swan.request({
  url: 'https://pan.baidu.com/rest/2.0/xpan/multimedia?method=filemetas&access_token=' + token,(上面获取到的token)
    method: 'GET',
    dataType: 'json',
    data: {},
    header: {
        'content-type': 'application/json', // 默认值
    },
    success(res) {
       //解析网盘数据,业务处理
    },
    fail(err){}

获取文件参数

app.js中的onShow生命周期方法中,解析参数获取

onShow(event){
    //fileInfo中目前包含的key有,path,size,fsId,timestamp
    let fileInfo = event.query.fileInfo && JSON.parse(event.query.fileInfo);
    console.log(fileInfo)
}

扩展能力接口

function secondCallback(args) {
    swan.showModal({
        title: '二级回调',
        content: JSON.stringify(args),
        cancelColor: '#999999',
        confirmColor: '#0099cc',
        success: function (res) {
            if (res.confirm) {
                console.log('用户点击了确定');
            } else if (res.cancel) {
                console.log('用户点击了取消');
            }
        }
    });
}
swan.netdisk.selectFile({maxSelectedNum: 2}, secondCallback)
     .then(res => {
         swan.showToast({
             title: '一级回调',
             duration: 2000
         });
     })

更多使用方法,参考 网盘小程序接口文档

不同入口进入的场景处理

区别在于九宫格进入没有携带文件/图片信息,需要小程序自己内部逻辑区别处理, 小程序每次被调起(onshow)的时候,全局的onshow生命周期中都会读取到首次初始化的参数,若小程序内部有场景转换,例如更改文件/图片资源,则需要判断处理下。

附录

每个scope能访问的接口列表是有限的,如下表所示。

scope接口
pcs_doc_read_write/rest/2.0/xpan/file?method=list
/rest/2.0/xpan/file?method=doclist
/rest/2.0/xpan/file?method=precreate
/rest/2.0/xpan/file?method=create
/rest/2.0/xpan/multimedia?method=filemetas
rest/2.0/xpan/share?method=set
/rest/2.0/xpan/share?method=transfer
/rest/2.0/xpan/nas?method=uinfo
pcs_pic_rw/rest/2.0/xpan/device?method=register
/rest/2.0/xpan/device?method=bind
/rest/2.0/xpan/device?method=unbind
/rest/2.0/xpan/device?method=diff
/rest/2.0/xpan/file?method=list
/rest/2.0/xpan/multimedia?method=selectlist
/rest/2.0/xpan/multimedia?method=additem
/rest/2.0/xpan/multimedia?method=itemlist
/rest/2.0/xpan/multimedia?method=delitem
/rest/2.0/xpan/multimedia?method=filemetas
/rest/2.0/xpan/file?method=list
/rest/2.0/xpan/file?method=precreate
/rest/2.0/xpan/file?method=create
/rest/2.0/xpan/nas?method=uinfo