目录
一、背景说明
为了推广小程序,就需要作一个小程序海报功能,海报中有小程序码,微信扫码后会打开小程序,并且跳转到指定页面中,还可以带上参数。
二、怎么获取小程序码
获取小程序tx给出来好几个接口,个人觉得没必要,这些接口参数还不太一样,搞的我们这些小白摸不着头脑,遇到问题网上搜一下都不知道大家讨论的是那个接口。
接口总体介绍:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html
下面我用到的是接口 B
这里获取二维码没有遇到什么问题比较顺利,直接上代码:
/**
* @param accessToken
* @param page
* @param scene
* @param width
* @return
*/
public static Map<String, Object> getMiniQrCode(String accessToken, String page, String scene, int width) {
Map<String, Object> data = new HashMap<String, Object>();
try {
// ======================================================================//
// 拼接调用微信的URL
// ======================================================================//
String url = GETWXACODEUNLIMIT+"?access_token=" + accessToken;
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("page", page);
paramsMap.put("scene", scene);
paramsMap.put("width", width <= 0 ? 430 : width);
paramsMap.put("auto_color", false);
paramsMap.put("is_hyaline", true);
Map<String, Object> line_color = new HashMap<String, Object>();
line_color.put("r", 0);
line_color.put("g", 0);
line_color.put("b", 0);
paramsMap.put("line_color", line_color);
System.out.println("调用生成微信URL接口传参:" + paramsMap);
// ======================================================================//
// 执行URL Post调用
// ======================================================================//
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("content-type", "application/json");
// 必须是json模式的 post
String body = JSON.toJSONString(paramsMap);
StringEntity entity = new StringEntity(body);
entity.setContentType("image/png");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
// ======================================================================//
// 处理HTTP返回结果
// ======================================================================//
InputStream contentStream = httpEntity.getContent();
byte[] bytes = toByteArray(contentStream);
contentStream.read(bytes);
// 返回内容
data.put("qrLength", bytes.length);
data.put("qrBytes", bytes);
//data.put("qrBytesEncoder", Base64.getEncoder().encodeToString(bytes));
} catch (Exception e) {
e.printStackTrace();
System.out.println("调用生成微信小程序码URL接口异常"+e);
}
return data;
}
三、前端怎么获取小程序码参数
这里其实没有遇到什么问题 ,按照官网的来基本是对的
直接上代码
onLoad(query) {
console.log(query);
const scene = decodeURIComponent(query.scene);
console.log("onLoad扫码参数=" + scene);
if (scene != undefined && scene != "undefined" && scene != null) {
const uidAndPid = scene.split(",");
const uid = uidAndPid[0];
this.setSpreadId(uid);
setTimeout(() => {
if (uidAndPid.length == 2) {
const pId = uidAndPid[1];
this.$router.push({
path: "/pages/shop/GoodsCon/main",
query: { id: pId }
});
}
}, 500);
}
}
四、遇到的坑
遇到几个坑记录下
坑一、小程序需要提交审核,然后发布才能测试扫码
这个文档里面虽然说了需要发布后才能扫码。看起来不是坑 ,但是我觉得这个就是一个坑,因为测试这个扫码问题我发布了差不多10个版本,每次都要提交审核 ,等待审核,然后再发布审核版本。再进行测试。
坑二、发布后打开小程序还是旧版本
发布小程序后,扫码打开或者其他方式进如小程序可能是旧版本的小程序,这个很坑,解决的办法就是在最近使用小程序里面先删除这个小程序,再扫码进入,同时在小程序要事先标注下当前版本号来判断是否是新版本。
审核通过后还要手动发布下才能生效哦,对于小白来说可能会忘记。
坑三、开发者工具和手机上看到的效果不一致(大坑)
这个坑搞了三天
获取小程序码后一般要先本地测试,测试没问题后再提交审核发布的,我在这一过程完美通过了,即能打开小程序,也能跳转到对应页面,最后还能获取到二维码带过来的参数。但是发布后却不是那么回事。
后来发现发布的在手机扫码后报错了。不要问我怎么知道报错的,后面告诉你在发布版本的小程序怎么查看console.log打印的信息。
五、调试小程序技巧
没有这些技巧开发小程序寸步难行的感觉
技巧一、通过二维码编译小程序
先保存二维码到电脑,然后有个编译模式选择通过二维码编译
技巧二、在正式发布的小程序里面打开console面板
大家都知道正式发布的小程序是不能打开console的,看下图。
发布版本打开console步骤
步骤一:打开当前小程序的开发板
步骤二:打开 开发调试
步骤三:打开发布版本就有了console
神不神奇