Java:获取微信小程序码

预览小程序页面

需求

需要在后台配置小程序页面(装修页面),然后在后台预览小程序展示效果

官方文档

获取小程序accessToken
获取小程序码

步骤如下
  1. 获取小程序得accessToken
  2. 根据accessToken获取小程序码
注意点

根据accessToken注意事项设置缓存,避免重复获取或失效导致获取小程序码失败

access_token 的存储与更新 access_token 的存储至少要保留 512 个字符空间; access_token
的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效; 建议开发者使用中控服务器统一获取和刷新
access_token,其他业务逻辑服务器所使用的 access_token
均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务; access_token
的有效期通过返回的 expires_in
来传达,目前是7200秒之内的值,中控服务器需要根据这个有效时间提前去刷新。在刷新过程中,中控服务器可对外继续输出的老
access_token,此时公众平台后台会保证在5分钟内,新老 access_token 都可用,这保证了第三方业务的平滑过渡;
access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,还需要提供被动刷新 access_token
的接口,这样便于业务服务器在 API 调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程

java代码实现

	/**
	* 小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态)
	*/
	@Value("${wechat.appId}")
    private  String appId;
	/**
	* 小程序唯一凭证密钥,即 AppSecret,获取方式同 appid
	*/
    @Value("${wechat.secret}")
    private  String secret;
	/**
	* accessToken请求地址
	*/
    @Value("${wechat.url}")
    private  String url;
    
   /**
     * 获取微信access_token
     * @return
     */
    public String getAccessToken() {
        String result;
        result= redisCache.getCacheObject(RedisConstant.ACCESS_TOKEN_KEY);
        if(StringUtils.isNotEmpty(result)){
            return result;
        }
        try {
            Map<String,Object> map=new HashMap<>(3);
            map.put("grant_type","client_credential");
            map.put("appid",appId);
            map.put("secret",secret);
            String response = HttpUtil.get(url, map);
            if(StringUtils.isNotBlank(response)){
                // 将数据转换成json
                JSONObject responseJson = JSONObject.parseObject(response);
                result = (String) responseJson.get("access_token");
                Integer time = (Integer) responseJson.get("expires_in");
                if(time != null){
                	//根据接口返回失效时间设置有效期
                    redisCache.setCacheObject(RedisConstant.ACCESS_TOKEN_KEY,result,time, TimeUnit.SECONDS);
                }
            }
        } catch (Exception e) {
            log.error("",e);
        }
        return result;
    }
	/**
     * 获取预览二维码
     * @param pageUrl
     * @param scene
     * @param weChatToken
     * @return
     */
    private String getQrCode(String pageUrl, String scene, String weChatToken){
        String qrCode="";
        String url= String.format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s", weChatToken);
        RestTemplate restTemplate = new RestTemplate();
        JSONObject   json         = new JSONObject();
        if(StringUtils.isNotBlank(scene)){
        	// 页面参数可能带有&等符号会被解析成&amp;
            scene= scene.replaceAll("&amp;", "&");
        }
        // 页面路径不能以/开头 需要判断
        json.put("page", StringUtils.isNotBlank(pageUrl) ? pageUrl.startsWith("/") ? pageUrl.replaceFirst("/", "") : pageUrl : null);
        json.put("scene", StringUtils.isNotBlank(scene) ? scene : "pre=1");
        byte[] resultBytes = restTemplate.postForObject(url, json, byte[].class);
        if (resultBytes != null && resultBytes.length > 0) {
            return "data:image/png;base64," + new String(Base64.encodeBase64(resultBytes));
        }
        return qrCode;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值