我的小程序之旅四:扫普通二维码进入小程序、打开短链接进入小程序

大家有没有好奇过饭店扫码点餐的时候,小程序是如何打开的?商家是怎么确认桌号的?为什么有的码微信可以扫,支付宝也可以扫?

本篇文章将会给大家介绍:如何通过扫描二维码进入微信小程序。

一、扫普通二维码进入小程序

1、扫码进入小程序管理页

2、点击开发管理-开发设置-扫普通链接二维码打开小程序-添加

3、完善配置内容

(1)协议类型选择https

(2)选择小写

(3)二维码规则,这个看文档有些人估计会比较迷糊,简单理解一下就是一个https的路径

(4)前缀占用规则选择不占用

(5)校验文件,按照说明文档来,这个不难

(6)小程序的功能页面,这个页面就是你扫码要打开的页面

(7)测试范围

(8)测试链接(选填)

有个比较坑的地方,这个如果没有发布到线上,测试规则和测试链接都要一段时间才生效。

4、使用二维码生成工具生成二维码,然后扫码就可以打开了

我一般都是使用草料网生成二维码:生成二维码二维码解码

二、打开短链接进入小程序

1、使用AppId和AppSecret获取token

    /**
     * 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);
        }
    }

2、构建生成URL Schema的参数

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);

3、生成微信小程序的打开链接

    /**
     * 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();
    }

 

posted @ 2022-01-19 16:42  sum墨  阅读(1082)  评论(0编辑  收藏  举报