欧美午夜精品久久久久免费视/欧美黄色精品/国产一级A片在线播出/A片免费视频在线观看

開(kāi)源一波效果演示集成云開(kāi)發(fā)舊項(xiàng)目是非
2023-07-16 15:03:45 歡樂(lè)點(diǎn)

#摘要

在官方的微信小店全開(kāi)放前開(kāi)源一波

療效演示

集成云開(kāi)發(fā)

舊項(xiàng)目是非基于云開(kāi)發(fā)的,構(gòu)建cloud文件夾,并在文件中配置,構(gòu)建用戶(hù)登入的云函數(shù)并上傳到微信小程序云中

構(gòu)建云函數(shù)文件夾,并在..json配置為云函數(shù)目錄

文檔詳見(jiàn):[

](

)

構(gòu)建頁(yè)面文件夾,,將舊小程序項(xiàng)目的pages文件夾一并移入該文件夾中,并配置在..json中,{…“”:“/”…}

開(kāi)通云開(kāi)發(fā)

創(chuàng)建數(shù)據(jù)表

分別創(chuàng)建

店面表、分類(lèi)表、商品表Food、訂單表Order、地址表、用戶(hù)表_User

如何構(gòu)建用戶(hù)表

用戶(hù)表是不是須要自己創(chuàng)建,不存在類(lèi)似于Bmob、這些云儲(chǔ)存那樣默認(rèn)存在_User表

數(shù)據(jù)表的特點(diǎn)當(dāng)數(shù)據(jù)是從小程序端創(chuàng)建數(shù)據(jù)的,天然就帶有數(shù)組添加數(shù)據(jù)必須保證數(shù)據(jù)表早已存在,不存在就創(chuàng)建集合這跟之前用過(guò)的Bmob、一類(lèi)的云儲(chǔ)存不同,前者碰到引用不存在集合是會(huì)手動(dòng)創(chuàng)建集合的創(chuàng)建云函數(shù)

寫(xiě)完云函數(shù)本地調(diào)試完畢后,要將遠(yuǎn)程的也更新一下

上傳增量更新

本地調(diào)試

假如沒(méi)有安裝依賴(lài)的,要切換到云函數(shù)目錄,運(yùn)行npm安裝它

表數(shù)據(jù)的權(quán)限問(wèn)題

如果沒(méi)權(quán)限,.get懇求數(shù)據(jù),得到的數(shù)據(jù)是空白的,而不是報(bào)錯(cuò)無(wú)權(quán)限

這么就是權(quán)限沒(méi)有,默認(rèn)是僅創(chuàng)建人可讀可寫(xiě)

更改文檔也是一樣,準(zhǔn)備更改店面資料,但從返回信息看是更改成功,實(shí)則數(shù)據(jù)未改成功過(guò),這是就自定義權(quán)限,read/write都設(shè)置為true了。

更改權(quán)限可以按如下形式更改

數(shù)據(jù)的增刪改查

引入constdb=wx.cloud.()后,就是一系列關(guān)鍵字,get/doc/add//這種了

看下邊這個(gè)分類(lèi)表的操作

/*
 *
 * 關(guān)注訂閱號(hào)【huangxiujie85】,第一時(shí)間收到教程推送
 *
 * @author 黃秀杰
 */
const db = wx.cloud.database()
const { showModal } = require('../../utils/utils')
Page({
  onLoad: function(options) {
    // 管理員認(rèn)證
    getApp().auth()
    if (options.objectId) {
      // 緩存數(shù)據(jù)
      this.setData({
        isEdit: true,
        objectId: options.objectId
      })
      // 請(qǐng)求待編輯的分類(lèi)對(duì)象
      db.collection('Category')
        .doc(options.objectId)
        .get()
        .then(res => {
          this.setData({
            category: res.data
          })
        })
    }
  },
  add: function(e) {
    var form = e.detail.value
    if (form.title == '') {
      wx.showModal({
        title: '請(qǐng)?zhí)顚?xiě)分類(lèi)名稱(chēng)',
        showCancel: false
      })
      return
    }
    form.priority = Number.parseInt(form.priority)
    // 添加或者修改分類(lèi)
    // 修改模式
    if (this.data.isEdit) {
      const category = this.data.category
      db.collection('Category')
        .doc(category._id)
        .update({
          data: form
        })
        .then(res => {
          console.log(res)
          showModal()
        })
    } else {
      db.collection('Category')
        .add({
          data: form
        })
        .then(res => {
          console.log(res)
          showModal()
        })
    }
  },
  showModal() {
    // 操作成功提示并返回上一頁(yè)
    wx.showModal({
      title: this.data.isEdit ? '修改成功' : '添加成功',
      showCancel: false,
      success: () => {
        wx.navigateBack()
      }
    })
  },
  delete: function() {
    // 確認(rèn)刪除對(duì)話(huà)框
    wx.showModal({
      title: '確認(rèn)刪除',
      success: res => {
        if (res.confirm) {
          const category = this.data.category
          db.collection('Category')
            .doc(category._id)
            .remove()
            .then(res => {
              console.log(res)
              wx.showToast({
                title: '刪除成功'
              })
              wx.navigateBack()
            })
        }
      }
    })
  }
})

