アップロードされたグラフィックメッセージ内の写真は、URLを取得します
画像をアップロードするには、このインタフェースは、画像の数に公共図書館10万限られた数を占有しません。写真は、唯一のjpg / pngの形式をサポートしており、サイズは1MB以下でなければなりません。
インタフェースの呼び出し要求の説明
HTTPリクエストメソッド:POST、HTTPSプロトコルhttps://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN(curlコマンドを使用して、FORMフォームモードで画像をアップロードする)コールサンプル:カール-F [email protected] "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
パラメータ説明
パラメータ | あなたがする必要がありますか | 説明 |
---|---|---|
アクセストークン | それはあります | Call Interfaceの資格 |
メディア | それはあります | メディアファイル識別のフォームデータ、そこにファイル名、FileLength関数、コンテンツタイプ情報 |
説明に戻ると 、通常の状況下で返す結果です。
URLが画像をアップロードする場合はURL、グラフィックメッセージは、使用中に配置することができます。
NewsUtilクラスを作成し、ここではグラフィック材料の写真をアップロードする方法を作成しました
/**
上传图文消息内的图片获取URL
*/
public String uploadimg(String filePath) {
String accessToken = accessTokenUtil.getAccessToken();
if (accessToken != null) {
String url = URIConstant.UPLOAD_IMG_URL.replace("ACCESS_TOKEN", accessToken);
log.info("UPLOAD_IMG_URL:{}",url);
//设置请求体,注意是LinkedMultiValueMap
MultiValueMap<String, Object> data = new LinkedMultiValueMap<>();
//设置上传文件
FileSystemResource fileSystemResource = new FileSystemResource(filePath);
data.add("media", fileSystemResource);
//上传文件,设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
httpHeaders.setContentLength(fileSystemResource.getFile().length());
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(data,
httpHeaders);
try{
//这里RestTemplate请求返回的字符串直接转换成JSONObject会报异常,后续深入找一下原因
// ResponseEntity<JSONObject> resultEntity = restTemplate.exchange(url,
// HttpMethod.POST, requestEntity, JSONObject.class);
String resultJSON = restTemplate.postForObject(url, requestEntity, String.class);
log.info("上传返回的信息是:{}",resultJSON);
return resultJSON;
}catch (Exception e){
log.error(e.getMessage());
}
}
return null;
}
いつものように、我々は我々のアプローチをテストするための方法で、新しい闊歩しています
@ApiOperation(value = "上传图文消息内的图片获取URL")
@RequestMapping(value = "/uploadImg", method = RequestMethod.POST)
public Object uploadImg(String filePath) {
String result = newsUtil.uploadimg(filePath);
log.info("resut:{}",JSONObject.parseObject(result).toJSONString());
return result;
}
に要求闊歩を送信
第二に、新しい恒久的なグラフィック素材
インタフェースの呼び出し要求の説明
HTTPリクエストメソッド:POST、HTTPSプロトコルhttps://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN
例の呼び出し
パラメータ説明
パラメータ | あなたがする必要がありますか | 説明 |
---|---|---|
題名 | それはあります | 見出し |
thumb_media_id | それはあります | カバー写真材料グラフィックメッセージID(永久MEDIAIDなければなりません) |
著者 | ノー | 著者 |
ダイジェスト | ノー | 抽象グラフィックメッセージは、単一のグラフィックメッセージダイジェスト持ち、ここでより多くのグラフィックは空です。このフィールドが入力されていない場合、デフォルトのテキストクロール最初の64の言葉。 |
show_cover_pic | それはあります | かどうかは、1が真である、それが表示されない、0がfalseで、カバーを表示するには、表示されています |
コンテンツ | それはあります | グラフィックは、メッセージの内容、HTMLタグのサポートは、以下2万文字未満、1M以上でなければならず、ここで取得するためのインタフェース画像のURLに関わる情報源がなければなりません「グラフィックメッセージ検索URLでアップロード写真」、JSを削除します。外部画像のURLが除外されます。 |
content_source_url | それはあります | オリジナル住所グラフィックメッセージ「読み込み元」をクリックした後、そのURL |
need_open_comment | ノー | UINT32レビューを開くかどうか、0が開いて、開いていない1 |
only_fans_can_comment | ノー | 1人のファンのコメントの前に、Uint32のコメント0コメントの所有者の前にファンがかどうか |
説明に戻ります
media_idこのオプションでは、新しいグラフィックニュースクリップで返されました。
NewsUtil我々はテレテキスト送信データ列の構成要素である、文字列は、当社のマイクロセルインターフェースのサーバーにデータを送信することで、主に二つの方法で新しいクラスを作成します
private Articles createArticles(){
Articles articles = new Articles();
List<News> dataList = new ArrayList<>();
News news1 = new News();
news1.setTitle("标题");
news1.setThumb_media_id("J49eq_VE823b_wZH3Op4DFkLa4Lm4jkTSxX_VbiBWhY");
news1.setAuthor("作者");
news1.setDigest("图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。");
news1.setShow_cover_pic(1);//显示封面
news1.setContent("图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 \"上传图文消息内的图片获取URL\"接口获取。外部图片url将被过滤。");
news1.setContent_source_url("https://www.baidu.com/"); //图文消息的原文地址,即点击“阅读原文”后的URL
news1.setNeed_open_comment(1); //Uint32 是否打开评论,0不打开,1打开
news1.setOnly_fans_can_comment(1); //Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论
News news2 = new News();
news2.setTitle("标题");
news2.setThumb_media_id("J49eq_VE823b_wZH3Op4DOvK45tuhPJfr3n1_h1w1h8");
news2.setAuthor("作者");
news2.setDigest("图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空。如果本字段为没有填写,则默认抓取正文前64个字。");
news2.setShow_cover_pic(1);//显示封面
news2.setContent("图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS,涉及图片url必须来源 \"上传图文消息内的图片获取URL\"接口获取。外部图片url将被过滤。");
news2.setContent_source_url("https://www.baidu.com/"); //图文消息的原文地址,即点击“阅读原文”后的URL
news2.setNeed_open_comment(1); //Uint32 是否打开评论,0不打开,1打开
news2.setOnly_fans_can_comment(1); //Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论
dataList.add(news1);
dataList.add(news2);
articles.setArticles(dataList);
return articles;
}
/**
*新增永久图文素材
*/
public String addNews() {
Articles articles = this.createArticles();
String accessToken = accessTokenUtil.getAccessToken();
if (accessToken != null) {
log.info("URL{}", URIConstant.ADD_NEWS_URL);
String url = URIConstant.ADD_NEWS_URL.replace("ACCESS_TOKEN", accessToken);
log.info("ADD_NEWS_URL:{}", url);
//将菜单对象转换成JSON字符串
String jsonNews = JSONObject.toJSONString(articles);
log.info("JSONNEWS:{}",jsonNews);
//发起POST请求创建菜单
String jsonObject = restTemplate.postForObject(url, jsonNews,String.class);
return jsonObject;
}
return null;
}
もちろん、ここで我々が定義する2つのPOJO、News.javaとArticles.java
package com.xu.wemall.pojo.news;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "新闻消息发送对象")
public class News {
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "图文消息的封面图片素材id(必须是永久 media_ID)")
private String thumb_media_id;
@ApiModelProperty(value = "作者")
private String author;
@ApiModelProperty(value = "图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空")
private String digest;
@ApiModelProperty(value = "是否显示封面,0为false,即不显示,1为true,即显示")
private Integer show_cover_pic;
@ApiModelProperty(value = "图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS")
private String content;
@ApiModelProperty(value = "图文消息的原文地址,即点击“阅读原文”后的URL")
private String content_source_url;
@ApiModelProperty(value = "是否打开评论,0不打开,1打开")
private Integer need_open_comment;
@ApiModelProperty(value = "是否粉丝才可评论,0所有人可评论,1粉丝才可评论")
private Integer only_fans_can_comment;
}
package com.xu.wemall.pojo.news;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class Articles {
List<News> articles;
}
[最初のインターフェイスのリストを取得して属性が必要とされているものに注意を払うためにここに各ニュースの必要性は、このパラメータthumb_media_id必要なときに、恒久的な材料を入手してください
/**
* 获取素菜列表
* @return
*/
public String batchgetMaterial(String type, Integer offset, Integer count){
String accessToken = accessTokenUtil.getAccessToken();
if(accessToken != null){
String url = URIConstant.BATCHGET_MATERIAL_URL.replace("ACCESS_TOKEN", accessToken);
log.info("BATCHGET_MATERIAL_URL:{}",url);
JSONObject jsonObject = new JSONObject();
//素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
jsonObject.put("type", type);
//从全部素材的该偏移位置开始返回,0表示从第一个素材 返回
jsonObject.put("offset", offset);
//返回素材的数量,取值在1到20之间
jsonObject.put("count", count);
//发起POST请求
String resultString = restTemplate.postForObject(url, jsonObject.toJSONString(),String.class);
return resultString;
}
return null;
}
私たちは、闊歩にこのインタフェースを聞いて、私たちの恒久的なクリップを取得MEDIA_ID
最後に、我々はNewsControllerでメソッドを記述し、グラフィック材料の著者は、我々は我々のコードをテスト
@ApiOperation(value = "上传图文素材")
@RequestMapping(value = "/addNews", method = RequestMethod.POST)
public Object addNews() throws Exception{
String result = newsUtil.addNews();
//log.info("resut:{}",JSONObject.parseObject(result).toJSONString());
return result;
}
最後に、闊歩でグラフィック材料を提出するために我々の方法の実装は、著者が正常に成功しmedia_idこの私たちのグラフィック素材を取得します
ここで、我々は成功した私たちの恒久的なグラフィック素材をアップロードし、我々はgetMaterialcountは、[GET]アップロード後のベジタリアン統計の数を確認するために呼び出すことができるかどうか心配しないでください
さて、次回は私たちさようなら、さようなら!