微信小程序生成二维码并通过fastdfs保存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013305783/article/details/81865882

   最近在做一个匹配类的微信小程序,需要用到二维码分享功能,下面就分享一下开发步骤

一、获取appid和secret

   获取微信小程序的appid和secret可以直接去微信公众平台上获取,在设置>>开发设置里面即可找到

这里写图片描述

二、获取openid


   要获取当前登陆者的openid,需要先获取登录动态code,代码如下:

wx.login({
      success: function (res) {
      }     
})

    将返回回来的res.code作为参数传递至后端,后端根据code获取用户的openid,然后将openid返回给前端。

 String params = "appid=" + READ_BASE_APPID + "&secret=" + READ_BASE_APPSECRET + "&js_code=" + code + "&grant_type=" + grant_type;
 //String resultJson =  HttpClientUtil.doGet(READ_BASE_OPENID_URL+param.getCode());
 String resultJson =  HttpClientUtil.doGet(READ_BASE_OPENID_URL + params);
 //更新用户数据
 MessageResponse messageResponse = JsonUtils.jsonToPojo(resultJson,MessageResponse.class);

三、生成token


   要生成二维码就必须要先有小程序token,生成token可以通过后端请求接口https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential,然后将appid和secret传入即可,后端代码入下:

    String params = "appid=" + READ_BASE_APPID + "&secret=" + READ_BASE_APPSECRET;
    String resultJson =  HttpClientUtil.doGet(GET_TOKEN_URL + params);
    Map<String,Object>  tokenJson = JsonUtils.jsonToPojo(resultJson,Map.class);

四、生成二维码


    官方提供了三种方式生成二维码,生成方式的具体描述可以去官网查看,这里我们选择第二种,也就是不限次数的生成方式。生成地址是String URL = “https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=” + access_token;

HttpPost httpPost = new HttpPost(url);
httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
StringEntity se = new StringEntity(json);
se.setContentType("application/json");
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "UTF-8"));
httpPost.setEntity(se);
// httpClient.execute(httpPost);
HttpResponse response = httpClient.execute(httpPost);
if (response != null) {
    HttpEntity resEntity = response.getEntity();
}

   获取到的是一张图片,如果我们用String去接收就会发现是一串乱码,这里我们需要通过流操作生成一个图片文件。

    int stateInt = 1;
    File file = new File(imgPath, imgName);// 可以是任何图片格式.jpg,.png等
    FileOutputStream fos = new FileOutputStream(file);
    if (instreams != null) {
        try {

            byte[] b = new byte[1024];
            int nRead = 0;
            while ((nRead = instreams.read(b)) != -1) {
                fos.write(b, 0, nRead);
            }

        } catch (Exception e) {
            stateInt = 0;
            e.printStackTrace();
        } finally {

            try {
                fos.flush();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

五、上传图片到fastdfs


   pom文件中引入相应的包:

    <dependency>
        <groupId>com.github.tobato</groupId>
        <artifactId>fastdfs-client</artifactId>
        <version>1.25.2-RELEASE</version>
    </dependency>

    fastdfs的搭建这里也不作介绍,可以去看我之前文章有介绍。这里是有springboot整合fastdfs方式:

    @Import(FdfsClientConfig.class)
    public class WechatApplication {
        public static void main(String[] args) {
    //      SpringApplication springApplication = new SpringApplication(WechatApplication.class);
    //      springApplication.setBannerMode(Banner.Mode.OFF);
    //      springApplication.run(args);
            SpringApplication.run(WechatApplication.class,args);
        }
    }


   yml中配置如下:

    fdfs:
      soTimeout: 3000
      connectTimeout: 6000
      thumbImage:             #缩略图生成参数
        width: 400
        height: 400
      trackerList:            #TrackerList参数,支持多个

   注入FastFileStorageClient :

    @Autowired
    private FastFileStorageClient fastFileStorageClient;

   调用uploadFile方法上次图片,并获取返回地址

    File file = new File(SAVE_IMAGE_PATH + userDataParam.getOpenid() + ".jpg");
    FileInputStream inputStream=new FileInputStream(file);
    storePath= fastFileStorageClient.uploadFile(inputStream,file.length(),"jpg",null);
    storePath.getFullPath()//获取url

   将生成的url加上fastdfs访问域名地址即可查看图片。

猜你喜欢

转载自blog.csdn.net/u013305783/article/details/81865882