表關(guān)聯(lián)

商品表關(guān)聯(lián)分類(lèi)表

做聯(lián)表查詢(xún)時(shí),報(bào)錯(cuò)

:-|:

Error::-|:

版本要求:wx--sdk1.3.0或以上不支持在小程序端使用

好坑,提示是權(quán)限問(wèn)題,發(fā)覺(jué)是原本就不支持,聯(lián)表查詢(xún)下,還要在云上寫(xiě)

老老實(shí)實(shí)地寫(xiě)云函數(shù)吧

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  const result = await db.collection('Food')
    .aggregate()
    .lookup({
      from: 'Category',
      localField: 'category',
      foreignField: '_id',
      as: 'categories'
    })
    .end()
    // .orderBy('priority', 'asc')
    // .get()
    console.log(result)
    return result.list
}

這樣能夠使用.().作聯(lián)表查詢(xún)了

圖片上傳

圖片上傳重點(diǎn)是取出,它可以直接形參給的src屬性就是渲染到頁(yè)面上了,微信一家就是如此好說(shuō)話(huà)

chooseImage() {
    wx.chooseImage({
      count: 1, // 默認(rèn)9
      sizeType: ['compressed'], // 可以指定是原圖還是壓縮圖,默認(rèn)二者都有
      sourceType: ['album', 'camera'], // 可以指定來(lái)源是相冊(cè)還是相機(jī),默認(rèn)二者都有
      success: res => {
        const tempFilePaths = res.tempFilePaths
        const file = tempFilePaths[0]
        const name = utils.random_filename(file) //上傳的圖片的別名,建議可以用日期命名
        console.log(name)
        wx.cloud.uploadFile({
          cloudPath: name,
          filePath: file, // 文件路徑
        }).then(res => {
          console.log(res)
          const fileId = res.fileID
        // 將文件id保存到數(shù)據(jù)庫(kù)表中
          db.collection('Seller').doc(this.data.seller._id)
          .update({
            data: {
              logo_url: fileId
            }
          }).then(() => {
            wx.showToast({
              title: '上傳成功'
            })
            // 渲染本地頭像
            this.setData({
              new_logo: fileId
            })
          }, err => {
            console.log(err)
            wx.showToast({
              title: '上傳失敗'
            })
          })
        })
      }
    })
  }

微信支付

優(yōu)點(diǎn),都不用開(kāi)啟前端服務(wù),有點(diǎn)要調(diào)試發(fā)覺(jué)前端都還沒(méi)怎樣就跑上去了,這些覺(jué)得之前沒(méi)有的,很不習(xí)慣

調(diào)用簡(jiǎn)單

不用提供小程序的appid支付的32位key,這種都在開(kāi)發(fā)工具設(shè)置中綁定好了的,惟一提供的是商戶(hù)的mchId就可以

由于本地?zé)o法得到微信支付的通知反彈,在原先魔改路由,配花生殼域名,遠(yuǎn)程到服務(wù)器寫(xiě)代碼,這都經(jīng)歷過(guò),為的就是讓反彈被通知到微信支付的消息。

子商戶(hù)號(hào),不曉得從何而至,我這兒就是傳的自己申請(qǐng)到的商戶(hù)號(hào)

傳統(tǒng)寫(xiě)支付要用的mchidkey為何這兒不須要,只要綁定就好

綁定微信支付商戶(hù)

如右圖先添加商戶(hù)號(hào)添加

添加后微信會(huì)發(fā)來(lái)通知

按提示開(kāi)通就好

假如不綁定外賣(mài)小程序開(kāi)發(fā),將報(bào)“理關(guān)系不存在”的錯(cuò)誤

配置成功后,云函數(shù)中發(fā)起統(tǒng)一下單

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  console.log('請(qǐng)求中')
  console.log(cloud.getWXContext().ENV)
  let { orderId, amount, body } = event
  const wxContext = cloud.getWXContext()
  const res = await cloud.cloudPay.unifiedOrder({
    body: body,
    outTradeNo: orderId,
    spbillCreateIp: '127.0.0.1',
    subMchId: '1447716902',
    totalFee: amount,
    envId: 'dinner-cloud',
    functionName: 'pay_cb'
  })
  return res.payment
}

