模板编辑器
特别说明:该版本已停止售卖,请联系商务查看高阶版本的模板设计SDK。
通过 JavaScript SDK 的方式,将稿定编辑器添加到网站中
使用前提
使用前需在开发平台创建应用, 并在应用中添加模板编辑器产品, 可参考入驻指引了解。
步骤1: 添加域名白名单
使用编辑器产品时, 出于安全考量,需将应用和网站域名进行绑定。未绑定的域名为非法域名,会出现403静止访问的提示
具体操作看 添加域名白名单
步骤2: 安装 JavaScript SDK
安装的方式有两种
第一种通过 NPM 方式
<code>npm i @gaoding/editor-sdk@next
# or
yarn add @gaoding/editor-sdk@next</code>
第二种通过 CDN 方式
<code><script src="https://open.gaoding.com/assets/editor-sdk-v2.js"></script></code>
该方式的优点是使用简单并且保证 sdk 为最新版本,不用因 SDK 更新而重新安装
步骤3: 实例化模板编辑器
参数中的 appId 可在我的应用中点击应用详情-基础信息中查看
<code><!DOCTYPE html>
<html>
<head>
<script src="https://open.gaoding.com/assets/editor-sdk-v2.js"></script>
</head>
<body>
<script type="text/javascript">
const editor = window.gaoding.createMobileTemplateEditor({
appId: '在稿定开放平台应用详情里查看',
async authorize() {
// return "xxxxxx" 返回授权码
},
async getUseRightCert(info) {
// return 'xxxx' 返回权益标识
},
});
</script>
</body>
</html></code>
authorize 方法,该方法返回调用开放平台获取授权码返回的 code 字段。具体调用方式查看 获取授权码
getUseRightCert 方法,该方法用于扣减权益。 具体调用方式查看 扣减权益
例子
下面例子中,展示了如何使用稿定模板编辑器创建一个空白画布。
<code><!DOCTYPE html>
<html>
<head>
<script src="https://open.gaoding.com/assets/editor-sdk-v2.js"></script>
</head>
<body>
<button>创建模板</button>
<script type="text/javascript">
const editor = window.gaoding.createTemplateEditor({
appId: '在稿定开放平台应用详情里查看',
async authorize() {
// return "xxxxxx" 返回授权码
},
async getUseRightCert(info) {
// return 'xxxx' 返回权益标识
},
});
function create() {
editor.createDesign().then(res => {
// 如果 res 为 false 表示没有进行导出操作
if (res) {
editor.close();
// files 为导出的文件数组
const { files } = res;
console.log(files);
// ...do something
}
})
}
document.querySelector('button').addEventListener('click', create);
</script>
</body>
</html></code>
例子
下面以 Node 环境为例子,模拟鉴权和扣除权益的流程
server.js
<code>const axios = require('axios');
const express = require('express');
const {
createHmac
} = require('crypto');
const app = express();
axios.defaults.baseURL = 'https://open-api.gaoding.com';
axios.interceptors.request.use(async (config) => {
const timestamp = Math.floor(Date.now() / 1000);
const ak = '控制台查看AK';
const sk = '控制台查看SK';
config.headers['x-AccessKey'] = ak;
config.headers['x-Timestamp'] = timestamp;
let canonicalRequest = `${config.method.toUpperCase()}@${(config.url + '/').replace(
/\/\/$/,
'/',
)}`;
if (config.params) {
const qs = Object.keys(config.params || {})
.sort()
.map((k) => `${k}=${config.params[k]}`)
.join('&');
canonicalRequest += `@${qs}`;
} else {
canonicalRequest += '@';
}
canonicalRequest += `@${timestamp}`;
if (config.data) {
canonicalRequest += `@${JSON.stringify(config.data)}`;
}
console.log(canonicalRequest);
config.headers['x-Signature'] = createHmac('sha1', sk)
.update(canonicalRequest)
.digest('base64');
console.log(config);
return config;
});
app.get('/user-code', async (request, response) => {
// 调用开放平台获取授权码接口
const {
data
} = await axios.get(
'/api/authorized/code', {
params: {
app_id: request.query.app_id,
uid: request.query.uid,
},
headers: {
}
});
response.send({
code: data.code,
});
});
app.get('/user-right', async (request, response) => {
// 调用开放平台扣除用户权益接口
const {
data
} = await axios.post('/api/use-cert', {
app_id: request.query.app_id,
ability_code: request.query.ability_code,
works_id: request.query.works_id,
});
response.send({
use_cert: data.use_cert,
});
});
app.listen(3000);</code>
index.html
<code><!DOCTYPE html>
<html>
<head>
<script src="https://open.gaoding.com/assets/editor-sdk-v2.js"></script>
</head>
<body>
<script type="text/javascript">
const editor = window.gaoding.createMobileTemplateEditor({
appId: '在稿定开放平台应用详情里查看',
async authorize() {
return fetch('https://www.example.com/user-code', {
headers: {
'content-type': 'application/json',
},
params: {
app_id: '应用id',
uid: '当前的用户标识',
},
})
.then((res) => res.json())
.then((res) => res.code);
// return "xxxxxx" 返回授权码
},
async getUseRightCert(info) {
return fetch('https://www.example.com/user-right', {
headers: {
'content-type': 'application/json',
},
params: {
app_id: info.appId,
works_id: info.workId,
ability_code: info.abilityCode,
},
})
.then((res) => res.json())
.then((res) => res.use_cert);
},
});
</script>
</body>
</html></code>