node 调用相芯科技接口

【传送带->相芯科技官网

一、access_token

所有要用的接口都需要url拼接access_token。
我这里把获取access_token需要用到的key和secret放在了faceunity.js中。
先生成signature,再生成access_token。

// api:获取faceunity的access_token
  let fu = require("./../common/faceunity");  
  let { createHash } = require("crypto");
  function signature(params, secret) {
    let keys = Object.keys(params).sort();
    let sign_str = "";
    keys.forEach((value, index) => {
      //构造被签名串
      sign_str += value + params[value];
    });
    sign_str += secret; //连接secrect
    return createHash("sha1")
      .update(sign_str)
      .digest("hex"); //返回被签名串的sha1值
  }
  app.get("/getFaceunityAccessToken", function (req, response) {
    response.writeHead(200, {   //解决跨域问题
      "Content-Type": "text/html",
      charset: "utf-8",
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "PUT,POST,GET,DELETE,OPTIONS"
    });
    let params = {
      params: "test",
      Key: fu.key
    };
    let sign = signature(params, fu.secret);
    console.log("生成sign", sign);
    let url ="https://token.faceunity.com/api/v1/GetAccessToken?params=test&Key=" +
      			fu.key + "&Signature=" + sign;
    let body = "";
    let access_token = "";
    https .get(url, res => {
        res .on("data", data => {
            body += data;
        }).on("end", () => {
            access_token = JSON.parse(body).data.access_token;
            console.log(access_token);
            response.end(JSON.stringify({'access_token':access_token}));
        }) .on("error", e => {
            console.log("error:" + e.message);
        });
  });

二、美颜接口/api/beauty

方法一:官网的node示例有一点小错误,先是按我自己的逻辑弄出来了,这里直接使用了后台项目文件夹中的图片。

let formData = {
	image: fs.createReadStream(  // 获取原图片文件流
					"../festival-back/upload/faceunity-1551862111687.jpg"
				)
};
// access_token是之前获取的
request.post({
	url: `https://api.faceunity.com/api/beauty?access_token=${access_token}`,
	formData: formData
}, function (err, body) {
	if (err) {
		console.log("错误",err);
	 }
	fs.writeFileSync(  // 写入新图片
		'../festival-back/upload/beauty-'+Date.now()+'.jpg',
		Buffer.from(JSON.parse(body.body).data.data)
	);
});

方法二:官网方法有1处进行了修正。

async function submit(access_token, data) {
  return new Promise((reslove, reject) => {
    request.post(
      {
        url: `https://api.faceunity.com/api/beauty?access_token=${access_token}`,
        formData: data
      },
      function optionalCallback(err, body) {
        if (err) {
          reject(err);
        }
        reslove(JSON.parse(body.body));  
        // 修正:原为"reslove(JSON.parse(body));",返回的body本就是json对象了,
        // body里面的body是个JSON字符串,也是包含了图片Buffer的属性。
      }
    );
  });
}

(async () => {
  try {
    const result = await submit(access_token, formData);
    fs.writeFileSync('../upload/response.jpg', Buffer.from(result.data.data));
  } catch (e) {
    console.log('Submit Error:', e);
  }
})()

三、贴纸接口/api/sticker

猜你喜欢

转载自blog.csdn.net/sinat_38783046/article/details/88286839