Java后台生成微信小程序码并以流的形式返回给前端

这篇具有很好参考价值的文章主要介绍了Java后台生成微信小程序码并以流的形式返回给前端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

后端代码

  1. 获取access_token
    PS:access_token有效期两个小时,并且每天的调用次数有限制
import net.sf.json.JSONObject;

public class WeChatUtil {
    /**
     * 获取token
     */
    private static String ACCESSTOKENURL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";

    /**
     * 获取登陆的token
     *
     * @param appId
     * @param appSecret
     * @return
     * @throws Exception
     */
    public static String getAccessToken(String appId, String appSecret) {
        String url = ACCESSTOKENURL.replace("{appId}", appId).replace("{appSecret}", appSecret);
        JSONObject jsonObject = CommonUtil.httpsRequest(url, "GET", null);
 
        if (null != jsonObject) {
            return  jsonObject.getString("access_token");
        }
        return null;
    }
}
  1. 生成图片流
package com.ruoyi.common.utils;

import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import net.sf.json.JSONObject;

public class QrCodeUtils {

	/**
	 * 生成图片流
	 * @param url
	 * @param paraMap
	 * @return
	 * @throws Exception
	 */
	public static byte[] getminiqrQr(String url, Map<String, Object> paraMap) throws Exception {
		byte[] result = null;
		HttpPost httpPost = new HttpPost(url);
		httpPost.addHeader("Content-Type", "application/json");

		// 设置请求的参数
		JSONObject postData = new JSONObject();
		for (Map.Entry<String, Object> entry : paraMap.entrySet()) {
			postData.put(entry.getKey(), entry.getValue());
		}
		httpPost.setEntity(new StringEntity(postData.toString(), "UTF-8"));
		HttpClient httpClient = HttpClientBuilder.create().build();
		HttpResponse response = httpClient.execute(httpPost);
		HttpEntity entity = response.getEntity();
		result = EntityUtils.toByteArray(entity);
		return result;
	}
}
  1. 后台接口返回流到前端
	import javax.servlet.http.HttpServletResponse;
	import java.io.OutputStream;
	import java.util.Map;
	import java.util.HashMap;

	@GetMapping("/getInviteCode")
	@ResponseBody
	public void getInviteCode(@RequestParam(value = "id") String id,
			HttpServletResponse response) {
		try {
			String accessToken = WeChatUtil.getAccessToken(appId, appSecret);
			byte[] qrCodeBytes = null;
			Map<String, Object> paraMap = new HashMap<String, Object>();
			String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="
					+ accessToken ;
			// 二维码携带参数 不超过32位 参数类型必须是字符串
			paraMap.put("scene", id); // 存入的参数
			paraMap.put("path", "pages/index/index");
			qrCodeBytes = QrCodeUtils.getminiqrQr(url, paraMap);
			response.setContentType("image/jpg");
			// 写入response的输出流中
			OutputStream stream = response.getOutputStream();
			stream.write(qrCodeBytes);
			stream.flush();
			stream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

前端代码

	uni.request({
	    url: baseUrl+'getInviteCode?id='+that.id,
	    method: "GET",
	    responseType: 'arraybuffer',
	    success: function(res) {
	        uni.hideToast();
			let datas = res.data
			const arrayBuffer = new Uint8Array(datas)
			that.codeImg = "data:image/png;base64," + uni.arrayBufferToBase64(arrayBuffer) //这里需要添加前缀
		},
		fail(res) {
			console.log(res, '错误')
		}
	})

文章来源地址https://www.toymoban.com/news/detail-627991.html

到了这里,关于Java后台生成微信小程序码并以流的形式返回给前端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包