CodeSample小助手 2020-04-02
如果您尚未注册支付宝小程序账号,使用支付宝账号登录蚂蚁金服开放平台,并完成开发者身份注册。详细信息,请参见开发者入驻说明。
详细信息,请参见下载说明。
小程序开发中创建的云资源会和服务空间进行关联。每个服务空间都有一个全局唯一的space ID。在使用云资源时,都通过这个space ID进行关联。参考以下步骤,创建服务空间并设置数据库权限:
参考以下步骤,在蚂蚁金服开放平台创建支付宝小程序:
您可以通过RSA密钥生成工具一键生成小程序密钥。接口加签方式有普通公钥和证书公钥两种,主要用于签名和验证。其中私钥由开发者保存,公钥可对外公开,私钥用于签名,公钥用于验证签名。开发者需要保存自己的私钥,通过支付宝提供的公钥进行通信来保证信息传输的完整性以及发送者身份的真实性。详细信息,请参见生成支付宝RSA密钥。
在开发前,您需要将支付宝小程序信息添加到阿里云小程序Serverless控制台。
完成以下操作,添加支付宝小程序信息:
appId: '2021*********', // 小程序应用标识
spaceId: 'ca8eb10f-26c1-4bee-**********', // 服务空间标识
clientSecret: 'Xckz2************', // 服务空间 secret key
endpoint: 'https://api.************' // 服务空间地址,从小程序Serverless控制台处获得
保存文件后,打开IDE的模拟器,就可以预览相册小程序了。您可以在小程序中新建相册,并将本地图片上传至相册中。
在使用小程序Serverless服务前,需要您在小程序中安装小程序Serverless客户端SDK并初始化。小程序Serverless客户端SDK的更多信息请参见安装客户端SDK2.2版本。
// client/app.js
import MPServerless from '@alicloud/mpserverless-sdk';
const mpserverless = new MPServerless({
uploadFile: my.uploadFile,
request: my.request,
getAuthCode: my.getAuthCode,
}, {
appId: ' ', // 小程序应用标识
spaceId: ' ', // 服务空间标识
clientSecret: ' ', // 服务空间 secret key
endpoint: ' ' // 服务空间地址,从小程序Serverless控制台处获得
});
在调用小程序Serverless服务前,需要先调用authorize接口请求授权,支付宝小程序的授权请求参数authProvider应为alipay_openapi, 更多authorize接口信息请参见authorize。
// client/app.js
async onSubmit() {
await mpserverless.user.authorize({
authProvider: 'alipay_openapi',
// authType: 'anonymous'
})
},
在小程序Serverless客户端SDK初始化完成后,可以将实例化的mpserverless对象放入App全局对象中,这样SDK就可以全局使用了。
// client/app.js
App({
mpserverless,
});
当需要使用SDK时只需从全局对象中获取mpserverless,就可以调用了。
// 其他文件调用
const { mpserverless } = getApp()
// 添加文件数据
mpserverless.db.collection('files').insertOne( { name: '数据表名称', userId: '数据表ID' })
以下代码实现了在页面加载完成后,调用find接口请求数据库,查询当前用户下的相册信息,更多find接口信息请参见find。
async onReady() {
const result = await mpserverless.db.collection('files').find({ userId: '用户id' })
this.setData({
files: result.result || [],
})
},
以下代码实现了在页面加载完成后,调用find接口请求数据库,根据查询出的相册id查询相册下的照片信息。
async onReady() {
// 页面加载完成
const { id } = this.data
await mpserverless.db.collection('photos').find({ fileId: '文件id' }).then((res) => {
this.setData({ imgs: res.result });
}).catch(console.error);
},
以下代码实现了调用小程序的my.chooseImage接口拍照或从本地相册中选择图片,然后调用file.uploadFile接口将图片上传至小程序Serverless的文件服务中。更多信息请参见my.chooseImage和uploadFile。
attach() {
// 选取照片
my.chooseImage({
chooseImage: 1,
success: res => {
const path = res.apFilePaths[0];
const options = {
filePath: path,
headers: {
contentDisposition: 'attachment',
},
};
// 上传图片
mpserverless.file.uploadFile(options).then((image) => {
const { imgs } = this.data
imgs.push(image.fileUrl)
this.setData({
imgs,
});
}).catch(console.log);
},
});
},
以下代码实现了将包括图片的上传路径、图片描述等图片信息保存到云数据库photos集合中。
async submit() {
const obj = { urls: '图片路径', details: '图片描述', fileId: '文件id' }
await mpserverless.db.collection('photos').insertOne(obj)
my.navigateBack()
},