codecamp

支付宝小程序门店插件 协议·概述

概念说明

一个门店插件的定义包含插件类型、UI 规范、协议规范三个属性。

  • 插件类型

插件类型定义了插件的业务属性,比如 秒杀插件拼团插件、预约插件等。每种类型的插件会由一或多个协议组成。门店主体小程序在唤起插件的时候会根据协议规范逐个调用协议 API。

  • UI 规范

指插件需要遵循的 UI 标准,标准由门店平台定义。

  • 协议规范

协议规范是指插件实现时需要遵照的规范。

协议说明

协议实现

协议实现依赖插件的接口导出能力,插件可以在接口文件(在 plugin.json 配置文件中指定,详情请参见 插件配置文件)中导出 js 接口,供插件的使用者调用,例如:

export default {
  events: {
    onInit: funciont(storeCtx) {
        // 插件初始化回调
        // todo
    }
  },
  methods: {
    attrApi: function() {
      // 获取插件属性api
      // todo
    }
  }
}

对于门店小程序来说,平台定义了唯一的协议调用 this.props.onEmit

this.props.onEmit(this, apiName, param)

因此插件实现者需要导出如下接口:

export default {
  methods: {
    apiName: function(storeCtx, param) {
      console.log('invoke api success!')
    }
  }
}

入参说明

  • storeCtx (按照规范自动注入,直接使用即可)

平台自动注入门店上下文信息,包含如下属性,插件开发者可以按需获取。

{
  "pid": "2088xxxxxxxx",
  "storeId": "1000",
  "storeName": "同乐坊Z空间店"
}

主体小程序 APPID,插件开发者可以通过 my.getParentAppIdSync() 进行获取。

  • param

调用参数,协议调用需要其他参数(业务参数)放在这个对象里面,由主体小程序调用时传入。

调用示例

调用示例(官方门店小程序协议调用)

this.props.onEmit(this, "selectItems", { "size": 3 })

实现示例(三方开发者协议实现)

export default {
  events: {
    onInit: function(storeCtx) {
        // 插件初始化回调
        // todo
    }
  },
  methods: {
    // 组装用户选择的商品
    selectItems: function(storeCtx, param) {
      const { pid } = storeCtx;
      const { size } = param;
      console.log('select items success!')

      
      return new Promise(resolve => {
        asyncAction((result) => {
          resolve(result);
        });
      });
    },
    // 删除商品
    deleteItem: function(storeCtx, param) {
      console.log('delete item success!')
    }
  }
}
支付宝小程序门店插件 简介
支付宝小程序门店插件 协议·秒杀
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

支付宝小程序开发文档

支付宝小程序 快速示例

支付宝小程序 小程序快速示例

支付宝小程序 框架

支付宝小程序 组件

支付宝小程序组件 基础组件

支付宝小程序组件 无障碍访问

支付宝小程序 扩展组件

支付宝小程序扩展组件 UI组件

支付宝小程序 API

支付宝小程序 开发工具

支付宝小程序 云服务

支付宝小程序 Serverless

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }