5.SpringBoot对接Welink发送图片消息


/**
 * @author 
 * @descript WeLink对接的控制器
 */

@SuppressWarnings("ALL")
@Controller
@RequestMapping("/welink")
public class WeLinkController {
    @Value("${welink.messagesend.client_id}")
    private String client_id;  // 配置的 client_id 应用的id

    @Value("${welink.messagesend.client_secret}")
    private String client_secret; // 配置的 client_secret
    @Value("${welink.webhooksend.token}")
    private String webhookSendMessageToken; // 配置的机器人发送群消息的

    /**
     * @return CommonResultDto
     * @descript 获取WeLink的AccessToken
     */
    @ApiOperation("获取WeLink的AccessToken")
    @RequestMapping(value = "/getaccesstoken", method = {RequestMethod.GET})
    @ResponseBody
    public CommonResultDto getAccessToken() throws IOException {
        CommonResultDto resultDto = new CommonResultDto();
        HttpRequest request = HttpRequest.post("https://open.welink.huaweicloud.com/api/auth/v2/tickets");
        request.header("Content-Type", "application/json;charset=UTF-8");
        request.header("x-wlk-gray", "0");


        String resStrInput = "{\n" +
                "  \"client_id\": \"" + client_id + "\",\n" +
                "  \"client_secret\": \"" + client_secret + "\"\n" +
                "}";

        request.send(resStrInput);
        int code = request.code();
        String body = request.body();

        ObjectMapper objectMapper = new ObjectMapper();
        AccessTokenDto accessTokenDto = objectMapper.readValue(body, AccessTokenDto.class);

        // 说名成功

        if (accessTokenDto.getCode().equals("0")) {
            resultDto.setSuccess(true);
            resultDto.setMessage("获取AccessToken成功");
            resultDto.setValue(accessTokenDto.getAccess_token());
        } else {
            resultDto.setSuccess(false);
            resultDto.setMessage("获取AccessToken失败:" + accessTokenDto.getMessage());
        }
        return resultDto;
    }




    /**
     * @param input
     * @return CommonResultDto
     * @descript 上传图片至Welink, 发送图文消息的时候需要使用
     */
    @ApiOperation("上传图片至Welink,发送图文消息的时候需要使用")
    @RequestMapping(value = "/upLoadPicToWeLink", method = {RequestMethod.POST})
    @ResponseBody
    public UpLoadPicToWeLinkResultDto upLoadPicToWeLink(MultipartFile fileinput) throws IOException {
        UpLoadPicToWeLinkResultDto  upLoadPicToWeLinkResultDto = new UpLoadPicToWeLinkResultDto();
        CommonResultDto getAccessTokenResult = getAccessToken();

        if(fileinput == null)
        {
            upLoadPicToWeLinkResultDto.setSuccess(false);
            upLoadPicToWeLinkResultDto.setMessage("上传图片失败:图片(文件)为空");
            return upLoadPicToWeLinkResultDto;
        }

        if (getAccessTokenResult.isSuccess() == false) {
            upLoadPicToWeLinkResultDto.setSuccess(false);
            upLoadPicToWeLinkResultDto.setMessage("上传图片(文件)失败:获取AccessToken失败");
            return upLoadPicToWeLinkResultDto;
        } else {

            org.springframework.http.HttpHeaders httpHeaders = new   org.springframework.http.HttpHeaders();
            httpHeaders.add("x-wlk-Authorization",getAccessTokenResult.getValue());
            httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
            httpHeaders.add("Accept-Charset","UTF-8");

            RestTemplate restTemplate = new RestTemplate();
            String url = "https://open.welink.huaweicloud.com/api/tinyimage/v2/images";
            MultiValueMap<String,Object> params = new LinkedMultiValueMap<>();
            params.add("file",fileinput.getResource());
            HttpEntity<MultiValueMap<String,Object>> requestEntity  = new HttpEntity<>(params, httpHeaders);
            String result = restTemplate.postForObject(url,requestEntity ,String.class);

            ObjectMapper objectMapper = new  ObjectMapper();
            WeLinkUploadApiResultDto weLinkUploadApiResultDto =  objectMapper.readValue(result,WeLinkUploadApiResultDto.class);
            if(weLinkUploadApiResultDto.getCode().equals("0"))
            {
                upLoadPicToWeLinkResultDto.setSuccess(true);
                upLoadPicToWeLinkResultDto.setMessage("上传图片(文件)成功");
                upLoadPicToWeLinkResultDto.setFileUrl(weLinkUploadApiResultDto.getData().getLocation());
            }
            else
            {

                upLoadPicToWeLinkResultDto.setSuccess(false);
                upLoadPicToWeLinkResultDto.setMessage("上传图片(文件)失败:"+weLinkUploadApiResultDto.getMessage());
            }
        }
        return upLoadPicToWeLinkResultDto;
    }




