Skip to content

小程序API概览 ​

本文档提供了小程序开发中常用API的概览,帮助开发者快速了解和使用各平台提供的能力。

API分类 ​

小程序API通常可以分为以下几大类:

1. 基础API ​

基础API提供了小程序运行环境的基本功能和信息。

API名称说明平台支持
getSystemInfo获取系统信息全平台
getLaunchOptionsSync获取小程序启动参数全平台
onError监听小程序错误全平台
onPageNotFound监听页面不存在错误微信、支付宝、百度
onUnhandledRejection监听未处理的Promise拒绝事件微信、QQ

2. 网络API ​

网络API提供了与服务器通信的能力。

API名称说明平台支持
request发起网络请求全平台
uploadFile上传文件全平台
downloadFile下载文件全平台
connectSocket创建WebSocket连接全平台
onSocketOpen监听WebSocket连接打开全平台

3. 存储API ​

存储API提供了数据持久化的能力。

API名称说明平台支持
setStorage存储数据全平台
getStorage获取存储的数据全平台
removeStorage删除存储的数据全平台
clearStorage清空所有存储数据全平台
getStorageInfo获取存储信息全平台

4. 媒体API ​

媒体API提供了图片、音频、视频等媒体处理能力。

API名称说明平台支持
chooseImage选择图片全平台
previewImage预览图片全平台
getImageInfo获取图片信息全平台
saveImageToPhotosAlbum保存图片到相册全平台
createVideoContext创建视频上下文全平台

5. 位置API ​

位置API提供了获取用户位置和地图交互的能力。

API名称说明平台支持
getLocation获取当前位置全平台
chooseLocation选择位置全平台
openLocation打开位置全平台
createMapContext创建地图上下文全平台

6. 设备API ​

设备API提供了访问设备硬件和系统功能的能力。

API名称说明平台支持
scanCode扫码全平台
setClipboardData设置剪贴板内容全平台
getClipboardData获取剪贴板内容全平台
makePhoneCall拨打电话全平台
vibrateLong长振动全平台

7. 界面API ​

界面API提供了控制界面显示和交互的能力。

API名称说明平台支持
showToast显示消息提示框全平台
showLoading显示加载提示框全平台
showModal显示模态对话框全平台
showActionSheet显示操作菜单全平台
setNavigationBarTitle设置导航栏标题全平台

8. 路由API ​

路由API提供了控制页面跳转和导航的能力。

API名称说明平台支持
navigateTo保留当前页面,跳转到应用内的某个页面全平台
redirectTo关闭当前页面,跳转到应用内的某个页面全平台
navigateBack关闭当前页面,返回上一页面或多级页面全平台
switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面全平台
reLaunch关闭所有页面,打开到应用内的某个页面全平台

平台差异 ​

虽然各个小程序平台提供了类似的API,但在具体实现和参数上可能存在差异。以下是一些常见的平台差异:

微信小程序特有API ​

  • 开放数据:如获取用户信息、好友关系等
  • 支付:微信支付相关接口
  • 客服消息:接入微信客服
  • 微信运动:获取微信运动步数
  • 卡券:微信卡券相关接口

支付宝小程序特有API ​

  • 支付宝支付:支付宝支付相关接口
  • 会员卡:支付宝会员卡相关接口
  • 生活号:关注生活号相关接口
  • 营销工具:支付宝营销工具相关接口

百度小程序特有API ​

  • 百度账号:百度账号相关接口
  • 收银台:百度收银台相关接口
  • 智能小程序:AI能力相关接口

字节跳动小程序特有API ​

  • 视频内容:抖音、今日头条等内容相关接口
  • 互动组件:点赞、评论等互动相关接口

跨平台开发 ​

在进行跨平台小程序开发时,可以采用以下策略处理API差异:

  1. 使用条件编译:根据不同平台编写不同的代码

    js
    // #ifdef MP-WEIXIN
    wx.login({
      success: res => {
        // 微信登录逻辑
      }
    })
    // #endif
    
    // #ifdef MP-ALIPAY
    my.getAuthCode({
      success: res => {
        // 支付宝登录逻辑
      }
    })
    // #endif
  2. 使用抽象层:封装统一的接口,内部处理平台差异

    js
    function login() {
      if (process.env.MP_PLATFORM === 'WEIXIN') {
        return new Promise((resolve, reject) => {
          wx.login({
            success: resolve,
            fail: reject
          })
        })
      } else if (process.env.MP_PLATFORM === 'ALIPAY') {
        return new Promise((resolve, reject) => {
          my.getAuthCode({
            success: resolve,
            fail: reject
          })
        })
      }
    }
  3. 使用跨平台框架:如Taro、uni-app等,它们提供了统一的API,内部自动处理平台差异

最佳实践 ​

  1. 权限处理:在使用需要用户授权的API前,先检查权限状态

    js
    wx.getSetting({
      success: res => {
        if (!res.authSetting['scope.userLocation']) {
          wx.authorize({
            scope: 'scope.userLocation',
            success: () => {
              wx.getLocation({
                // 获取位置
              })
            }
          })
        } else {
          wx.getLocation({
            // 获取位置
          })
        }
      }
    })
  2. 错误处理:为API调用添加完善的错误处理

    js
    wx.request({
      url: 'https://api.example.com/data',
      success: res => {
        // 处理成功响应
      },
      fail: err => {
        console.error('请求失败', err)
        wx.showToast({
          title: '网络异常,请重试',
          icon: 'none'
        })
      },
      complete: () => {
        // 无论成功失败都会执行
      }
    })
  3. Promise化:将回调式API转换为Promise风格,提高代码可读性

    js
    function requestPromise(options) {
      return new Promise((resolve, reject) => {
        wx.request({
          ...options,
          success: resolve,
          fail: reject
        })
      })
    }
    
    // 使用
    async function getData() {
      try {
        const res = await requestPromise({
          url: 'https://api.example.com/data'
        })
        return res.data
      } catch (err) {
        console.error(err)
        throw err
      }
    }

相关文档 ​

连接多端,赋能创新