微信公众号开发

首先需要一个认证的服务号、一台云服务器。
参考资料:微信开发文档
官方调试工具:微信 JS 接口签名校验工具微信公众平台接口调试工具

项目介绍:Django + Vue。以视频为主的H5网页服务。

认证服务器:

此配置在服务号后台:开发 》 基本配置 》服务器配置。 此配置需要部署一个在线的接口,然后认证时微信后台会请求此接口,并且需要返回请求时携带的参数(具体见文档-1)。此接口的另外一个用处是接收微信公众号的各种消息(文档-2)。

服务号(订阅号)菜单按钮跳转H5

首先,开发服务器认证过后即开通了自定义菜单功能,这样,我们便可以利用脚本来自定义菜单,菜单按钮类型有多种(文档-3),我们需要的跳转功能是 view 类型按钮才具有的。按照文档编写脚本,(如果是本地执行脚本的话,记得把本地的IP加入白名单,在公众号后台 》开发 》基本配置 》公众号开发信息 ),菜单按钮的跳转链接可以自定义,我们可以定义为任何链接,但我们一般是需要跳转到指定地址。
有一个问题:当用户点击按钮跳转时,我们怎么获取用户的信息呢?答案在下面。

网页授权登录

此功能只有 认证的服务号 才具有。 网页授权的文档在此,最好仔细看一遍。 功能配置:设置 》公众号设置 》 功能设置 》网页授权域名。 为什么要先配置域名呢?这得先从网页授权的流程说起,如文档所说,我们要获取用户信息首先需要 用户 请求一个接口(001),请求这个接口后会将code参数附带在我们设置的redirect_uri中,然后,微信后台会请求这个 redirect_uri,而我们需要部署一个接口,用来响应此请求,并且获取code参数。然后按照文档做就可以了。

回答上面问题:我们只需把 按钮的链接设置为 我们构造的 接口001 即可。 同理,在网页中我们也可以构造这样一个超链接标签,让用户点击(或用JS点击),即可请求用户的信息。

这里提一嘴 接口001 中的redirect_uri这一接口设计,在我们构造的接口001中有一个state参数,我们可以自定义参数内容,同时也会传递给 redirect_uri这一接口,这给了我们很大的灵活性,我们可以在state里夹杂各种参数,我目前的用法是控制 redirect_uri这一接口 的返回。灵活应用state可以帮我们做很多事情,比如 分享。

分享

文档在此
微信分享 需要前台项目引入微信JS-SDK。而后台要做的是:写接口,生成前端分享配置需要的签名等信息。前台在收到签名等信息后,JS-SDK也会生成一个签名和返回的签名比对,一样就说明配置好了,可以进行下一步了,但是这里有一个坑,

生成签名需要appid timestamp nonceStr jsapi_ticket url,其中,
appid 不会错,
timestamp 亲测精确到秒即可,也不会错,
nonceStr也不会错,
jsapi_ticket JS-SDK会请求微信后台获取也不用管,
就这个url,当前页的地址,亲测为:location.href.split(‘#’)[0],不用urlEncode!,请求签名时传递过去就行。

这样按照文档,一步步进行我们就能分享出去了,但是另一个问题来了,新用户点击分享的卡片后该怎么引导,是直接进入用户分享的网页的地址吗?如果该地址不要求用户信息就可浏览,可以,但是如果需要的话怎么办呢?
我的做法是在用户分享时把链接指向一个固定的 中转页面,这个中转页面:将传递的参数(一般是定位用户分享页面的地址信息)夹杂在网页授权登录接口的state中,进行网页授权登录,然后由后台重定向到指定地址。

支付

文档在此
微信 jsapi 支付,在前台初始化过程中需要4个参数,这就需要后台提供。后台首先进行统一下单操作,就是按照文档请求微信后台,然后返回一个预支付ID(prepay_id);在获取预支付id后再次进行签名生成前台需要的参数,返回给前台即可。在前台支付后,会将支付结果回调给第二次生成参数填写的地址。在前台也可验证,但并不绝对安全。 这里的难点就是两次签名操作。按照签名文档,首先对参数按照字典进行排序,然后进行url拼接(&),最后将mch_key参数加在最后。之后对拼接的字符串进行 md5 加密。生成签名。
在第一次请求预支付id时,需要将 所有参与拼接的参数 和 生成的签名一并添加到请求的参数中。微信支付后台会将这些参数生成签名跟我们传递的签名进行验证。
第二次生成前台需要的参数。基本流程同上,但是,需要注意:字段名(键名)务必跟前台的字段一样,包括大小写。