博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用vue开发一个公众号商城SPA——2.接入微信公众号
阅读量:6316 次
发布时间:2019-06-22

本文共 4079 字,大约阅读时间需要 13 分钟。

微信公众号网页开发流程

1. 申请服务号,认证

微信公众平台分为服务号,订阅号,小程序和企业微信。

订阅号任何人都可以注册,但是功能受限,只能发发文章啥的;
服务号注册是必须要商户号,所以只能企业或组织注册,服务号功能完整,认证后的服务号的自定义菜单可以配置跳转网页地址,因此开发微信商城必须要服务号或订阅号的测试账号
小程序就不说了;
企业微信没用过,感觉是腾讯出的类似钉钉一样的办公服务。

2. 配置自定义菜单跳转网页地址

把你的vue应用放到一个有域名的服务器中,在微信公众号平台配置自定义菜单的跳转网页地址:

图片描述
我这里用的是自己的订阅号,会提示你认证,但是又只有服务号才能认证,所以现在的订阅号做不了网页了。必须要服务号才行,但是开发的时候还是可以用订阅号生成测试账号来开发网页的。

3. 开发,调试微信网页的正确姿势

首先,不可能为了开发微信网页而去申请服务号,其次,订阅号虽然没有开放网页,但是依然可以通过测试号来进行开发,测试号开放了所有接口,所以比服务号还要方便:

图片描述
然后,在服务号中开发时,我们是通过配置了地址的自定义菜单访问页面进行调试的,这个地址必须是外网能访问的域名,不能是ip地址,这就意味着每次我们写了代码,要想调试就必须打包,上传到服务器才行,这样显然不科学。
我们希望开发微信网页能和开发pc端页面一样,通过本地npm run dev实时进行调试,这是完全可以实现的。原理是npm run dev的时候,webpack-dev-sever会在电脑上启一个web服务,如果把你的电脑配置一个域名,能在外网中访问,那么在微信中就能访问到你的电脑上的东西了。这是就需要内网穿透,他就是用来把你的电脑暴露在外网中,我使用的是natapp,免费,跟着官网教程一步一步走就可以了,最终你会获得一个你指向你本机的域名,我们在微信中打开这个域名,就能访问到本地的项目了。

4. 使用微信授权获取用户信息,微信扫一扫等

获取用户信息——微信授权

如果需要获取用户的微信信息,相当于要使用微信的获取用户信息的接口,因此需要在公众号平台接口权限中配置网页授权这么一个东西。登录公众平台,点击左下角接口权限,找到网页服务,找到网页授权,点击修改,输入域名,这里的域名就是你页面的顶级域名,和你之前配置自定义菜单时的域名一样就行。使用内网穿透本地开发的时候,域名就是穿透工具生成的你的本机域名。

配置好域名后就可以按照开发文档使用api了,微信授权是通过window.location.href并携带规定的参数,跳转到指定的链接,进行授权后在跳转回来,具体可以查看,贴下代码:

/** * 微信授权 * config: *  appId - 公众号appId *  REDIRECT_URI - 回调域名,授权后跳转的地址 *  SCOPE - 授权类型,snsapi_userinfo/snsapi_base */export function auth () {  /* eslint-disable */  let    appid = 'xxxxxxxxxxxxx',    oldURL = window.location.href,    REDIRECT_URI = oldURL.split('#')[0],    SCOPE = 'snsapi_userinfo',    url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid + '&redirect_uri=' + REDIRECT_URI + '&response_type=code&scope=' + SCOPE + '&state=1#wechat_redirect'  window.location.href = url}/** * 获取授权后的code * @returns {*} */export function getCode () {  let url = window.location.search  if (url === '') {    return false  }  let code = url.match(/^\?code=(.+)&/)[1]  return code}

微信扫一扫,支付,坐标等——JSSDK

微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

其实就是微信提供的api,使用之前也是需要先配置一下:

