模板小程序
是一种特殊的小程序,模板小程序可以被投放到增值服务中,提供给客户购买使用。
模板小程序由服务商开发,服务商是指为智能小程序提供模板开发服务、定制化开发服务的第三方合作伙伴。
服务商可根据需要使用智能小程序的能力开发具备模板化、定制化的小程序,同时也可以将小程序提供的能力与云开发项目结合起来,开发出独特色的小程序功能。
首先,需要在涂鸦 IoT 平台注册成功一个账号,并完成企业认证。 然后,涂鸦进行合作联系,涂鸦在线下评估企业是否具备服务商能力后,确认成为服务商。
开发者
使用 IoT 账号登录到小程序开发者平台,并点击新建小程序
输入小程序名称,小程序类型选择智能小程序
,开发模式选择模板小程序
,即可完成创建一个模板小程序。
选择模板小程序,进入小程序管理后台,点击选择开发设置
点击多区服务器域名
模块中的立即查看
按钮,进入域名配置业务
选择需要设置的区数据中心,然后将服务器域名配置到 request 合法域名下,其他的域名设置可按需求自行选择配置。
开发者
可以自行选择后端服务的开发语言(java、php、NodeJs、GO 等),并在需要调用云开发能力时,可将小程序与云开发应用关联,然后进行前后端开发。
开发者
使用 IoT 账号登录到 IoT 平台,选择云开发菜单,点击创建云项目;
创建成功后,即可获取云开发项目的 Client ID 及 Client secret。
云项目开发文档可参考云开发文档
返回到模板小程序后台,选择开发设置
,点击云项目模块的添加
按钮
由于模板小程序是由服务商(第三方合作伙伴)开发提供,实际使用时,如果需要使用用户数据,根据相关法规要求,需要用户授权后才能获取用户数据,授权流程如下:
小程序前端需要先调用 ty.login 先进行前端登录,并获取到状态的 code 值,然后再调用 ty.getuserInfosync 获取用户基本信息,然后再进行用户登录,服务端可使用涂鸦云返回的 uid 做用户数据打通。
import {
getStorageSync,
getSystemInfoSync,
login,
removeStorageSync,
request,
setStorageSync,
getUserInfo,
showModal,
} from "@ray-js/ray";
const { code } = await login({});
const { nickName, avatorUrl } = new Promise((resolve, reject) =>
getUserInfo({ success: resolve, failure: reject })
);
request({
url: `https://wwww.xxx.com/login`,
method: "POST",
header: {
"Content-Type": "application/json",
},
data: {
code,
nickName,
avatorUrl,
},
success: ({ data }: any) => {
// 由于小程序没有 cookie,这时使用 storage 管理登录态
setStorageSync({
key: "session",
data,
});
},
failure: () => {
showModal({
title: "提示",
content: "登录失败",
showCancel: false,
});
},
});
这里使用 Nodejs Koa 实现
const Koa = require("koa");
const KoaRouter = require("koa-router");
const crypto = require("crypto");
const axios = require("axios");
const bodyParser = require("koa-bodyparser");
const app = new Koa();
const router = new KoaRouter();
const accessKey = "云开发 Client ID";
const secretKey = "云开发 Client Secret";
// 登录接口
router.post(`/login`, async (ctx) => {
const { code, nickName, avatorUrl } = ctx.request.body;
// 加密处理
const contentHash = crypto.createHash("sha256").update("").digest("hex");
const t = +new Date();
const nonce = "";
const stringToSign = ["GET", contentHash, "", path].join("\n");
const signStr = [accessKey, t, nonce, stringToSign].join("");
const sign = crypto
.createHmac("sha256", secretKey)
.update(signStr, "utf8")
.digest("hex")
.toUpperCase();
const { data } = await axios({
url: `https://openapi.tuyacn.com/v1.0/token?code=${code}&grant_type=2`,
method: "GET",
headers: {
t,
sign,
client_id: accessKey,
sign_method: "HMAC-SHA256",
Dev_lang: "Nodejs",
"Signature-Headers": "",
},
});
let responseData;
if (data.success) {
const { uid } = data.result;
responseData = {
success: true,
result: {
sessionId: "1234567890", // 服务端自己生成一个唯一id,用于管理前端登录状态
},
};
} else
responseData = {
success: false,
errMsg: data.msg,
errCode: data.code,
};
{
}
ctx.body = responseData;
});
app.use(bodyParser()).use(router.allowedMethods()).use(router.routes());
app.listen(3000, async () => {
console.log(`Server start on http://localhost:9000`);
});
开发完成模板小程序后,可通过小程序开发者工具上传代码到开发者平台;
然后在小程序版本管理页面的开发版本中找到相应的版本,进行提审;
等待涂鸦审核通过后,可联系涂鸦将模板小程序增加到增值服务平台。