微信公众号开发-常见问题及解决方案

1,005 阅读5分钟

微信公众号开发-常见问题及解决方案

问题1 :了解微信公众号基本开发流程

包括微信公众号的分类、微信公众平台介绍、微信二次开发介入;

问题2 :开发域名配置

在项目创建,正式开始编码前,需要登录【微信公众平台】,完成一些必要的配置:

服务器配置信息成功接入
公众号设置>功能设置 配置网页授权域名(授权回调域名)eg: wechat.suning.com 公众号设置>功能设置 JS安全域名(后端接口域名) 设置JS接口安全域名后,公众号开发者可在该域名下调用微信开放的JS接口。 公众号设置>功能设置 业务域名 设置业务域名后,在微信内访问该域名下页面时,不会被重新排版。用户在该域名上进行输入时,不出现下图所示的安全提示。 微信支付开发配置 需要前往 商户平台 pay.weixin.qq.com 登录(另一套账号)配置 域名至少要有两层 添加协议头,尾部加’/’ 有了以上的完整正确的配置信息,项目才能在微信正常运行,才能保障开发顺利进行。

问题3 :接口API调用流程

eg. 用户在微信客户端中访问第三方网页,调用微信支付购买直播课程

实现页面基本业务逻辑,引入JS-SDK文件:res.wx.qq.com/open/js/jwe… 访问该页面路由; 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的,获取到code。 页面逻辑中,通过传入页面URL获取微信配置信息 ,通过 wx.config() 接口注入权限验证配置,并在配置项中的jsApiList传入chooseWXPay。在wx.ready()中或手动触发事件中调用wx.chooseWXPay()来发起微信支付。chooseWXPay的发起需要配置信息,该配置信息的获取依赖网页授权获取的code,置换出的access_token(全局唯一接口调用凭证)。 在此过程中需要注意两个流程:

微信网页授权流程【微信网页授权】

用户可以通过点击分享进入到H5中。有的页面的访问是以用户已经登录为前提的。 为了逻辑的统一与方便,我们抽取了一个公共的获取用户信息的组件。 用户进入到需登录的页面时,会首先进入这个组件;如果用户已登录,则该组件负责跳转到真实目标页,否则跳转到登录页。 JSSDK使用流程 依据【微信JS-SDK说明文档】,调用API

问题4 :微信调试方式及工具

使用【web开发者工具】 在PC上进行开发和调试工作。

注意:登录web开发者工具需要使用自己的微信号,并且该微信号,首先需要关注所开发的公众号(好分数服务号)、关注公众号【公众平台安全助手】,并需要再公众平台中的web开发者中添加绑定自己的微信号,然后扫码登录即可。

使用手机登移动设备调试,为了方便查看接口数据情况,需要借助工具 Charles,安装参考 网络抓包工具Charles,如果是接口是https协议请求,PC与移动设备均需添加证书才能Charles里正常查看到接口数据。

3.1 绑定hosts

因为网页授权域名配置的个数限制,不方便给测试环境专门配置一个,故本地调试时需要将127.0.0.1指向授权域名。连接测试环境时亦要设置。

3.2 手机连接本地环境调试

由于本地的https证书是自签名的,微信会出于安全的原因显示白屏。此问题待解决。

3.3 手机连接测试环境调试

配置本地的hosts,让授权域名(例如 hfs-wechat.yunxiao.com)指向测试机器ip。 打开Charles,手机连接charles。 访问页面。

3.4 远程调试

有时候pc模拟器不能全面模拟在手机上的情况(如展示互动直播课不支持在),此时可以在安卓手机上打开相应页面,使用chrome浏览器远程连接,便能以调试pc网页的方式调试手机上的页面。

问题5 :https 问题

如果后端使用了https,此时,默认情况下,在 HTTPS 链接上传输的 cookie 会被自动添加上 secure 选项。

前端要读取到cookie,则前端域名也需要配置成https。需要在在 webpack.dev.conf.js 中设置 devServer 属性 https: true,方能读到cookie。

问题6 :微信JS-SDK签名不正确 使用JS-SDK调用微信接口的页面,都需要先注入配置信息,配置信息校验中,会报出签名不正确的问题。

    配置信息的获取,只需一个URL参数 ,url = encodeURIComponent(location.href.split(‘#’)[0])  防止二次分享错误。Android手机没有问题,IOS签名不正确。

    在进行签名认证时 IOS:Landing Page   Android: Current Page   location.href取得是Current Page  故而Android手机没有问题。

    Current Page 即为 当前页    从微信别的地方点击链接呼出微信浏览器时所落在的页面,或者点击微信浏览器的刷新按钮所刷新的页面,为Landing Page. 参考:http://www.kejik.com/article/152868.html

   解决方法:将页面的Landing Page url 存入sessionStorage 。以 window.__wxjs_is_wkwebview === true  判断IOS 获取sessionStorage内的URL,传入获取配置信息接口,进行校验。

问题7 :微信分享卡片的图片、文案及链接地址不正确

问题原因:

微信JS-SDK 签名不正确 链接地址的域名需与网页授权页面相同 图片不能是base64方式

问题8 :支付问题

营平台配置的域名格式要正确,域名至少两层

   参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

   签名参与参数有appId ,timeStamp, nonceStr, package, signType  所遇问题大小未完全匹配导致签名不正确。