小程序指定页面太阳码生成

小程序指定页面太阳码生成

小程序指定页面(门店)生成太阳码,打印在门店内展示或者分享,扩展线上门店曝光率。也有客户明确提出需要“太阳码”(原因是“比较好看”),如需生成四四方方的二维码请参阅指定页面二维码生成。故此小程序生成太阳码总结如下:

生成太阳码java后台实现

二维码获取详细接口信息可参照官方文档
接口调用凭证(access_token)可参考官方文档

import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;

import java.io.IOException;
import java.io.InputStream;

/**
 * @program: jk
 * @description: test
 * @author: Mr.jkx
 * @create: 2019-07-01 10:34
 */
public class TestJkx {
    public static void main(String[] args) throws IOException {
        // 接口调用凭证(access_token)
        String token = "";
        JSONObject paramJson = new JSONObject();
        // scene,小程序页面后边跟的参数(pages/index/shopDetailed/shopDetailed?tId=503174af933),此字段长度最大32位,详情可参阅“官方文档”
        paramJson.put("scene", "tId=503174af933");
        // scene,小程序页面生成出太阳码,扫描跳转页面路径
        paramJson.put("page", "pages/index/shopDetailed/shopDetailed");
        paramJson.put("width", 430);
        paramJson.put("auto_color", true);
        // 生成太阳码微信请求路径
        String requstPath = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN";
        String url = requstPath.replace("ACCESS_TOKEN", token);
        // 请求,获取回执数据
        HttpResponse response = WinxinUtil.doPostOfQRCode(url, paramJson.toString());
        if (response != null) {
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
                InputStream instreams = resEntity.getContent();
                // 将微信回执数据生成太阳码图片,保存至服务器,并将地址反回前端展示
                String QRCodePath = QRFileUtil.saveToImgByInputStream(instreams);
                System.out.println("太阳码图片服务器地址:" + QRCodePath);
            }
        }
    }
}

请求微信获取回执数据

post请求微信获取太阳码回执信息

	public static HttpResponse doPostOfQRCode(String url, String outStr) throws IOException {
        DefaultHttpClient client = new DefaultHttpClient();//获取DefaultHttpClient请求
        HttpPost httpost = new HttpPost(url);//HttpPost将使用Get方式发送请求URL
        JSONObject jsonObject = null;
        httpost.setEntity(new StringEntity(outStr, "UTF-8"));//使用setEntity方法,将我们传进来的参数放入请求中
        HttpResponse response = client.execute(httpost);//使用HttpResponse接收client执行httpost的结果
        return response;
    }

微信回执信息生成图片太阳码

根据微信回执的信息生成太阳码并保存到服务器

	public static String saveToImgByInputStream(InputStream instreams) {
        JSONObject result = new JSONObject();
        String filePath = "C:\\uploadfiles";// 文件保存目录
        String fileName = UUIDUtil.getUUID() + ".jpg";
        if (instreams != null) {
            try {
                File file = new File(filePath, fileName);//可以是任何图片格式.jpg,.png等
                FileOutputStream fos = new FileOutputStream(file);
                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = instreams.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                fos.flush();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
            }
        }
        result.put("qRCodeFilePath", "https://xxx/file/download?fileName="+fileName);
        return result.toJSONString();
    }

main方法测试

此太阳码仅测试
小程序指定页面太阳码生成_第1张图片

温馨提示

1.生成太阳码页面必须是已发布小程序中存在的页面
2.请求参数中“scene”字段长度最大为32位,拼装参数时请注意,UUID是不可以的了(作者项目主键id全部为UUID,此模块只能后期缩短UUID长度)
3.测试中,没有发布的小程序页面或者参数长度不正确也能生成出图片,只是图片打不开,显示“似乎不支持此文件格式”;

你可能感兴趣的:(微信-小程序,java,太阳码,小程序)