Skip to content

API Overview ​

Mini programs provide a rich set of APIs that allow developers to access device capabilities, interact with the host platform, and create powerful user experiences. This guide provides an overview of the common APIs available across different mini program platforms.

Core API Categories ​

Mini program APIs can be broadly categorized into the following groups:

1. Network ​

APIs for making network requests and transferring data.

Request ​

javascript
wx.request({
  url: 'https://api.example.com/data',
  method: 'GET',
  data: {
    param1: 'value1',
    param2: 'value2'
  },
  header: {
    'content-type': 'application/json'
  },
  success: (res) => {
    console.log('Request successful:', res.data)
  },
  fail: (err) => {
    console.error('Request failed:', err)
  },
  complete: () => {
    console.log('Request completed')
  }
})

WebSocket ​

javascript
const socketTask = wx.connectSocket({
  url: 'wss://example.com/socket',
  header: {
    'content-type': 'application/json'
  },
  protocols: ['protocol1']
})

socketTask.onOpen(() => {
  console.log('WebSocket connection opened')
  socketTask.send({
    data: JSON.stringify({ message: 'Hello Server' })
  })
})

socketTask.onMessage((res) => {
  console.log('Message received:', res.data)
})

socketTask.onClose(() => {
  console.log('WebSocket connection closed')
})

Download File ​

javascript
wx.downloadFile({
  url: 'https://example.com/file.pdf',
  success: (res) => {
    if (res.statusCode === 200) {
      console.log('Download successful, temp file path:', res.tempFilePath)
    }
  }
})

Upload File ​

javascript
wx.uploadFile({
  url: 'https://example.com/upload',
  filePath: tempFilePath,
  name: 'file',
  formData: {
    'user': 'test'
  },
  success: (res) => {
    console.log('Upload successful:', res.data)
  }
})

2. Storage ​

APIs for data persistence and storage management.

Local Storage ​

javascript
// Store data
wx.setStorage({
  key: 'userInfo',
  data: {
    name: 'John',
    age: 30
  },
  success: () => {
    console.log('Data stored successfully')
  }
})

// Retrieve data
wx.getStorage({
  key: 'userInfo',
  success: (res) => {
    console.log('Retrieved data:', res.data)
  }
})

// Remove data
wx.removeStorage({
  key: 'userInfo',
  success: () => {
    console.log('Data removed successfully')
  }
})

// Clear all data
wx.clearStorage({
  success: () => {
    console.log('Storage cleared successfully')
  }
})

// Synchronous versions
wx.setStorageSync('key', 'value')
const value = wx.getStorageSync('key')
wx.removeStorageSync('key')
wx.clearStorageSync()

3. UI Components ​

APIs for interacting with built-in UI components.

Toast ​

javascript
wx.showToast({
  title: 'Operation successful',
  icon: 'success',
  duration: 2000
})
javascript
wx.showModal({
  title: 'Confirmation',
  content: 'Are you sure you want to delete this item?',
  success: (res) => {
    if (res.confirm) {
      console.log('User confirmed')
    } else if (res.cancel) {
      console.log('User canceled')
    }
  }
})

Loading ​

javascript
wx.showLoading({
  title: 'Loading...',
})

setTimeout(() => {
  wx.hideLoading()
}, 2000)

Action Sheet ​

javascript
wx.showActionSheet({
  itemList: ['Option A', 'Option B', 'Option C'],
  success: (res) => {
    console.log('Selected option index:', res.tapIndex)
  },
  fail: (res) => {
    console.log('Action sheet closed')
  }
})

4. Navigation ​

APIs for navigating between pages.

javascript
wx.navigateTo({
  url: '/pages/detail/detail?id=123',
  success: () => {
    console.log('Navigation successful')
  }
})

Redirect To ​

javascript
wx.redirectTo({
  url: '/pages/detail/detail?id=123'
})
javascript
wx.navigateBack({
  delta: 1
})

Switch Tab ​

javascript
wx.switchTab({
  url: '/pages/home/home'
})

Reload Page ​

javascript
wx.reLaunch({
  url: '/pages/index/index'
})

5. Media ​

APIs for handling images, audio, video, and other media.

