智能小程序
智能小程序
网盘小程序和手百小程序使用同一框架。为了对小程序的权限进行控制,网盘自定了一些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 |