這兒:'’指的就是支付成功后,微信支付那側(cè)給我的反彈信息,前面我們就用它來(lái)更新我們的訂單狀態(tài)

正常返回支付要用的參數(shù)了

里面的對(duì)象里的就是小程序端調(diào)用支付時(shí)要用到的參數(shù)

配合以下小程序端的代碼,才能喚醒支付讓用戶(hù)付款了

const { result: payData } = res
  wx.requestPayment({
    timeStamp: payData.timeStamp,
    nonceStr: payData.nonceStr,
    package: payData.package,
    signType: 'MD5',
    paySign: payData.paySign,
    success: res => {
      console.log('支付成功', res)
      wx.showModal({
        title: '支付成功',
        showCancel: false,
        success: () => {
          // 跳轉(zhuǎn)訂單詳情頁(yè)
          wx.navigateTo({
            url: '/order/detail/detail?objectId=' + order._id
          })
        }
      })
    },
...

微信支付反彈

微信統(tǒng)一下單里一個(gè)反彈函數(shù),它是一個(gè)云函數(shù),也就用到了云函數(shù)調(diào)用云函數(shù)了

接出來(lái)就實(shí)現(xiàn)這個(gè)反彈函數(shù)

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init({
  // API 調(diào)用都保持和云函數(shù)當(dāng)前所在環(huán)境一致
  env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  console.log('支付回調(diào)')
  console.log(event)
  console.log(cloud.getWXContext().ENV)
  const orderId = event.outTradeNo
  const resultCode = event.resultCode
  if (resultCode === 'SUCCESS') {
    const res = await db
      .collection('Order')
      .doc(orderId)
      .update({
        data: {
          status: 1
        }
      })
    console.log(res)
    return { errcode: 0 }
  }
}

為了更好地調(diào)試微信支付給我的反彈信息,可以步入云函數(shù)面板,日志標(biāo)簽頁(yè),哪里給把我們?cè)坪瘮?shù).log()復(fù)印結(jié)果顯示下來(lái),如右圖

使用第三方庫(kù)實(shí)現(xiàn)

這個(gè)是通用解決方案,不用原生的云開(kāi)發(fā)微信支付,自己寫(xiě)node.js前端就是如此干的

//云開(kāi)發(fā)實(shí)現(xiàn)支付
const cloud = require('wx-server-sdk')
cloud.init()
//1,引入支付的三方依賴(lài)
const tenpay = require('tenpay')
//2,配置支付信息
const config = {
  appid: 'wx6f3d3xxx20b1678f', //
  mchid: '1447716902', //
  partnerKey: '21f0ce9b272ecfbaxxxf83994c438f39', //
  notify_url: 'https://mp.weixin.qq.com', //支付回調(diào)網(wǎng)址,這里可以先隨意填一個(gè)網(wǎng)址
  spbill_create_ip: '127.0.0.1'
}
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  let { orderId, amount, body } = event
  //3,初始化支付
  const api = tenpay.init(config)
  let result = await api.getPayParams({
    out_trade_no: orderId,
    body: body,
    total_fee: amount, //訂單金額(分),
    openid: wxContext.OPENID //付款用戶(hù)的openid
  })
  return result
}

缺點(diǎn)是難以反彈通知支付結(jié)果:‘’,由于我們沒(méi)有自己的前端服務(wù)器,也就無(wú)法提示這個(gè)url了,最多就是在后端協(xié)程訂單就支付狀態(tài)從而改自己的訂單的狀態(tài)了。

總結(jié)

云開(kāi)發(fā)體驗(yàn)出來(lái),優(yōu)點(diǎn)自毋須多說(shuō),微信登陸與支付原生支持,調(diào)用與調(diào)試都很便捷,非常是不用啟本地服務(wù)開(kāi)發(fā)外賣(mài)小程序開(kāi)發(fā),真的好用;最大的不足就是小程序端不支持聯(lián)表查詢(xún),必須寫(xiě)云函數(shù)被小程序調(diào)用,期盼盡快能像Bmob、一類(lèi)的云儲(chǔ)存那樣得到支持。

源碼下載

[

](

免責(zé)聲明:部分文章信息來(lái)源于網(wǎng)絡(luò)以及網(wǎng)友投稿,本站只負(fù)責(zé)對(duì)文章進(jìn)行整理、排版、編輯,出于傳遞更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,如本站文章和轉(zhuǎn)稿涉及版權(quán)等問(wèn)題,請(qǐng)作者在及時(shí)聯(lián)系本站,我們會(huì)盡快為您處理。

歡樂(lè)點(diǎn)

留言咨詢(xún)

×