基于有了openid才能进行后续操作的功能,可以采用发布订阅模式进行通知;如果用户拒绝授权,可以在需要授权的操作之前多次让用户进行授权,否则无法进行下一步操作,直到用户愿意授权拿到授权信息为止。
1、解决微信公众号网页授权只能设置一个回调域名的问题(获取code时,跨域了)
https://github.com/HADB/GetWeixinCode
2、ngrok内网穿透 本地调试
下载ngrok,打开终端,进入ngork目录,执行./ngrok http <端口号>
进入微信公众号测试号后台,配置授权域名,
此时需要开启一个服务器,用来接收微信服务器发送的信息,启动服务node server.js
此处用koa2框架调试,server.js:
1 | const Koa = require('koa2'); |
3、redirect_uri域名与后台配置不一致
此处要配置,且不能有http://
踩坑:
scope: snsapi_userinfo 拉取用户信息。
会调起用户授权页面,用户可以选择拒绝,由于redirectUri经过编码了,这时候再点击授权时经过编码的redirectUri可能造成不一致,所以要先解码再进行编码。
1 | getCodeByWx (appid, scope = 'snsapi_base', type = 0) { |
1 | function wxAuthorize () { |
4、授权流程
网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code (前端获取,并发送给后台)
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)
5、微信支付
需要去微信公众号后台配置支付目录,支付目录得是**://**/index.html,vue构建的单页面,hash模式需要在 # 前面用 ?将其参数化,否则无法匹配微信支付目录,ios会弹出提示,但是安卓调支付,闪一下就没了。
1 | let href = location.href |
1 | //从后台拿到签名串后开始调支付 |
6、微信分享
npm install weixin-js-sdk -S
1 | import wx from 'weixin-js-sdk'; |