All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zopen.wechat.mp.service.miniprogram.WechatProgramCodeService Maven / Gradle / Ivy

There is a newer version: 1.0.5
Show newest version
package com.zopen.wechat.mp.service.miniprogram;

import com.google.gson.Gson;
import com.zcj.util.UtilFile;
import com.zcj.util.UtilString;
import com.zopen.ato.properties.WechatMpProperties;
import com.zopen.wechat.exception.WechatAssert;
import com.zopen.wechat.exception.WechatException;
import com.zopen.wechat.mp.dto.BaseResponse;
import com.zopen.wechat.mp.service.WechatHttpUrl;
import com.zopen.wechat.mp.task.WechatInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@Component("atoWechatProgramCodeService")
public class WechatProgramCodeService {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private WechatMpProperties wechatMpProperties;

    // 获取小程序码,写入到指定的目录(使用 application 中配置的 appId)
    public void getUnlimited(String scene, String page, Integer width, boolean auto_color,
                             Map line_color, boolean is_hyaline, String fileSavePath) {
        String appId = wechatMpProperties.getAppId();
        getUnlimited(scene, page, width, auto_color, line_color, is_hyaline, fileSavePath, appId);
    }

    /**
     * 获取小程序码,写入到指定的目录
     *
     * @param scene        * 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
     * @param page         必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
     * @param width        二维码的宽度,单位 px,最小 280px,最大 1280px
     * @param auto_color   自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调,默认 false
     * @param line_color   auto_color 为 false 时生效,使用 rgb 设置颜色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十进制表示
     * @param is_hyaline   是否需要透明底色,为 true 时,生成透明底色的小程序
     * @param fileSavePath * 如果获取成功,则写入到指定的文件目录
     * @param appId        * appId
     * @throws WechatException 如果获取失败,则抛出 WechatException 异常
     */
    public void getUnlimited(String scene, String page, Integer width, boolean auto_color,
                             Map line_color, boolean is_hyaline, String fileSavePath,
                             String appId) {
        WechatAssert.notNullAndEmpty(appId, "app_id 不能为空");
        WechatAssert.notNullAndEmpty(scene, "scene 不能为空");
        WechatAssert.notNullAndEmpty(fileSavePath, "请指定保存的路径");

        // 请求地址
        String accessToken = WechatInfo.getAccessToken(appId);
        String url = String.format(WechatHttpUrl.MINI_GET_UNLIMITED, accessToken);

        // 请求参数
        Map params = new HashMap<>();
        params.put("scene", scene);
        params.put("auto_color", auto_color);
        params.put("is_hyaline", is_hyaline);
        if (UtilString.isNotBlank(page)) {
            params.put("page", page);
        }
        if (width != null) {
            params.put("width", width);
        }
        if (line_color != null) {
            params.put("line_color", line_color);
        }

        // 如果获取成功,则就是图片内容
        byte[] byteArray = restTemplate.postForEntity(url, new Gson().toJson(params), byte[].class).getBody();

        // 如果获取失败,则是失败内容
        String wxReturnStr = new String(byteArray);
        if (wxReturnStr.indexOf("errcode") != -1) {
            BaseResponse miniProgramUnlimitedResp = new Gson().fromJson(wxReturnStr, BaseResponse.class);
            WechatAssert.notNull(miniProgramUnlimitedResp, "获取小程序码失败:解析返回的内容失败");
            miniProgramUnlimitedResp.valid("获取小程序码失败");
        }

        UtilFile.getFileByBytes(byteArray, fileSavePath);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy