记一次使用vue+typescript做微信公众号网页分享的坑

需求场景
这个微信网页是一个用户测试的活动。开始测试之前需授权获取用户信息,所以新建一个firstPage页面作为/页面来判断需不需要授权。如果测试完成分享给用户,用户看到的是分享人的结果页面,这个页面是不需要授权的。扫描其中的二维码开始测试才需要授权。所以在前端路由里传一个query 的参数。根据这个参数(this.$route.query.xxx)判断,用户打开的是结果页(不需授权)还是测试页(需授权)。

流程

wx-liuc.png

绑定域名
wx-js.png

引入JS文件

import wx from 'wx-sdk-ts'    
  • vue-cli2.0 引入的是
import wx from'weixin-js-sdk'

通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)

  • 所以获取微信配置的代码写在App.vue文件里。created钩子函数里调用一次。watch到route变化时也调用一次。
  • 分享给好友的结果页,里面动态生成的二维码url需携带当前用户的信息。以便在授权页面拿到分享人的信息。为了方便,授权页面最好独立写到一个文件里 page_relation.vue

记录开发过程中几个坑

  • 如果项目采用非history模式(vue-router默认 hash 模式 ),则需要去掉url上#后的部分传给后端换取微信签名.
  • 授权这里由后端处理。授权完成后由后端将页面重定向到指定页面.
let url = encodeURIComponent(
      " http://xxx.cn/h5/migrationQuiz/auth?router_path=home&fromwxuser="
    );
    
    url = url + userId;
    window.location.href =
      "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6e8235ac81ee7570&redirect_uri=" +
      url +
      "&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect";

这里注意:因为前端路由是带#的。比如重定向后跳转的页面是:http://xxx.cn?id=xxx#/home 这个时候如果直接给后端这个地址,发现这个页面是找不到的。在这个项目中后端在路由里传入了一个router_path的参数。我要重定向到#/home页面,就在地址中加上router_path=home即可。另外附上后端nodejs代码。看到这个,大家应该不难懂了。

shouquan.png

  • 另外,为了方便前端测试,我们可爱的后端还兼容了本地配置的域名,参照如下代码
 let debug_redirect_url = encodeURIComponent("www.example.com");

 let url = encodeURIComponent(
 " http://xxx.cn/h5/migrationQuiz/auth?debug_redirect_url=" +
  debug_redirect_url +
  "&router_path=home&fromwxuser="
  );

如上,本地开发配置的域名为:www.example.com
这里注意:为了能够正常使用开发者工具调试,配置的域名应在公众号JS接口安全域名下

  • 分享给好友、分享到朋友圈时,发现左小角的图标找不到。正确做法时将这些图片放到服务器上。url使用服务器的链接。
  • 分享的link,根据分享后用户需要看到的内容而定,需要在子组件将link,emit到App.vue里进行获取。
    本项目中用户测试完成的结果页result.vue页面里,需将分享链接发送给 App.vue。其他情况下sharelink默认为网站的初始页。
  • 打包到服务器时发现文件都404,在vue-cli2.0的处理方式是:
build -> config -> index.js -> build{} -> assetsPublicPath: './'
1.png

由于本项目中用到了vuecli3+typescript: 所以相应的配置如下:


2.png
  • 由于本项目最后生成的结果页是一个html页面。而产品的需求是,在最终的结果页面,可以长按保存成图片,也就是要在前端将h5页面生成一张图片。用到了html2canvas。具体使用方式参见代码。在处理这个功能的时候,也遇到了一个大坑。参照如图所示:


    canvas.png

    就是因为最终要生成的图片有用户的微信头像,跨域了,不得不说,微信还是很坑的。最终后端给的解决方案是:
    将用户的微信头像改成通过我们这边h5的服务器来获取,然后再发给前端头像地址,改成用我们的服务器的地址。
    至此,这个项目就算完工了。

最后

由于本项目使用微信开发者工具进行本地测试,需配置本地域名(www.example.com),且配置的域名应在公众号JS接口安全域名下。测试过程中使用到了nginx,所以附上nginx的配置代码。

  • 找到本地host文件
    windows系统:C:\Windows\System32\drivers\etc
127.0.0.1   localhost
127.0.0.1   www.example.com
  • nginx开机:
start nginx
  • 重启nginx
nginx -s reload
  • 配置nginx: D:\nginx-1.14.0\nginx-1.14.0\conf\nginx.conf
server {
        listen       80;
        server_name  www.example.com;
        // 跨域配置
        location ^~ /h5/ {
            proxy_pass http://xxx.cn;
        }
        // 代理到本地
        location / {
            proxy_pass http://localhost:52152;
        }
        # location / {
        #     root   html;
        #     index  index.html index.htm;
        # }
    }

其他情况请参考几篇不错的文章:
https://juejin.im/post/5aef2db3f265da0b9c10899e
https://www.jianshu.com/p/1a35e1dbe1ad
另附本项目github地址:https://github.com/clara222/wxh5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容