java 获取小程序码并转化成base64传给客户端

因为只是调api很简单,这里不多说直接上代码:

public ServerResponse<Object> qr_code_m_program(String scene, String path, HttpServletRequest request){
        String token = request.getHeader("token");
        //验证参数是否为空
        List<Object> l1 = new ArrayList<Object>(){{
            add(token);
        }};
        String CheckNull = CommonFunc.CheckNull(l1);
        if (CheckNull != null) return ServerResponse.createByErrorMessage(CheckNull);
        //验证token
        String uid = CommonFunc.CheckToken(request,token);
        if (uid == null){
            //未找到
            return ServerResponse.createByErrorMessage("身份认证错误!");
        }else {
            try{
                //获取accessToken
                AccessToken access_token = CommonFunc.getAccessToken();
                Map<String, Object> params = new HashMap<>();
                params.put("scene", scene);  //参数
                params.put("page", path); //位置
                params.put("width", 280);
                params.put("is_hyaline", true);

                CloseableHttpClient httpClient = HttpClientBuilder.create().build();

                HttpPost httpPost = new HttpPost("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token.getAccessToken());  // 接口
                httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
                String body = JSON.toJSONString(params);           //必须是json模式的 post
                StringEntity entity;
                entity = new StringEntity(body);
                entity.setContentType("image/png");

                httpPost.setEntity(entity);
                HttpResponse response = httpClient.execute(httpPost);
                InputStream inputStream = response.getEntity().getContent();
                // 将获取流转为base64格式
                String result = "";
                byte[] data = null;
                ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
                byte[] buff = new byte[100];
                int rc = 0;
                while ((rc = inputStream.read(buff, 0, 100)) > 0) {
                    swapStream.write(buff, 0, rc);
                }
                data = swapStream.toByteArray();

                result = new String(Base64.getEncoder().encode(data));
                return ServerResponse.createBySuccess("成功",result);
            }catch (Exception e){
                return ServerResponse.createByErrorMessage("非法操作"+e.getMessage());
            }
        }
    }

工具类获取AccessToken:

public static AccessToken getAccessToken() {
        AccessToken token = null;
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/token";
        String param = "grant_type=client_credential&appid="+ WxConfig.wx_app_id +"&secret="+ WxConfig.wx_app_secret;
        // 发起GET请求获取凭证
        JSONObject jsonObject = JSON.parseObject( UrlUtil.sendGet(requestUrl, param));

        if (null != jsonObject) {
            try {
                token = new AccessToken();
                token.setAccessToken(jsonObject.getString("access_token"));
                token.setExpiresIn(jsonObject.getInteger("expires_in"));
            } catch (JSONException e) {
                token = null;
                // 获取token失败
                System.out.println("获取token失败 errcode:{"+jsonObject.getInteger("errcode")+"} errmsg:{"+jsonObject.getString("errmsg")+"}");
//                log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInteger("errcode"), jsonObject.getString("errmsg"));
            }
        }
        return token;
    }

AccessToken类:

public class AccessToken {
    //接口访问凭证
    private String accessToken;
    //接口有效期,单位:秒
    private int expiresIn;

    public String getAccessToken() {
        return accessToken;
    }
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }
    public int getExpiresIn() {
        return expiresIn;
    }
    public void setExpiresIn(int expiresIn) {
        this.expiresIn = expiresIn;
    }
}

结果:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
你可以使用 libhv 库中的 HTTP 客户功能来获取图片数据,并将其转换为 base64 编码。下面是一个简单的示例代码: ```c #include "HttpRequest.h" #include "HttpResponse.h" #include "hbase64.h" std::string GetImageBase64(const std::string& url) { // 创建 HTTP 请求对象 HttpRequest request; request.method = HTTP_GET; request.url = url; // 发送 HTTP 请求 HttpResponse response; int ret = request.DoRequest(&response); if (ret != 0) { printf("Request failed: %s\n", request.GetErrorMessage().c_str()); return ""; } // 检查 HTTP 响应状态码 if (response.status_code != 200) { printf("HTTP response error: %d\n", response.status_code); return ""; } // 将图片数据转换为 base64 编码 std::string base64_data; bool success = Base64Encode(response.body, &base64_data); if (!success) { printf("Base64 encoding failed\n"); return ""; } return base64_data; } int main() { std::string url = "http://example.com/image.jpg"; std::string base64_data = GetImageBase64(url); if (!base64_data.empty()) { printf("Base64 data: %s\n", base64_data.c_str()); } return 0; } ``` 在上面的示例代码中,我们首先创建了一个 `HttpRequest` 对象,并设置了 HTTP 请求的方法和 URL。然后使用 `DoRequest` 方法发送请求并接收响应。如果请求功,我们检查响应的状态码是否为 200(表示功)。 如果响应功,我们使用 `Base64Encode` 函数将图片数据进行 base64 编码,并将结果保存在 `base64_data` 变量中。最后,我们在主函数中调用 `GetImageBase64` 函数来获取图片的 base64 数据,并输出结果。 请确保在编译和运行代码之前,先安装并正确配置 libhv 库。希望这能帮到你!如果有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_我走路带风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值