简介
当我们点击右上角的三个点,就会有默认的分享
分享后的卡片如下
- 但是这个时候我们想要改变一些分享的信息,这里我们需要参照微信的官网,点击
- 这里我们使用的是
updateAppMessageShareData
wx.ready(function () { //需在用户可能点击分享按钮前就先调用wx.updateAppMessageShareData({ title: '', // 分享标题desc: '', // 分享描述link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号 JS 安全域名一致imgUrl: '', // 分享图标success: function () {// 设置成功}})
});
注意
- 一般在当前页面初始化的时候,就应该调用当前的接口
步骤
- 其实我们在页面舒适化中调用函数就可以了,也就是在
ready
后进行调用 - 然后传递各种参数就可以了,不传也会有默认的
- 由于我们在开发的时候并不是真机环境,那么这里我们就无法看到效果了
项目结构调整
接下来项目会越做越大,这里我们把项目结构再次调整一下
目录结构
解释
- 我们把单独用于自动回复的功能抽了出来,在一个
reply
文件夹下 - 把路由专门抽了出来,在
router
文件夹下,专门用于管理路由,大致的代码如下
index.js
根目录下的js文件
const express = require("express")
const app = express()const router = require("./router")// 配置模板资源目录
app.set("views", "./views")
// 配置模板引擎
app.set("view engine", "ejs")
app.use(router)app.listen(4000, () =>console.log("服务器启动成功"));
router/index.js
const express = require("express")
const Router = express.Router
const router = new Router()
const sha1 = require("sha1")const reply = require("../reply")
const Wechat = require("../wechat/wechat")
const { url } = require("../config")const wechat = new Wechat()router.get("/search", async (req, res) => {// 首先生成签名// 1. 获取到参数const { ticket } = await wechat.fetchTicket()const timestamp = Date.now(), jsapi_ticket = ticket, noncestr = Math.random().toString().split(".")[1]// 2. 进行字典排序const str = [`jsapi_ticket=${jsapi_ticket}`,`timestamp=${timestamp}`,`url=${url}/search`,`noncestr=${noncestr}`,].sort().join("&")console.log("str", str)// 3. 进行sha1加密const signature = sha1(str)// 4. 将相关的参数传入到网页中res.render("search", { signature, noncestr, timestamp, appID })
})router.use(reply())module.exports = router
reply/index.js
const sha1 = require("sha1")const config = require("../config")
const { getUserDataAsync, parseXmlData, formatMsg } = require("../libs/utils")
const reply = require("./reply")module.exports = () => {return async (req, res, next) => {const { signature, echostr, timestamp, nonce } = req.queryconst { token } = configconst str = [token, timestamp, nonce].sort().join("")const sha1str = sha1(str)if (req.method === "GET") {// GET请求用于验证服务器的有效性if (sha1str == signature) {res.set("Content-Type", "text/plain");res.send(echostr);} else {res.send(false)}} else if (req.method === "POST") {// POST用于接收用户发送的消息if (sha1str != signature) {// post请求不是来源于微信res.send("error")return}// 获取微信发送的消息const xml_data = await getUserDataAsync(req)let user_data = await parseXmlData(xml_data)user_data = formatMsg(user_data)// 使用reply.jsconst replyMessage = await reply(user_data)console.log(replyMessage)// 将消息结构发送到微信服务器res.send(replyMessage)}}
}
其他的就是修改一些文件的引入之类的