大家有没有好奇过饭店扫码点餐的时候,小程序是如何打开的?商家是怎么确认桌号的?为什么有的码微信可以扫,支付宝也可以扫?
本篇文章将会给大家介绍:如何通过扫描二维码进入微信小程序。
这里要注意了,刚配置的链接如果没有发布,测试规则和测试链接都要一段时间之后才生效。而且必须是使用测试链接生成的二维码才可以打开小程序,参数都不可以换,否则都打不开。
我一般都是使用草料网生成二维码:生成二维码、二维码解码
短链接打开微信小程序比较简单,不需要进行特殊配置,只需要调用相应的接口生成短链接即可。
参考文档:获取 URL Scheme
/**
* https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential
* 请求参数 属性 类型 默认值 必填 说明
* @param appId string 是 小程序 appId
* @param secret string 是 小程序 appSecret
* 返回值
* @return JSON 数据包
* 属性 类型 说明
* access_token string token
* expires_in string 失效时间
*
* errcode 的合法值
* 值 说明 最低版本
* -1 系统繁忙,此时请开发者稍候再试
* 0 请求成功
* 40029 code 无效
* 45011 频率限制,每个用户每分钟100次
*/
JSONObject getAccessToken(String appId,String secret);
@Override
public JSONObject getAccessToken(String appId, String secret) {
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
String str = restTemplate.getForObject(url, String.class);
log.info("api/wx-mini/getAccessToken:" + str);
if (StringUtils.isEmpty(str)) {
return null;
} else {
return JSONObject.parseObject(str);
}
}
JSONObject data = new JSONObject();
//设置当前链接打开的小程序页面路径
data.put("path","你的小程序页面路径");
//设置跳转到当前页面的参数,参数格式如下
data.put("query", "id=1&status=1");
//当前小程序打开的版本,develop(开发版)、trial(体验版)、release(线上版)
data.put("env_version", "develop");
//链接是否会失效,微信官方有限制永久链接的个数
data.put("is_expire", true);
//按天数过期
data.put("expire_type", 1);
//30天后过期
data.put("expire_interval", 30);
/**
* https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN
* 请求参数 属性 类型 默认值 必填 说明
* @param accessToken string 是 小程序 发送凭证
* @param data jsonObject 是 小程序 发送数据
* 返回值
* @return JSON 数据包
* 属性 类型 说明
* errmsg string 错误消息
* msgid string 消息ID
*
* errcode 的合法值
* 值 说明 最低版本
* -1 系统繁忙,此时请开发者稍候再试
* 0 请求成功
* 40029 code 无效
* 45011 频率限制,每个用户每分钟100次
*/
JSONObject generateUrlLink(String accessToken ,JSONObject data);
@Override
public JSONObject generateUrlLink(String accessToken, JSONObject data) {
String url = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + accessToken;
return getResult(data, url);
}
private JSONObject getResult(JSONObject data, String url) {
HttpHeaders headers = new HttpHeaders();
HttpMethod method = HttpMethod.POST;
// 以表单的方式提交
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
//将请求头部和参数合成一个请求
HttpEntity<JSONObject> requestEntity = new HttpEntity<>(data, headers);
//执行HTTP请求,将返回的结构使用ResultVO类格式化
ResponseEntity<JSONObject> response = restTemplate.exchange(url, method, requestEntity, JSONObject.class);
return response.getBody();
}
通过服务端接口可以获取打开小程序任意页面的 URL Scheme。适用于从短信、邮件、微信外网页等场景打开小程序。 通过 URL Scheme 打开小程序的场景值为 1065。
生成的 URL Scheme 如下所示:
weixin://dl/business/?t= TICKET
iOS系统支持识别 URL Scheme,可在短信等应用场景中直接通过 Scheme 跳转小程序。
Android系统不支持直接识别 URL Scheme,用户无法通过 Scheme 正常打开小程序,开发者需要使用 H5 页面中转,再跳转到 Scheme 实现打开小程序,跳转代码示例如下:
location.href = ‘weixin://dl/business/?t= TICKET’
该跳转方法可以在用户打开 H5 时立即调用,也可以在用户触发事件后调用。