codecamp

支付宝小程序 快速示例·运动步数

借助运动数据功能,小程序在获得用户许可的情况下,可以获取用户最近 30 天内的运动步数,步数信息会在用户进入小程序时更新。

注意:为了保证用户良好的授权体验,请开发者和商家在业务真实需要时发起授权请求,不要在小程序的首屏就唤起授权。

前提条件

获取模板代码

下载 获取运动步数 demo.Zip 文件,并解压至本地。

使用步骤

添加功能

  1. 登录 小程序开发中心,在 我的小程序 中,选择相应的小程序,进入该小程序详情页。

  1. 运动数据功能 需要签约才能生效,在小程序上线后,点击功能列表右侧 立即签约;签约完成后,需要 1 个工作日左右的审批时间(审批结果会以短信和邮件形式告知),审批成功后,功能状态会变为 已生效(如下图所示)。

image

新建/打开项目

在 IDE 启动界面新建 开放能力 > 获取运动步数 模板项目,或者打开 获取模板代码 中的 zip 文件内容。

快速体验

终端进入 client 文件夹,输入如下代码安装前端项目依赖

npm install
  1. 在小程序开发者工具打开下载的工程,然后关联对应的小程序。
  2. 将 client/pages/app.js 中对应的如下小程序配置项改为用户自己的参数。
    appId: '2021*********', // 小程序应用标识
    spaceId: 'ca8eb10f-26c1-4bee-**********', // 服务空间标识
    clientSecret: 'Xckz2************', // 服务空间 secret key
    endpoint: 'https://api.************' // 服务空间地址,从小程序Serverless控制台处获得 

  1. 修改 server/functions/stepdecryption/index.js 文件下的 aesSecret

  1. 选中 server/functions/stepdecryption 目录的代码作为云函数进行上传和部署,右键点击唤起菜单,选择 部署云函数。部署成功相当于完成云函数的代码发布,部署前注意区分测试环境和生产环境。

image

  1. 保存文件后,打开 IDE 的模拟器,页面会自动刷新。至此,我们已经完成了一个简单的小程序的搭建,并将最核心的能力使用小程序 Serverless 开发完成,可使用支付宝开发者工具体验。

前端初始化 Serverless 详解

初始化

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控制台处获得});const res = await mpserverless.user.authorize({
      authProvider: 'alipay_openapi',
      // authType: 'anonymous'})

获取步数的加密数据

await my.getRunData({
  countDate: `${date.getFullYear()}-${month}-${day}`,
  success: (res) => {
    console.log(res.response)


  },
  fail: (res) => {
  },
  complete: (res) => {
  },});

调用 Serverless 云函数传入相关参数进行解密

mpserverless.function.invoke('stepdecryption', {
  "step": res.response,})

nodejs 云函数解密代码

'use strict';


const crypto = require('crypto');const aesSecret = ''; // AES密钥


module.exports = async (ctx) => {
  const step = ctx.args.step;
  if (!step) {
    return {
      success: false,
      error: {
        code: 'InvalidParameter',
        message: '待解密部署不能为空'
      }
    }
  }
  try {
    ctx.logger.info('[args]', ctx.args);
    const crypted = Buffer.from(step, 'base64').toString('binary');
    const key = Buffer.from(aesSecret, 'base64');
    const iv = Buffer.alloc(16, 0);
    const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
    let decoded = decipher.update(crypted, 'binary', 'utf8');
    decoded += decipher.final('utf8');


    return {
      success: true,
      data: decoded
    }
  } catch (e) {
    ctx.logger.error(e);
    return {
      success: false,
      error: {
        code: 'DecipheStepFail',
        message: e.message
      }
    }
  }}
支付宝小程序 快速示例·相册
支付宝小程序 快速示例·支付即会员场景
温馨提示
下载编程狮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; }