需求场景
公司产品小程序需要做推广,用户通过小程序生成自己的小程序推广海报(海报内容包含小程序码及一些其他信息),新用户通过扫描他人分享的海报小程序码进入小程序并授权注册,则此用户与推广者绑定为被推光和推广关系。
需求实现
后端为每个用户生成自己的唯一的小程序码,新用户进入小程序通过判断是否是通过他人小程序码推广进入来进行逻辑处理,最终将信息存储到数据库。实现步骤:
- 给每一个用户生成自己唯一的小程序码,其中包含用户唯一识别信息用来区分推广者
- 用户分享小程序时,如果是海报形式则将用户唯一小程序码与海报一起生成;如果用户通过链接分享则在链接携带小程序中封装的那个用户唯一识别参数
- 在用户授权注册环节,增加逻辑处理,如果是通过他人推广进入,则绑定推广者与被推广者关系
代码实现
生成小程序码
小程序码生成方法,请参考官方文档。
从官方文档可见有三种方法:
- createQRCode
- get
- getUnlimited
我们选择第三种,因为通过该接口生成的小程序码,永久有效,数量暂无限制,其他两种都是有数量限制的。
通过查看官方文档接口请求参数知道,我们首先需要获取小程序调用接口凭证,所以我们先来通过代码实现生成小程序接口调用凭证,主要代码实现如下:
/**
* 生成微信接口调用凭证
*/
public static String getAccessToken() {
Map<String, String> paramMap = new HashMap<>(16);
paramMap.put("grant_type", "client_credential");
paramMap.put("appid", ConfigConstants.appId);
paramMap.put("secret", ConfigConstants.appSecret);
try {
// 请求微信接口,获取接口调用凭证
JSONObject resultJson = JSONObject.fromObject(HttpClientUtil.doGet("https://api.weixin.qq.com/cgi-bin/token", paramMap));
if (resultJson.containsKey("errcode")) {
logger.error("获取微信接口认证凭证发生错误,错误原因{}", resultJson.getString("errmsg"));
return null;
} else {
return resultJson.getString("access_token");
}
} catch (UnsupportedEncodingException e) {
logger.error("获取微信接口认证凭证发生错误,错误原因{}"