微信短剧媒介管理开发、获取用户信息--Java

短剧媒资管理

获取微信媒资列表

/**
 * 获取媒资列表
 * @param dramaId 剧目id
 * @return
 */
@GetMapping("/getVideoList")
public CommonResult<Object> getVideoList(String dramaId) {
    String url = "https://api.weixin.qq.com/wxa/sec/vod/listmedia?access_token=" + getAccessToken();

    //封装请求体
    Map<String, String> paramMap = Maps.newHashMap();
    paramMap.put("drama_id", dramaId);
    //封装请求头
    HttpHeaders headers = getHeaders();
    HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);

    String totalCount = JSONObject.parseObject(JSON.toJSONString(response.getBody())).getString("total_count");
    return CommonResult.data(response.getBody());
}

// 获取access_token
private String getAccessToken(){
    // 通过appid和secret来获取token
    // wechatId, wechatSecret是自定义的全局变量
    String tokenUrl = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", wechatId, wechatSecret);
    JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));
    return token.getString("access_token");
}  

// 封装请求体
private HttpHeaders getHeaders(){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}

若该剧目列表(集数)超过100

获取列表注意是偏移量、不是第多少页,假设偏移量为100.则从101显示(获取媒资列表)。

/**
 * 获取媒资列表
 * @param dramaId 剧目id
 * @return
 */
@GetMapping("/getVideoList")
public CommonResult<Object> getVideoList(String dramaId) {
    String url = "https://api.weixin.qq.com/wxa/sec/vod/listmedia?access_token=" + getAccessToken();

    //封装请求体
    Map<String, String> paramMap = Maps.newHashMap();
    paramMap.put("drama_id", dramaId);
    //封装请求头
    HttpHeaders headers = getHeaders();
    HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);

    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);

    String totalCount = JSONObject.parseObject(JSON.toJSONString(response.getBody())).getString("total_count");
    if (Integer.valueOf(totalCount) <= 100) {
        return CommonResult.data(response.getBody());
    } else {
        String dramaInfoList = JSONObject.parseObject(JSON.toJSONString(response.getBody())).getString("media_info_list");
        StringBuffer buffer = new StringBuffer();
        buffer.append(dramaInfoList);
        Integer value = Integer.valueOf(totalCount);
        int count = value / 100;
        for (int i = 0;i < count;i++) {
            // 分页拉取的起始偏移量。默认值:0。分页拉取的最大返回结果数。默认值:100;最大值:100。
            paramMap.put("offset", String.valueOf((i + 1) * 100));
            httpEntity = new HttpEntity<>(paramMap,headers);
            String mediaInfoList = JSONObject.parseObject(JSON.toJSONString(restTemplate.postForEntity(url, httpEntity, Object.class).getBody())).getString("media_info_list");
            buffer.deleteCharAt(buffer.length() - 1);
            mediaInfoList = mediaInfoList.substring(1);
            buffer.append("," + mediaInfoList);
        }
        String result = JSONObject.parseObject(JSON.toJSONString(response.getBody())).toJSONString().replace(dramaInfoList, buffer.toString());
        return CommonResult.data(JSONObject.parse(result));
    }
}

// 获取access_token:
private String getAccessToken(){
    String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wechatId + "&secret=" + wechatSecret;
    JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));
    return token.getString("access_token");
}

// 封装请求体
private HttpHeaders getHeaders(){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}

获取媒资详细信息

根据单个媒资(某一集)的mediaId获取详细信息

/**
 *
 * 获取文件信息
 * @param mediaId 文件id
 * @return
 */
@GetMapping("/getVideoInfo")
public  CommonResult<Object> getVideoInfo(String mediaId) {
    //通过token和code来获取用户手机号
    String url = "https://api.weixin.qq.com/wxa/sec/vod/getmedia?access_token=" + getAccessToken();
    //封装请求体
    Map<String, Integer> paramMap = Maps.newHashMap();
    paramMap.put("media_id", Integer.valueOf(mediaId));
    //封装请求头
    HttpHeaders headers = getHeaders();
    HttpEntity<Map<String, Integer>> httpEntity = new HttpEntity<>(paramMap,headers);
    //返回到前端展示
    return commonReturn(url,httpEntity);
}

