路过一下 發表於 2020-4-20 16:21:00

微信公众号网页开发流程听和接口使用

<p>首先说以下微信公众号网页,第一次听说,估计有些人都不知道是什么,其实就是在微信公众号中运行的网页,使用的是内置的webview</p>
<p>具体流程(开发者而言)</p>
<p>1. 需要在微信公众号测试号中添加域名, 例如自己创建的是nodejs服务器,所以我的域名是localhost:3000, 注意, 因为是测试号, 所以是可以没有http前缀的, 但是官方给的文档中填写的是需要有前缀的, 也就是需要使用备案过的域名 , 没有的话 , 可以使用测试号下面的 设置js安全域名, 就能设置localhost域名了</p>
<p>2. 在html网页中引入 SDK 文件, 官方给的是 在线地址&nbsp; , 可以cv到浏览器中 ctrl+s 保存到本地</p>
<p>3. 在文件夹根目录下使用如下命令</p>
<div class="cnblogs_code">
<pre>npm init -y<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 初始化一个包管理文件</span>
npm install express -- save   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 下载express框架</span>
npm install xtpl xtemplate --save   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 模板插件, 后面会用得上<br></span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">在根目录下创建app.js文件</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在根目录下运行</span>
node ./app.js   //<span style="color: rgba(0, 0, 0, 1)"> 开启本地服务器

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 推荐使用nodemon ./app.js , 不需要反复重启服务器, 但是要下载这个包</span></pre>
</div>
<p>创建的app.js文件如下</p>
<p>如果这样访问文件报错了,可能是地址的问题, 建议使用 path 绝对路径, 不容易出问题</p>
<div class="cnblogs_code">
<pre>const express = require('express'<span style="color: rgba(0, 0, 0, 1)">);
const app </span>=<span style="color: rgba(0, 0, 0, 1)"> express();

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 设置静态托管文件</span>
app.use(express.static("./public"<span style="color: rgba(0, 0, 0, 1)">));

app.set(</span>"view engine", "xtpl"<span style="color: rgba(0, 0, 0, 1)">);

app.set(</span>"views", "./views"<span style="color: rgba(0, 0, 0, 1)">)

const { Wechat } </span>= require('wechat-jssdk'<span style="color: rgba(0, 0, 0, 1)">);
const wx </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Wechat({
    appId: </span>'这里改成你自己测试号的appid'<span style="color: rgba(0, 0, 0, 1)">,
    appSecret: </span>'这里改成你测试号的appSecret'<span style="color: rgba(0, 0, 0, 1)">
});




app.get(</span>'/', (req, res) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {<br>  // 这里的http地址, 简单理解为给该页面注册, 让该公众号网页拥有使用js-sdk库中API接口的权利
    wx.jssdk.getSignature(</span>'http://localhost:3000/').then(signatureData =&gt;<span style="color: rgba(0, 0, 0, 1)"> {<br>    // 正常使用render渲染文件的时候, 是不能传递参数的, 这里使用的 render 是需要结合上面的 xtpl 和 xtemplate 两个插件一起使用的<br>    // 这里的index 是上面设置的模版文件目录下的 index 文件, 后缀省略, 应模板要求, index,html 文件的后缀名字需要改成 xtpl
      res.render(</span>"index"<span style="color: rgba(0, 0, 0, 1)">, signatureData)
    });
})

app.listen(</span>3000, () =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>'serve is running on localhost:3000'<span style="color: rgba(0, 0, 0, 1)">)
})</span></pre>
</div>
<p>中间还下载了 一个名叫wechat-jssdk&nbsp;的包,是一个辅助获取配置的包</p>
<p><em>附html代码</em></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;!</span><span style="color: rgba(255, 0, 255, 1)">DOCTYPE html</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">html </span><span style="color: rgba(255, 0, 0, 1)">lang</span><span style="color: rgba(0, 0, 255, 1)">="en"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">charset</span><span style="color: rgba(0, 0, 255, 1)">="UTF-8"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="viewport"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">http-equiv</span><span style="color: rgba(0, 0, 255, 1)">="X-UA-Compatible"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="ie=edge"</span><span style="color: rgba(0, 0, 255, 1)">&gt;<br></span>  &lt;!--- 这里引入的js文件是官方提供的 js-sdk 的API 库 ---&gt;
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">script </span><span style="color: rgba(255, 0, 0, 1)">src</span><span style="color: rgba(0, 0, 255, 1)">="js/jweixin-1.6.0.js"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>Document<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">head</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">body</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>Hello World<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>



    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">&gt;<br>    // 这是官方提供的验证接口访问权限的js , 双括号的语法是 xtpl 提供的一种接收数据的语法, app.js中传递过来的参数会默认填充到双花括号里面<br></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
      wx.config({<br>        // 第一个是开启调试提示, 也就是微信公众号开发工具页面加载的时候,顶部会提示 配置 结果
            debug: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">true</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">,
            appId: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{{appId}}</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">,
            timestamp: {{ timestamp }},
            nonceStr: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{{nonceStr}}</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">,
            signature: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">{{signature}}</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">,<br>        // 这里是存放使用的 API 的地址, 所有使用的 API 都要在这里登记
            jsApiList: []
          });<br><br>      wx,ready(() =&gt; {<br>        console.log("验证成功, 所有的接口调用都写在这里面就不会有问题了!!!")<br>      })
    </span><span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">body</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">html</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>想要网页在微信中正常运行,需要在微信中添加视口标签, 因为开启了debug ,所以在微信公众号调试工具中, 会有错误提示alert, 直到看到&nbsp; config: ok , 说明配置成功</p>
<p>&nbsp;</p>
<p>说明:&nbsp; 配置中的<em id="__mceDel" style="font-family: &quot;Courier New&quot;; font-size: 12px">jsApiList是一个空数组, 在调用公众号的 API的时候, 需要把 API的名字放在数组中才能正常使用!!!</em></p>

</div>
<div id="MySignature" role="contentinfo">
    本想把生活活成一首诗, 时而优雅 , 时而豪放 , 结果活成了一首歌 , 时而不靠谱 , 时而不着调<br><br>
来源:https://www.cnblogs.com/fmg0224/p/12738515.html
頁: [1]
查看完整版本: 微信公众号网页开发流程听和接口使用