配置js安全接口域名,和配置网页授权的域名一样,
按照文档的方法还需要下载一个文件到你的域名所在的根目录下,比较麻烦,推荐直接npm install weixin-js-sdk安装使用。
调用api之前需要先注册,注册需要一些参数,比如timestamp,nonceStr,signature这些,这些都是由后端给我们的,其中signature签名需要我们给后端传一个url过去,这个url可以是项目的顶级域名就行,比如是www.1234.com,这样www.1234.com/a,www.1234.com/a/b对应的页面不需注册也能直接调用jssdk,需要注意的是该url中不能有#,可以有?。贴下代码:

import wx from 'weixin-js-sdk'import request from 'utils/request'import Vue from 'vue'export function getJSSDK () {  request({    url: '/api/weixin/signature',    params: {strUrl: window.location.href.split('#')[0]}  }).then(res => {    const {nonceStr, signature, timestamp} = res.data    wx.config({      appId: 'xxxxxxxxxxxxxxx', // 必填,公众号的唯一标识      timestamp, // 必填,生成签名的时间戳      nonceStr, // 必填,生成签名的随机串      signature, // 必填,签名      jsApiList: ['scanQRCode', 'openLocation', 'getLocation'] // 必填,需要使用的JS接口列表    })    wx.ready((res) => {      console.log('wx.ready', res)    })    wx.error((err) => {      console.log(err.errMsg)    })  })}Vue.prototype.$wx = {  scan () {    return new Promise((resolve, reject) => {      wx.scanQRCode({        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,        scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有        success: function (res) {          console.log(res) // 当needResult 为 1 时,扫码返回的结果          resolve(res.resultStr)        },        fail: function (err) {          console.log(err)          reject(err)        }      })    })  }}

其他接口看调用就行。

5. 腾讯地图--计算两地距离接口

项目中有个需求,需要计算用户当前位置和商店的距离,微信JSSDK提供了获取用户位置的接口,商店的经纬度坐标后端也提供了接口,但是如何计算两点的距离,是个问题。自己算最多也只能算个球面距离,并不准确,所以我猜想各种地图应该有这种基本的接口,果不其然,说在怎么在项目中使用:

登录网站,注册一下,登录后生成一个开发密钥(Key),后面会用到。先看看有些啥东西:
图片描述
其他的就不说了,我需要的是在WebService API里面的距离计算,其实就是一个http请求接口,传规定的参数,返回距离给你,需要注意的是在项目中要设置代理,因为跨域了,写的很清楚了,贴下代码:

// config/index.js 配置代理 proxyTable: {      '/tcApi': {        target: 'https://apis.map.qq.com',        changeOrigin: true,        pathRewrite: {'^/tcApi': ''}      }    }// 封装下接口import request from 'utils/request'const tcMapKey = '你的开发密钥(Key)'export function distance (from, to) {  return request({    url: '/tcApi/ws/distance/v1',    params: {      from,      to,      key: tcMapKey    }  })}

转载地址:http://tyuaa.baihongyu.com/

你可能感兴趣的文章
SQLServer2008备份和恢复
查看>>
Liferay试用系列-环境准备
查看>>
WinCE 6.0 的编译
查看>>
访问Nginx上的资源时出现403的原因及解决办法
查看>>
大家好,我是蔡某某,刚刚注册的账号,希望大家支持与帮助
查看>>
shell检测输入的IP是否合法
查看>>
30 分钟快速入门 Docker 教程
查看>>
初步计划
查看>>
DNS服务器配置转发无法解析问题
查看>>
老李分享:pep8 python代码规范 2
查看>>
老李分享:《Linux Shell脚本攻略》 要点(六)上
查看>>
Java基础学习——面向对象(一) —— this关键字
查看>>
python实现从FTP下载文件通过多线程同时分发到多台机器
查看>>
Nginx配置文件详解(方案一)
查看>>
【安全牛学习笔记】SQLMAP- 自动注入
查看>>
定时检查网站是否运行正常,自动重启TOMCAT的简单方法
查看>>
cmd连接mysql的方法详解
查看>>
微信7.0大改版之UI设计分析
查看>>
Centos 7 yum 安装 php7 nginx
查看>>
用户的权限和find命令
查看>>