当前位置:   article > 正文

开发微信公众号之前端需要做什么_微信公众号前端开发

微信公众号前端开发

一、首先是环境的配置

我们前期开发的时候,可以先使用公众平台测试账号(后期有了正式公众号账号后,需要在正式号上面配置对应的环境域名),在这个页面申请测试号

微信开放文档

在测试账号中,我们可以获取appid和密钥,另外js接口安全域名,测试号不用设置

另外,在公众号开发过程中,我们一定会用到微信用户的openid,需要在这里设置获取用户信息,点击修改后,设置为本地ip(本地ip会变,下次再打开可能有问题,记得查看IP是否变化),设置的ip就可以获取用户id(正式公众号回调地址只支持域名)

二、接下来就可以正式进入开发啦

其实在公众号的开发,前端相当于H5页面的开发,所以我们可以使用HBuilder X搭建一个基础uniapp框架

1、创建菜单

首先需要获取token,使用腾讯提供的获取稳定版token的接口

  1. uni.request({
  2. url'https://api.weixin.qq.com/cgi-bin/stable_token',
  3. method: 'POST',
  4. data: {
  5. "grant_type": "client_credential",
  6. "appid": "",
  7. "secret": ""
  8. },
  9. success(res) {
  10. uni.setStorageSync('access_token', res.data.access_token)
  11. }
  12. })

(如果运行的时候出现跨域报错,则需使用代理对https://api.weixin.qq.com进行代理)

(附看这里http://t.csdnimg.cn/y69nQ)

拿到token之后,请求创建菜单接口,进行菜单创建,需要创建或者修改的时候,只需要调用一次次接口就可以了,修改成功后可在代码里面注释掉的修改的请求

http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

  1. uni.request({
  2. url: ' https://api.weixin.qq.com'+`/cgi-bin/menu/create?access_token=${token}`,
  3. method: 'POST',
  4. data: {
  5. "button": [{
  6. "type": "view",
  7. "name": "",
  8. "url": ``
  9. },
  10. {
  11. "type": "view",
  12. "name": "",
  13. "url": ``
  14. },
  15. ]
  16. },
  17. })

接口请求成功之后,稍等一会去查看公众号的菜单就可以啦,(实质上是跳转到外网 的H5页面)

2、本地模拟点击菜单跳转页面(获取用户授权)

写一个授权页面,放入按钮,点击后重定向到你所要跳转的页面路径,点击跳转之后会弹出微信是否授权页面,授权跳转后,页面路径也会加入code及其他相关信息参数,这样页面才能利用code获取openid

注:你的ip如果发生变化,那么重定向地址里面的ip需要变化,如果正式部署之后,可以在菜单里面配置重定向地址为 正式域名+path,跳转的网页url为下面的authUrl

  1. <template>
  2. <div>
  3. <button @click="redirectToAuth('apply/applyList')">点击授权,跳转到页面</button>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. methods: {
  9. redirectToAuth(path) {
  10. const appid = "";
  11. const redirectUri = encodeURIComponent(`你的ip:8080/#/pages/${path}`);
  12. const scope = 'snsapi_userinfo'
  13. const code = 'code'
  14. const authUrl =
  15. `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&#wechat_redirect`;
  16. window.location.href = authUrl;
  17. },
  18. },
  19. }
  20. </script>

3、获取用户openid

微信公众号里面标识用户使用的是openid,所以我们需要获取openid代替平时的token做令牌

 前期测试的时候我们可以使用测试账号的appid和密钥去发请求获取openid,后期正式版建议后端写接口获取openid,因为密钥放前端代码不安全,

①可以封装成一个方法,每个页面都需要判断有无openid然后去调用这个方法

②如果放在app.vue入口文件,那么在页面使用的时候一定要确保获取到了openid再执行页面操作(重复获取直到获取到为止,设置个定时器去不停获取,拿到数据后才结束定时器)

注:这是异步函数,一定要确保获取到

  1. //前端本地获取openid的方法
  2. const code = (new URLSearchParams(window.location.search)).get('code');
  3. console.log('code', code)
  4. if (code) {
  5. const appid = ""; //测试appid
  6. const secret = '' //测试秘钥
  7. const requestUrl =
  8. `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=${code}&grant_type=authorization_code`;
  9. fetch(requestUrl)
  10. .then(response => response.json())
  11. .then(data => {
  12. if (data && data.openid) {
  13. openid = data.openid;
  14. console.log('前端请求的opnid', data.openid)
  15. uni.setStorageSync('openid', openid)
  16. }
  17. })
  18. }
  19. //封装完整代码如下(开发环境自己获取openid,生产环境请求接口获取openid)
  20. const getOpenidFn = () => {
  21. return new Promise(resolve => {
  22. let openid = uni.getStorageSync('openid')
  23. if (!openid) {
  24. // 网页链接携带code码,用来请求获取openid
  25. const code = (new URLSearchParams(window.location.search)).get('code');
  26. console.log('code', code)
  27. if (code) {
  28. if (process.env.NODE_ENV === 'development') {
  29. const appid = "wx340c903d9fad8578"; //测试appid
  30. const secret = '6b43697cb54c8b31d20f0f205fe4a0bb' //测试秘钥
  31. const requestUrl =
  32. `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${secret}&code=${code}&grant_type=authorization_code`;
  33. fetch(requestUrl)
  34. .then(response => response.json())
  35. .then(data => {
  36. if (data && data.openid) {
  37. openid = data.openid;
  38. console.log('前端请求的opnid', data.openid)
  39. uni.setStorageSync('openid', openid)
  40. resolve(openid)
  41. }
  42. })
  43. } else {
  44. getOpenid({
  45. code
  46. }).then(res => {
  47. openid = res.data
  48. console.log('前端请求的res', res)
  49. uni.setStorageSync('openid', openid)
  50. resolve(openid)
  51. })
  52. }
  53. }
  54. } else {
  55. resolve(openid)
  56. }
  57. })
  58. }

4、页面onshow的时候调用获取openid的方法(本地获取,或者请求接口获取)

  1. onShow() {
  2. // 获取列表
  3. this.getOpenidFn().then(openid => {
  4. console.log('openid',openid)
  5. this.openid = openid
  6. this.getList(true)
  7. })
  8. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/280809
推荐阅读
相关标签
  

闽ICP备14008679号