private CommonResult<Object> commonReturn(String url,HttpEntity<Map<String, Integer>> httpEntity){
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
    //返回到前端展示
    return CommonResult.data(response.getBody());
}

private HttpHeaders getHeaders(){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}

private String getAccessToken(){
    String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wechatId + "&secret=" + wechatSecret;
    JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));
    return token.getString("access_token");
}

其他媒资操作

获取媒资播放链接:该接口用于获取视频临时播放链接,用于给用户的播放使用(当然,上面两种方法也可以获取到临时链接,mp4_url:mp4格式临时链接 ;hls_url:hls格式临时链接)。只有审核通过的视频才能通过该接口获取播放链接,获取播放链接与获取媒资详细信息必填请求参数不同点是它除了包含access_token、media_id参数外,还需要填入播放地址的过期时间戳 t ,其有效的时间最长不能超过2小时后。(它还可以设置试看时长)

注意,报错{"code": 200, "msg": "操作成功", "data": "{errcode=10090016, errmsg=流量资源包余额不足 rid: 65d6ed18-1f0aff98-694c9c76}"},表示媒资管理中没有播放流量。

删除媒资

获取用户信息

获取用户手机号

/**
 * 获取用户手机号
 * @param code 微信code
 * @return
 */
@GetMapping("/getUserPhone")
public CommonResult<Object> getPhoneNumber(String code) {
    if(StringUtils.isBlank(code)){
        return CommonResult.data("");
    }

    //通过token和code来获取用户手机号
    String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + getAccessToken();

    //封装请求体
    Map<String, String> paramMap = new HashMap<>();
    paramMap.put("code", code);
    //封装请求头
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);

    HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(paramMap,headers);

    //通过RestTemplate发送请求,获取到用户手机号码
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);

    //返回到前端展示
    return CommonResult.data(response.getBody());
}

private CommonResult<Object> commonReturn(String url,HttpEntity<Map<String, Integer>> httpEntity){
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
    //返回到前端展示
    return CommonResult.data(response.getBody());
}

private HttpHeaders getHeaders(){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}

private String getAccessToken(){
    String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wechatId + "&secret=" + wechatSecret;
    JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));
    return token.getString("access_token");
}

获取用户Scheme码

请求体:

@Getter
@Setter
public class WxInfoEntity {
    private String path;
    private String query;
    private String envVersion;
}

过程:

/**
 * 获取用户Scheme码
 * @param entity
 * @return
 */
@GetMapping("/getScheme")
public  CommonResult<Object> getScheme(WxInfoEntity entity) {

    //通过token和code来获取用户手机号
    String url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=" + getAccessToken();


    JSONObject jsonObject = new JSONObject();
    JSONObject objectField = new JSONObject();
    objectField.put("path", entity.getPath());
    objectField.put("query", entity.getQuery());
    objectField.put("env_version", entity.getEnvVersion());
    jsonObject.put("jump_wxa", objectField);
    jsonObject.put("is_expire", true);
    jsonObject.put("expire_type", 1);
    //失效一天
    jsonObject.put("expire_interval", 1);
    //封装请求头
    HttpHeaders headers = getHeaders();

    HttpEntity<String> httpEntity = new HttpEntity<>(jsonObject.toString(),headers);

    //通过RestTemplate发送请求,获取到用户手机号码
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
    //返回到前端展示
    return CommonResult.data(response.getBody());
}

private CommonResult<Object> commonReturn(String url,HttpEntity<Map<String, Integer>> httpEntity){
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<Object> response = restTemplate.postForEntity(url, httpEntity, Object.class);
    //返回到前端展示
    return CommonResult.data(response.getBody());
}

private HttpHeaders getHeaders(){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return headers;
}

private String getAccessToken(){
    String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wechatId + "&secret=" + wechatSecret;
    JSONObject token = JSON.parseObject(HttpUtil.get(tokenUrl));
    return token.getString("access_token");
}
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值