小程序扫码--获取书籍信息

380 阅读1分钟

最近使用uniapp写一个小程序的项目,解决了一个很有意思的需求,就是扫描书籍的ISBN跳转详情页面,获取当前书籍信息。涉及到以下知识,uniCloud云开发、小程序API使用等。

实现思路:

其实比较简单,每本书后面都一个二维码,这个二维码包含了这个本书的ISBN(国际标准书号,简称ISBN),然后我们只需要通过这个ISBN获取到当前书籍的信息然后存入数据库,最后展示出来就行了。

1.使用微信小程序提供API-wx.scanCode()获取版号ISBN

接口文档

接口文档

 wx.scanCode({
   success(res) => {
    console.log(res);
                })

2.获取到版号后如何获取到当前书籍信息呢,这里大家可以在网上找找相应的接口,传递参数就可以获取当前书籍信息。

uni.request({
     url: `http://47.99.80.202:6066/openApi/getInfoByIsbn?isbn=${res.result}&appKey=ae1718d4587744b0b79f940fbef69e77`,
     method'GET',
     success: (res) => {
      uni.showToast({
       title:'正在跳转详情页面',
       icon:'loading'
  })

3.将获取到的书籍信息(cover、name、author、summay等)增加到数据库当中,并且携带id值跳转详情页面。

uniCloud.callFunction({
       name:'setBook',
       data:{
        // author1:'鲁迅'
        name:res.data.data.bookName,
        author:res.data.data.author,
        cover:JSON.parse(res.data.data.pictures)[0],
        summary:res.data.data.bookDesc
       },
      success:(res)=>{
        uni.navigateTo({
         url:`/pages/detail/detail/detail?id=${res.result.data[0]._id||res.result.id}&type=1`
        })
       }
      })

uniCloud云函数代码,这里需要做一个判断,判断书籍库中是否存在这本书,避免重复扫码,多次录入书籍。

const db = uniCloud.database()
const dbCmd=db.command
exports.main = async (event, context) => {
 let {cover,name,author,summary}=event
 
 let same = await db.collection('book').where({
  author:dbCmd.eq(author)
 }).count()
 console.log(same)
 
 // 判断数据库中是否存在当前数据
 if (same['total'] == 0) {
  let res=await db.collection('book').add({
   name,
   cover,
   author,
   summary
  })
  return res
 } else {
  let result=await db.collection('book').where({
   cover:dbCmd.eq(cover)
  }).get()
  return result
 }
};