资讯专栏INFORMATION COLUMN

微信小程序码生成及可能存在的坑

546669204 / 1414人阅读

摘要:换句话说,同一用户,对同一个微信开放平台下的不同应用,是相同的对于,微信程序码在同一时间用来掉用小程序码生成接口使用以及调用生成一个应用只有一个秘钥,只有一个有效,且有效期是分钟。

小程序二维码的生成有三个不同的接口,针对不同的场景需求
下文介绍的是第二种,也是用的最多的一种:适用于需要的码数量极多,或仅临时使用的业务场景
接口地址:https://api.weixin.qq.com/wxa...

注意:通过该接口生成的小程序码,永久有效,数量暂无限制。用户扫描该码进入小程序后,开发者需在对应页面获取的码中 scene 字段的值,再做处理逻辑。使用如下代码可以获取到二维码中的 scene 字段的值。调试阶段可以使用开发工具的条件编译自定义参数 scene=xxxx 进行模拟,开发工具模拟时的 scene 的参数值需要进行 urlencode

// 这是首页的 js
Page({
onLoad: function(options) {
// options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
var scene = decodeURIComponent(options.scene)
}
})

如下内容为调用微信小程序二维码接口,生成小程序二维码图片的Java实现【构造post请求,调用微信接口】

import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
//参数说明,QRCreateBean对象中传入自个需要的值。最主要的包括微信的accessToken以及小程序码要存储的内容
//要存储的内容放到了scene参数中,扫码后小程序要跳转的页面路径page参数对应

public static String createPoster(QRCreateBean qrCreateBean) throws Exception {
    log.info("======生成微信小程序码开始=====");
    String qrcodeName = "qr_" + qrCreateBean.getSerialNo();
    long nowTime = System.currentTimeMillis();
    //二维码图片
    URL getCodeUrl = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + qrCreateBean.getAccessToken());
    HttpURLConnection httpURLConnection = (HttpURLConnection) getCodeUrl.openConnection();
    httpURLConnection.setRequestMethod("POST");// 提交模式
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setDoInput(true);
    PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
    JSONObject paramJson = new JSONObject();
    //在上线之前测试的版本中,页面不能跳转,跳转页面的参数名定义为path,可在模拟器上进行测试
    //paramJson.accumulate("scene", qrCreateBean.getSerialNo()).accumulate("path", "pages/goods/goods");
    //上线后,跳转页面的参数需定义为page,否则会找不到跳转页面
    paramJson.accumulate("scene", qrCreateBean.getSerialNo()).accumulate("page", "pages/goods/goods");
    paramJson.put("auto_color", false);
    JSONObject lineColor = new JSONObject();
    lineColor.put("r", 0);
    lineColor.put("g", 0);
    lineColor.put("b", 0);
    paramJson.put("line_color", lineColor);
    printWriter.write(paramJson.toString());
    printWriter.flush();
    String contentType = httpURLConnection.getContentType();
    if (contentType.contains("json")) {
       log.info("调用微信小程序生成接口出错,token失效");
        return "1";
    } else {
        BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
        //小程序码图片写出存储的路径
        File file = new File("srcmain
esourcesimage" + qrcodeName + ".png");
        OutputStream ost = new FileOutputStream(file);
        int len;
        byte[] arr = new byte[1024];
        while ((len = bis.read(arr)) != -1) {
            ost.write(arr, 0, len);
            ost.flush();
        }
        ost.close();
        log.info("========生成微信小程序码结束===========");

}

注意:
对于accessToken有一个坑
openId:是表示用户在你的当前应用中的唯一标示,比如小程序,微信公众号等,这些都算是一个应用,如果你有多个应用,同一个用户的openId可能并不相同
unionid:借用微信官方文档中的话来说,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过 UnionID 来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的

对于accessToken,微信程序码openId在同一时间用来掉用小程序码生成接口【使用appid以及secret调用生成(一个应用只有一个秘钥secret)】,只有一个有效,且有效期是5分钟。当有其他操作再获取accessToken时,之前的token会失效。所以每次在生成小程序二维码之前都要重新获取一下token。
如果用失效的accessToken去调用小程序码生成接口,返回内容为json格式的一个错误提示。若正常返回小程序码图片,返回内容的type为image/jepg。如在上文的代码中,需要对调用接口后返回的内容进行判断!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75755.html

相关文章

  • 从零开始:信小程序新手入门宝典《一》

    摘要:为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习一微信小程序的特点张小龙张小龙全面阐述小程序,推荐通读此文小程序是一种不需要下载安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即 为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习; 一:微信小程序的特点 张小龙:张小龙全面阐述小程...

    whataa 评论0 收藏0
  • 从零开始:信小程序新手入门宝典《一》

    摘要:为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习一微信小程序的特点张小龙张小龙全面阐述小程序,推荐通读此文小程序是一种不需要下载安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即 为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习; 一:微信小程序的特点 张小龙:张小龙全面阐述小程...

    mdluo 评论0 收藏0
  • 从零开始:信小程序新手入门宝典《一》

    摘要:为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习一微信小程序的特点张小龙张小龙全面阐述小程序,推荐通读此文小程序是一种不需要下载安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即 为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习; 一:微信小程序的特点 张小龙:张小龙全面阐述小程...

    LdhAndroid 评论0 收藏0
  • 吃货福利get-今日美食food信小程序

    摘要:微信小程序仿今日美食初学微信小程序,嗯,还不错嘛,挺有趣的于是自己动手撸了一个。开发工具下载开发者工具微信小程序官网,下载好后就可以进行开发了哟。 wechat-todayFood 微信小程序仿今日美食food 初学微信小程序,嗯,还不错嘛,挺有趣的! 于是自己动手撸了一个?。你别说一看标题就知道我是吃货呀,我是不想这么快就被揭穿的,但是这个小程序就是这么有意思呀。好了我要进入正题了,...

    loostudy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<