Image ​

javascript
// Choose image from album or camera
wx.chooseImage({
  count: 1,
  sizeType: ['original', 'compressed'],
  sourceType: ['album', 'camera'],
  success: (res) => {
    const tempFilePaths = res.tempFilePaths
    console.log('Selected image paths:', tempFilePaths)
  }
})

// Preview image
wx.previewImage({
  current: 'https://example.com/image1.jpg',
  urls: [
    'https://example.com/image1.jpg',
    'https://example.com/image2.jpg'
  ]
})

// Save image to album
wx.saveImageToPhotosAlbum({
  filePath: 'tempFilePath',
  success: () => {
    console.log('Image saved to album')
  }
})

Audio ​

javascript
const audioContext = wx.createInnerAudioContext()
audioContext.src = 'audio.mp3'
audioContext.autoplay = true
audioContext.onPlay(() => {
  console.log('Audio started playing')
})
audioContext.onError((res) => {
  console.log('Audio error:', res.errMsg)
})
audioContext.play()

Video ​

javascript
// Record video
wx.chooseVideo({
  sourceType: ['album', 'camera'],
  maxDuration: 60,
  camera: 'back',
  success: (res) => {
    console.log('Video path:', res.tempFilePath)
    console.log('Video duration:', res.duration)
    console.log('Video size:', res.size)
  }
})

// Video context for controlling video component
const videoContext = wx.createVideoContext('myVideo')
videoContext.play()
videoContext.pause()
videoContext.seek(30)
videoContext.requestFullScreen()
videoContext.exitFullScreen()

6. Location ​

APIs for accessing location information and maps.

Get Location ​

javascript
wx.getLocation({
  type: 'wgs84',
  success: (res) => {
    const latitude = res.latitude
    const longitude = res.longitude
    console.log(`Current location: ${latitude}, ${longitude}`)
  }
})

Choose Location ​

javascript
wx.chooseLocation({
  success: (res) => {
    console.log('Selected location name:', res.name)
    console.log('Selected location address:', res.address)
    console.log('Selected location latitude:', res.latitude)
    console.log('Selected location longitude:', res.longitude)
  }
})

Open Location ​

javascript
wx.openLocation({
  latitude: 23.099994,
  longitude: 113.324520,
  name: 'Location Name',
  address: 'Location Address',
  scale: 18
})

7. Device ​

APIs for accessing device information and capabilities.

System Information ​

javascript
wx.getSystemInfo({
  success: (res) => {
    console.log('System info:', res)
    console.log('Brand:', res.brand)
    console.log('Model:', res.model)
    console.log('Platform:', res.platform)
    console.log('System:', res.system)
    console.log('Screen width:', res.screenWidth)
    console.log('Screen height:', res.screenHeight)
  }
})

Network Status ​

javascript
wx.getNetworkType({
  success: (res) => {
    console.log('Network type:', res.networkType)
  }
})

wx.onNetworkStatusChange((res) => {
  console.log('Network changed - connected:', res.isConnected)
  console.log('Network changed - type:', res.networkType)
})

Accelerometer ​

javascript
wx.startAccelerometer({
  interval: 'game'
})

wx.onAccelerometerChange((res) => {
  console.log('Accelerometer data:', res)
  console.log('X:', res.x)
  console.log('Y:', res.y)
  console.log('Z:', res.z)
})

// When done
wx.stopAccelerometer()

Compass ​

javascript
wx.startCompass()

wx.onCompassChange((res) => {
  console.log('Compass direction:', res.direction)
})

// When done
wx.stopCompass()

Vibration ​

javascript
// Short vibration
wx.vibrateShort({
  success: () => {
    console.log('Short vibration triggered')
  }
})

// Long vibration
wx.vibrateLong({
  success: () => {
    console.log('Long vibration triggered')
  }
})

8. File System ​

APIs for managing files.

File System Manager ​

javascript
const fs = wx.getFileSystemManager()

// Read file
fs.readFile({
  filePath: `${wx.env.USER_DATA_PATH}/test.txt`,
  encoding: 'utf8',
  success: (res) => {
    console.log('File content:', res.data)
  }
})