    /**
     * @param input
     * @return CommonResultDto
     * @descript 发送WeLink的图文通知消息
     */
    @ApiOperation("发送WeLink的图文通知消息")
    @RequestMapping(value = "/sendPicTextMessage", method = {RequestMethod.POST})
    @ResponseBody
    public CommonResultDto sendPicTextMessage(MultipartFile inputFile,String title,String description,String pageUrl, String[] userIdArray) throws IOException, ApiException {
       // DefaultWeLinkClient client = new DefaultWeLinkClient("https://open.welink.huaweicloud.com/api/welinkim/v1/im-service/chat/group-chat");
        CommonResultDto commonResultDto = new  CommonResultDto();


       if(inputFile ==null)
       {
           commonResultDto.setSuccess(false);
           commonResultDto.setMessage("发送图文消息失败:没有传入图片");
           return commonResultDto;
       }
        if(title ==null || title.length() == 0)
        {
            commonResultDto.setSuccess(false);
            commonResultDto.setMessage("发送图文消息失败:没有传入标题");
            return commonResultDto;
        }

        if(description ==null || description.length() == 0)
        {
            commonResultDto.setSuccess(false);
            commonResultDto.setMessage("发送图文消息失败:没有传入内容描述");
            return commonResultDto;
        }

        if(pageUrl ==null || pageUrl.length() == 0)
        {
            commonResultDto.setSuccess(false);
            commonResultDto.setMessage("发送图文消息失败:没有传入需要跳转的网页地址");
            return commonResultDto;
        }
        if(userIdArray ==null || userIdArray.length == 0)
        {
            commonResultDto.setSuccess(false);
            commonResultDto.setMessage("发送图文消息失败:至少传入一个接收的用户id");
            return commonResultDto;
        }



        commonResultDto = getAccessToken();
        if(commonResultDto.isSuccess() == false)
        {
            commonResultDto.setMessage("发送图文消息失败:获取Token失败");
            return commonResultDto;
        }



            // 先调用上传图片的接口得到返回的图片url
            UpLoadPicToWeLinkResultDto upLoadPicToWeLinkResultDto = upLoadPicToWeLink(inputFile);

            if(upLoadPicToWeLinkResultDto.isSuccess() == false)
            {
                commonResultDto.setSuccess(false);
                commonResultDto.setMessage("发送图文消息失败:图片上传失败");
                return commonResultDto;
            }

            DefaultWeLinkClient client = new DefaultWeLinkClient(" https://open.welink.huaweicloud.com/api/messages/v1/news");
            MessagesV1NewsRequest  messagesV1NewsRequest = new MessagesV1NewsRequest();
            MessagesV1NewsRequest.News newsInput = new    MessagesV1NewsRequest.News();

           Map<String,String> heardMap = new  HashMap<String,String>();
           heardMap.put("charset","UTF-8");

             messagesV1NewsRequest.setHttpHeaderMap(heardMap);
            // 传入Access_Token
            messagesV1NewsRequest.setAccessToken(commonResultDto.getValue());
            // 图文描述,长度不超过140字节
            newsInput.setDescription(description);

            // 图文标题,长度不超过18字节
            newsInput.setTitle(title);

            // 点击跳转链接
            newsInput.setNewsUrl(pageUrl);
            // newsUrl 类型定义。当前只支持“html”,点击后跳转到相关链接。不传默认为“html”。

            newsInput.setUrlType("html");

            //imageUrl 图片地址,需要先将图片上传至WeLink,将返回的地址作为该字段入参。第一个消息图片比例建议是 16:9,其余消息的图片比例建议是 1:1,否则可能导致图片被截取
            newsInput.setImageUrl(upLoadPicToWeLinkResultDto.getFileUrl());

            List<MessagesV1NewsRequest.News> listNews = new ArrayList<MessagesV1NewsRequest.News>();
            listNews.add(newsInput);

            messagesV1NewsRequest.setNews(listNews);

            // 接收消息的公众号ID,不传则默认发送消息到通知中心;可以在管理后台-公众号-公众号设置找到公众号ID

            // messagesV1NewsRequest.setPublicAccID(client_id);
             messagesV1NewsRequest.setMsgRange("0");

            // 接收消息的人员ID(多个接收者用','分隔,最多支持1000个);msgRange=0时必传

            List<String>  userIdList= new ArrayList<>();
            for(String userId:userIdArray)
            {
                userIdList.add(userId);
            }
            messagesV1NewsRequest.setToUserList(userIdList);

           // 接收消息终端,0 :PC;1 :Mobile;2 :PC+MOBILE(默认)
            messagesV1NewsRequest.setReceiveDeviceType("2");

            WeLinkResponse weLinkResponse = client.execute(messagesV1NewsRequest);
            // weLinkResponse.getCode();
            // weLinkResponse.getMessage();
           String resBody = weLinkResponse.getBody();
           ObjectMapper objectMapper = new  ObjectMapper();
           WeLinkSendPicTextMessageApiResultDto weLinkApiCommonResultDto =  objectMapper.readValue(resBody,WeLinkSendPicTextMessageApiResultDto.class);

           // 说明发送成功
           if(weLinkApiCommonResultDto.getCode().equals("0"))
           {
               commonResultDto.setSuccess(true);
               commonResultDto.setMessage("发送图文消息成功");
           }
           else
           {
               commonResultDto.setSuccess(false);
               commonResultDto.setMessage("发送图文消息失败:"+weLinkApiCommonResultDto.getMessage());
           }

       return  commonResultDto;
    }
}

你可能感兴趣的:(SpringBoot,spring,boot,后端,java)