const BaaS = require('core-module/baas')
const HError = require('core-module/HError')
const utils = require('core-module/utils')
const API = BaaS._config.API
const makeRealParams = (type, params, cdn, categoryName) => {
const validateTypes = ['wxacode', 'wxacodeunlimit', 'wxaqrcode']
const realTypeNames = ['miniapp_permanent', 'miniapp_temporary', 'miniapp_qr']
let realParams = {}
const typeIndex = validateTypes.indexOf(type)
if (!utils.isString(type) || typeIndex === -1) {
throw new HError(605, 'type 为字符串类型且只接受 "wxacode", "wxacodeunlimit", "wxaqrcode" 其中一种')
}
realParams.code_type = realTypeNames[typeIndex]
if (!params || params.constructor !== Object) {
throw new HError(605, 'params 为 Object 类型')
}
if (type === 'wxacode' || type === 'wxaqrcode') {
if (!params.hasOwnProperty('path')) {
throw new HError(605, '当 type 为 "wxacode" 或 "wxaqrcode" 时,params 中必须带有 "path" 属性')
}
realParams.path = params.path
}
if (type === 'wxacodeunlimit') {
if (!params.hasOwnProperty('scene')) {
throw new HError(605, '当 type 为 "wxacodeunlimit" 时,params 中必须带有 "scene" 属性')
}
realParams.scene = params.scene
if (params.hasOwnProperty('page')) {
realParams.path = params.page
}
}
realParams.options = {}
if (params.hasOwnProperty('width')) {
realParams.options.width = params.width
}
if (params.hasOwnProperty('auto_color')) {
realParams.options.auto_color = params.auto_color
}
if (params.hasOwnProperty('line_color')) {
realParams.options.line_color = params.line_color
}
if (params.hasOwnProperty('is_hyaline')) {
realParams.options.is_hyaline = params.is_hyaline
}
if (cdn === true) {
realParams.upload_to_cdn = true
if (categoryName) {
realParams.category_name = categoryName
}
}
return realParams
}
/**
* 获取二维码
* @function
* @memberof BaaS
* @param {string} type 类型
* @param {object} params 参数
* @param {boolean} [cdn] 是否上传二维码到文件存储并返回图片链接,默认为 false
* @param {string} [categoryName] 指定上传文件分类名,cdn 为 true 时有效,不指定该参数或分类名不存在,则默认上传到根目录
* @return {Promise<BaaS.Response<any>>}
*/
const getWXACode = (type, params, cdn, categoryName) => {
let realParams = makeRealParams(type, params, cdn, categoryName)
return BaaS._baasRequest({
url: API.WECHAT.WXACODE,
method: 'POST',
data: realParams,
}).then(res => {
if (cdn) {
return Object.assign({
download_url: res.data.uploaded_file.path,
}, res.data)
}
return res.data
})
}
module.exports = getWXACode