// Write file
fs.writeFile({
  filePath: `${wx.env.USER_DATA_PATH}/test.txt`,
  data: 'Hello, World!',
  encoding: 'utf8',
  success: () => {
    console.log('File written successfully')
  }
})

// Copy file
fs.copyFile({
  srcPath: `${wx.env.USER_DATA_PATH}/source.txt`,
  destPath: `${wx.env.USER_DATA_PATH}/destination.txt`,
  success: () => {
    console.log('File copied successfully')
  }
})

// Remove file
fs.unlink({
  filePath: `${wx.env.USER_DATA_PATH}/test.txt`,
  success: () => {
    console.log('File removed successfully')
  }
})

9. Authentication ​

APIs for user authentication and authorization.

User Info ​

javascript
wx.getUserProfile({
  desc: 'Used for user profile display',
  success: (res) => {
    console.log('User info:', res.userInfo)
    console.log('Avatar URL:', res.userInfo.avatarUrl)
    console.log('Nickname:', res.userInfo.nickName)
  }
})

Login ​

javascript
wx.login({
  success: (res) => {
    if (res.code) {
      // Send code to your server to exchange for session key
      console.log('Login code:', res.code)
    } else {
      console.log('Login failed:', res.errMsg)
    }
  }
})

Check Session ​

javascript
wx.checkSession({
  success: () => {
    // Session still valid
    console.log('Session valid')
  },
  fail: () => {
    // Session expired, need to re-login
    console.log('Session expired')
    wx.login()
  }
})

10. Payment ​

APIs for handling payments.

javascript
wx.requestPayment({
  timeStamp: '1599214239',
  nonceStr: 'nonceStr',
  package: 'prepay_id=wx20200904153719xxxxxxxx',
  signType: 'MD5',
  paySign: 'paySign',
  success: (res) => {
    console.log('Payment successful')
  },
  fail: (err) => {
    console.log('Payment failed:', err)
  }
})

Platform-Specific APIs ​

Different mini program platforms may offer unique APIs. Here are some examples:

WeChat Mini Program ​

javascript
// Open mini program
wx.navigateToMiniProgram({
  appId: 'appId',
  path: 'pages/index/index',
  extraData: {
    foo: 'bar'
  },
  success: () => {
    console.log('Navigation successful')
  }
})

// Cloud functions
wx.cloud.callFunction({
  name: 'functionName',
  data: {
    param1: 'value1'
  },
  success: (res) => {
    console.log('Cloud function result:', res.result)
  }
})

Alipay Mini Program ​

javascript
// Scan code
my.scan({
  type: 'qr',
  success: (res) => {
    console.log('Scan result:', res.code)
  }
})

// Trade pay
my.tradePay({
  tradeNO: 'tradeNo',
  success: (res) => {
    console.log('Payment result:', res.resultCode)
  }
})

API Compatibility ​

When developing cross-platform mini programs, it's important to consider API compatibility. Here are some strategies:

1. Use Abstraction Layers ​

Create wrapper functions that handle platform differences:

javascript
function request(options) {
  if (typeof wx !== 'undefined') {
    return wx.request(options)
  } else if (typeof my !== 'undefined') {
    return my.request(options)
  } else if (typeof swan !== 'undefined') {
    return swan.request(options)
  }
}

2. Use Cross-Platform Frameworks ​

Frameworks like Taro, uni-app, and Remax provide unified APIs that work across platforms.

3. Feature Detection ​

Check if an API exists before using it:

javascript
if (wx.canIUse('openBluetoothAdapter')) {
  wx.openBluetoothAdapter()
} else {
  console.log('Bluetooth API not available')
}

Best Practices ​

  1. Error Handling: Always include fail callbacks to handle errors gracefully
  2. Permissions: Request permissions only when needed and explain why they're necessary
  3. Async Operations: Use Promise wrappers for cleaner async code
  4. Rate Limiting: Be mindful of API rate limits, especially for network requests
  5. Documentation: Keep up with platform documentation as APIs evolve

Next Steps ​

Now that you have an overview of mini program APIs, you might want to explore:

Connecting Multiple Platforms, Empowering Innovation