🆕 #1651 添加小程序直播间商品相关操作接口

Co-authored-by: lipengjun <pengjun92>
This commit is contained in:
微同科技 2020-06-30 16:32:50 +08:00 committed by GitHub
parent eec3f78ec6
commit c60fda48d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 682 additions and 60 deletions

View File

@ -0,0 +1,123 @@
package cn.binarywang.wx.miniapp.api;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import me.chanjar.weixin.common.error.WxErrorException;
import java.util.List;
/**
* <pre>
* 直播间商品相关操作接口
* 文档地址https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/commodity-api.html
* Created by lipengjun on 2020/6/29.
* </pre>
*
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
public interface WxMaLiveGoodsService {
String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/add";
String RESET_AUDIT_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/resetaudit";
String AUDIT_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/audit";
String DELETE_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/delete";
String UPDATE_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/update";
String GET_GOODS_WARE_HOUSE = "https://api.weixin.qq.com/wxa/business/getgoodswarehouse";
String GET_APPROVED_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/goods/getapproved";
/**
* 商品添加并提审
* <pre>
* 调用此接口上传并提审需要直播的商品信息审核通过后商品录入小程序直播商品库
* 注意开发者必须保存商品ID审核单ID如果丢失则无法调用其他相关接口
* 调用额度500次/一天
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/goods/add?access_token=ACCESS_TOKEN
* </pre>
*
* @param goods 商品
* @return 返回auditIdgoodsId
* @throws WxErrorException .
*/
WxMaLiveResult addGoods(WxMaLiveInfo.Goods goods) throws WxErrorException;
/**
* 撤回审核
* <pre>
* 调用此接口可撤回直播商品的提审申请消耗的提审次数不返还
* 调用额度500次/一天
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/goods/resetaudit?access_token=ACCESS_TOKEN
* <pre>
* @param auditId 审核单ID
* @param goodsId 商品ID
* @return 撤回审核是否成功
* @throws WxErrorException .
*/
boolean resetAudit(Integer auditId, Integer goodsId) throws WxErrorException;
/**
* 重新提交审核
* <pre>
* 调用此接口可撤回直播商品的提审申请消耗的提审次数不返还
* 调用额度500次/一天与接口'商品添加并提审'共用500次限制
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/goods/audit?access_token=ACCESS_TOKEN
* <pre>
* @param goodsId 商品ID
* @return 审核单ID
* @throws WxErrorException .
*/
String auditGoods(Integer goodsId) throws WxErrorException;
/**
* 删除商品
* <pre>
* 调用此接口可删除小程序直播商品库中的商品删除后直播间上架的该商品也将被同步删除不可恢复
* 调用额度1000次/一天
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/goods/delete?access_token=ACCESS_TOKEN
* <pre>
* @param goodsId 商品ID
* @return 删除商品是否成功
* @throws WxErrorException .
*/
boolean deleteGoods(Integer goodsId) throws WxErrorException;
/**
* 更新商品
* <pre>
* 调用此接口可以更新商品信息审核通过的商品仅允许更新价格类型与价格审核中的商品不允许更新未审核的商品允许更新所有字段 只传入需要更新的字段
* 调用额度1000次/一天
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/goods/update?access_token=ACCESS_TOKEN
* </pre>
*
* @param goods 商品
* @return 更新商品是否成功
* @throws WxErrorException .
*/
boolean updateGoods(WxMaLiveInfo.Goods goods) throws WxErrorException;
/**
* 获取商品状态
* <pre>
* 调用此接口可获取商品的信息与审核状态
* 调用额度1000次/一天
* http请求方式POST https://api.weixin.qq.com/wxa/business/getgoodswarehouse?access_token=ACCESS_TOKEN
* <pre>
* @param goodsIds 商品ID集
* @return 商品状态信息
* @throws WxErrorException .
*/
WxMaLiveResult getGoodsWareHouse(List<Integer> goodsIds) throws WxErrorException;
/**
* 获取商品列表
* <pre>
* 调用此接口可获取商品列表
* 调用额度10000次/一天
* http请求方式GET https://api.weixin.qq.com/wxaapi/broadcast/goods/getapproved?access_token=ACCESS_TOKEN
* <pre>
* @param offset 分页条数起点
* @param limit 分页大小默认30不超过100
* @param status 商品状态0未审核1审核中2审核通过3审核驳回
* @return 商品列表
* @throws WxErrorException .
*/
WxMaLiveResult getApprovedGoods(Integer offset, Integer limit, Integer status) throws WxErrorException;
}

View File

@ -1,6 +1,7 @@
package cn.binarywang.wx.miniapp.api;
import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import me.chanjar.weixin.common.error.WxErrorException;
import java.util.List;
@ -15,6 +16,22 @@ import java.util.List;
*/
public interface WxMaLiveService {
String GET_LIVE_INFO = "https://api.weixin.qq.com/wxa/business/getliveinfo";
String CREATE_ROOM = "https://api.weixin.qq.com/wxaapi/broadcast/room/create";
String ADD_GOODS = "https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods";
/**
* 创建直播间
* <pre>
* 调用此接口创建直播间创建成功后将在直播间列表展示调用额度10000次/一天
* 文档地址https://developers.weixin.qq.com/miniprogram/dev/framework/liveplayer/studio-api.html#1
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/room/create?access_token=ACCESS_TOKEN
* </pre>
*
* @param roomInfo 直播间信息
* @return .
* @throws WxErrorException .
*/
Integer createRoom(WxMaLiveInfo.RoomInfo roomInfo) throws WxErrorException;
/**
* 获取直播房间列表.分页
@ -24,39 +41,54 @@ public interface WxMaLiveService {
* @return .
* @throws WxErrorException .
*/
WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException;
WxMaLiveResult getLiveInfo(Integer start, Integer limit) throws WxErrorException;
/**
* 获取所有直播间信息没有分页直接获取全部
*
* @return
* @throws WxErrorException
*/
List<WxMaGetLiveInfo.RoomInfo> getLiveinfos() throws WxErrorException;
List<WxMaLiveResult.RoomInfo> getLiveinfos() throws WxErrorException;
/**
*
* 获取直播房间回放数据信息.
*
* @param action 获取回放
* @param action 获取回放
* @param room_id 直播间 id
* @param start 起始拉取视频start = 0 表示从第 1 个视频片段开始拉取
* @param limit 每次拉取的个数上限不要设置过大建议 100 以内
* @param start 起始拉取视频start = 0 表示从第 1 个视频片段开始拉取
* @param limit 每次拉取的个数上限不要设置过大建议 100 以内
* @return
* @throws WxErrorException
*/
WxMaGetLiveInfo getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException;
WxMaLiveResult getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException;
/**
*
* 获取直播房间回放数据信息.
* <p>
* 获取回放 默认get_replay
*
* 获取回放 默认get_replay
* @param room_id 直播间 id
* @param start 起始拉取视频start = 0 表示从第 1 个视频片段开始拉取
* @param limit 每次拉取的个数上限不要设置过大建议 100 以内
* @param start 起始拉取视频start = 0 表示从第 1 个视频片段开始拉取
* @param limit 每次拉取的个数上限不要设置过大建议 100 以内
* @return
* @throws WxErrorException
*/
WxMaGetLiveInfo getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException;
WxMaLiveResult getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException;
/**
* 直播间导入商品
* <p>
* 调用接口往指定直播间导入已入库的商品
* 调用频率
* 调用额度10000次/一天
* <p>
* http请求方式POST https://api.weixin.qq.com/wxaapi/broadcast/room/addgoods?access_token=ACCESS_TOKEN
* <pre>
* @param roomId 房间ID
* @param goodsIds 数组列表可传入多个里面填写 商品 ID
* @return 导入商品是否成功
* @throws WxErrorException .
*/
boolean addGoodsToRoom(Integer roomId, List<Integer> goodsIds) throws WxErrorException;
}

View File

@ -0,0 +1,46 @@
package cn.binarywang.wx.miniapp.api;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import java.io.File;
/**
* <pre>
* 素材管理的相关接口
* 文档地址https://developers.weixin.qq.com/doc/offiaccount/Asset_Management/New_temporary_materials.html
* Created by lipengjun on 2020/6/29.
* </pre>
*
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
public interface WxMaMaterialService {
String MEDIA_UPLOAD_URL = "https://api.weixin.qq.com/cgi-bin/media/upload?type=%s";
/**
* <pre>
* 新增临时素材
* 小程序获取临时素材用于直播间商品
* 素材管理接口对所有认证的订阅号和服务号开放通过本接口小程序可以新增临时素材即上传临时多媒体文件返回的mediaId用于直播间商品使用
* 请注意
* 1对于临时素材每个素材media_id会在开发者上传或粉丝发送到微信服务器3天后自动删除所以用户发送给开发者的素材若开发者需要应尽快下载到本地以节省服务器资源
* 2media_id是可复用的
* 3素材的格式大小等要求与公众平台官网一致具体是图片大小不超过2M支持png/jpeg/jpg/gif格式语音大小不超过5M长度不超过60秒支持mp3/amr格式
* 4需使用https调用本接口
* 本接口即为原上传多媒体文件接口
* 注意事项
* 上传的临时多媒体文件有格式和大小限制如下
* 图片image: 2M支持PNG\JPEG\JPG\GIF格式
* 语音voice2M播放长度不超过60s支持AMR\MP3格式
* 视频video10MB支持MP4格式
* 缩略图thumb64KB支持JPG格式
* 媒体文件在后台保存时间为3天即3天后media_id失效
* 详情请见: <a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738726&token=&lang=zh_CN">新增临时素材</a>
* 接口url格式https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
* </pre>
*
* @param mediaType 媒体类型, 请看{@link me.chanjar.weixin.common.api.WxConsts}
* @param file 文件对象
* @throws WxErrorException
*/
WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException;
}

View File

@ -280,4 +280,18 @@ public interface WxMaService extends WxService {
* @return .
*/
WxMaLiveService getLiveService();
/**
* 获取直播间商品服务对象
*
* @return .
*/
WxMaLiveGoodsService getLiveGoodsService();
/**
* 获取小程序素材管理服务对象
*
* @return .
*/
WxMaMaterialService getMaterialService();
}

View File

@ -56,6 +56,8 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
private final WxMaSubscribeService subscribeService = new WxMaSubscribeServiceImpl(this);
private final WxMaCloudService cloudService = new WxMaCloudServiceImpl(this);
private final WxMaLiveService liveService = new WxMaLiveServiceImpl(this);
private final WxMaLiveGoodsService liveGoodsService = new WxMaLiveGoodsServiceImpl(this);
private final WxMaMaterialService maMaterialService = new WxMaMaterialServiceImpl(this);
private int retrySleepMillis = 1000;
private int maxRetryTimes = 5;
@ -394,4 +396,14 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
public WxMaLiveService getLiveService() {
return this.liveService;
}
@Override
public WxMaLiveGoodsService getLiveGoodsService() {
return this.liveGoodsService;
}
@Override
public WxMaMaterialService getMaterialService() {
return this.maMaterialService;
}
}

View File

@ -0,0 +1,132 @@
package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaLiveGoodsService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.AllArgsConstructor;
import me.chanjar.weixin.common.WxType;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* <pre>
* Created by lipengjun on 2020/6/29.
* </pre>
*
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
@AllArgsConstructor
public class WxMaLiveGoodsServiceImpl implements WxMaLiveGoodsService {
private static final JsonParser JSON_PARSER = new JsonParser();
private WxMaService wxMaService;
@Override
public WxMaLiveResult addGoods(WxMaLiveInfo.Goods goods) throws WxErrorException {
Map<String, Object> map = new HashMap<>(2);
map.put("goodsInfo", goods);
String responseContent = this.wxMaService.post(ADD_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return WxMaLiveResult.fromJson(jsonObject.toString());
}
@Override
public boolean resetAudit(Integer auditId, Integer goodsId) throws WxErrorException {
Map<String, Integer> map = new HashMap<>(4);
map.put("auditId", auditId);
map.put("goodsId", goodsId);
String responseContent = this.wxMaService.post(RESET_AUDIT_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return true;
}
@Override
public String auditGoods(Integer goodsId) throws WxErrorException {
Map<String, Integer> map = new HashMap<>(2);
map.put("goodsId", goodsId);
String responseContent = this.wxMaService.post(AUDIT_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return jsonObject.get("auditId").getAsString();
}
@Override
public boolean deleteGoods(Integer goodsId) throws WxErrorException {
Map<String, Integer> map = new HashMap<>(2);
map.put("goodsId", goodsId);
String responseContent = this.wxMaService.post(DELETE_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return true;
}
@Override
public boolean updateGoods(WxMaLiveInfo.Goods goods) throws WxErrorException {
Map<String, Object> map = new HashMap<>(2);
map.put("goodsInfo", goods);
String responseContent = this.wxMaService.post(UPDATE_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return true;
}
@Override
public WxMaLiveResult getGoodsWareHouse(List<Integer> goodsIds) throws WxErrorException {
Map<String, Object> map = new HashMap<>(2);
map.put("goods_ids", goodsIds);
String responseContent = this.wxMaService.post(GET_GOODS_WARE_HOUSE, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return WxMaLiveResult.fromJson(jsonObject.toString());
}
@Override
public WxMaLiveResult getApprovedGoods(Integer offset, Integer limit, Integer status) throws WxErrorException {
ImmutableMap<String, ? extends Serializable> params = ImmutableMap.of("status", status, "offset", offset, "limit", limit);
String responseContent = wxMaService.get(GET_APPROVED_GOODS, Joiner.on("&").withKeyValueSeparator("=").join(params));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
JsonArray goodsArr = jsonObject.getAsJsonArray("goods");
if (goodsArr.size() > 0) {
for (int i = 0; i < goodsArr.size(); i++) {
// 接口返回key是驼峰
JsonObject goods = (JsonObject) goodsArr.get(i);
goods.addProperty("goods_id", goods.get("goodsId").getAsInt());
goods.addProperty("cover_img_url", goods.get("coverImgUrl").getAsString());
goods.addProperty("price_type", goods.get("priceType").getAsInt());
goods.addProperty("third_party_tag", goods.get("thirdPartyTag").getAsInt());
goods.addProperty("audit_status", status);
}
}
return WxMaLiveResult.fromJson(jsonObject.toString());
}
}

View File

@ -2,7 +2,8 @@ package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaLiveService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
@ -26,21 +27,31 @@ import java.util.Map;
@AllArgsConstructor
public class WxMaLiveServiceImpl implements WxMaLiveService {
private static final JsonParser JSON_PARSER = new JsonParser();
private WxMaService service;
private WxMaService wxMaService;
@Override
public WxMaGetLiveInfo getLiveInfo(Integer start, Integer limit) throws WxErrorException {
JsonObject jsonObject = getJsonObject(start, limit, null);
return WxMaGetLiveInfo.fromJson(jsonObject.toString());
public Integer createRoom(WxMaLiveInfo.RoomInfo roomInfo) throws WxErrorException {
String responseContent = this.wxMaService.post(CREATE_ROOM, WxMaGsonBuilder.create().toJson(roomInfo));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return jsonObject.get("roomId").getAsInt();
}
@Override
public List<WxMaGetLiveInfo.RoomInfo> getLiveinfos() throws WxErrorException {
List<WxMaGetLiveInfo.RoomInfo> results = new ArrayList<>();
public WxMaLiveResult getLiveInfo(Integer start, Integer limit) throws WxErrorException {
JsonObject jsonObject = getJsonObject(start, limit, null);
return WxMaLiveResult.fromJson(jsonObject.toString());
}
@Override
public List<WxMaLiveResult.RoomInfo> getLiveinfos() throws WxErrorException {
List<WxMaLiveResult.RoomInfo> results = new ArrayList<>();
Integer start = 0;
Integer limit = 80;
Integer tatal = 0;
WxMaGetLiveInfo liveInfo = null;
WxMaLiveResult liveInfo = null;
do {
if (tatal != 0 && tatal <= start) {
break;
@ -62,19 +73,32 @@ public class WxMaLiveServiceImpl implements WxMaLiveService {
}
@Override
public WxMaGetLiveInfo getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException {
public WxMaLiveResult getLiveReplay(String action, Integer room_id, Integer start, Integer limit) throws WxErrorException {
Map<String, Object> map = new HashMap(4);
map.put("action", action);
map.put("room_id", room_id);
JsonObject jsonObject = getJsonObject(start, limit, map);
return WxMaGetLiveInfo.fromJson(jsonObject.toString());
return WxMaLiveResult.fromJson(jsonObject.toString());
}
@Override
public WxMaGetLiveInfo getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException {
public WxMaLiveResult getLiveReplay(Integer room_id, Integer start, Integer limit) throws WxErrorException {
return getLiveReplay("get_replay", room_id, start, limit);
}
@Override
public boolean addGoodsToRoom(Integer roomId, List<Integer> goodsIds) throws WxErrorException {
Map<String, Object> map = new HashMap<>(2);
map.put("roomId", roomId);
map.put("ids", goodsIds);
String responseContent = this.wxMaService.post(ADD_GOODS, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return true;
}
/**
* 包装一下
*
@ -90,7 +114,7 @@ public class WxMaLiveServiceImpl implements WxMaLiveService {
}
map.put("start", start);
map.put("limit", limit);
String responseContent = service.post(GET_LIVE_INFO, WxMaGsonBuilder.create().toJson(map));
String responseContent = wxMaService.post(GET_LIVE_INFO, WxMaGsonBuilder.create().toJson(map));
JsonObject jsonObject = JSON_PARSER.parse(responseContent).getAsJsonObject();
if (jsonObject.get("errcode").getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));

View File

@ -0,0 +1,28 @@
package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaMaterialService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
import java.io.File;
/**
* <pre>
* Created by lipengjun on 2020/6/29.
* </pre>
*
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
@RequiredArgsConstructor
public class WxMaMaterialServiceImpl implements WxMaMaterialService {
private final WxMaService wxMaService;
@Override
public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException {
String url = String.format(MEDIA_UPLOAD_URL, mediaType);
return this.wxMaService.execute(MediaUploadRequestExecutor.create(this.wxMaService.getRequestHttp()), url, file);
}
}

View File

@ -0,0 +1,60 @@
package cn.binarywang.wx.miniapp.bean;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 直播接口入参
*
* @author yjwang
* @date 2020/4/5
*/
@Data
public class WxMaLiveInfo implements Serializable {
private static final long serialVersionUID = 7285263767524755887L;
/**
* 直播列表
*/
@Data
public static class RoomInfo implements Serializable {
private static final long serialVersionUID = 7745775280267417154L;
private String name;
private Integer roomid;
private String coverImg;
private String shareImg;
private Integer liveStatus;
private Long startTime;
private Long endTime;
private String anchorName;
private String anchorWechat;
private String anchorImg;
private Integer type;
private Integer screenType;
private Integer closeLike;
private Integer closeGoods;
private Integer closeComment;
private List<Goods> goods;
}
/**
* 商品列表
*/
@Data
public static class Goods implements Serializable {
private static final long serialVersionUID = 5769245932149287574L;
private Integer goodsId;
private String coverImgUrl;
private String url;
private Integer priceType;
private String price;
private String price2;
private String name;
/**
* 1, 2表示是为api添加商品否则是在MP添加商品
*/
private String thirdPartyTag;
}
}

View File

@ -8,30 +8,65 @@ import java.io.Serializable;
import java.util.List;
/**
* 获取直播房间列表
* <pre>
* 直播间操作返回结果
* Created by lipengjun on 2020/6/29.
* </pre>
*
* @author yjwang
* @date 2020/4/5
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
@Data
public class WxMaGetLiveInfo implements Serializable {
private static final long serialVersionUID = 7285263767524755887L;
public class WxMaLiveResult implements Serializable {
private static final long serialVersionUID = 1L;
private Integer errcode;
private String errmsg;
private Integer total;
private Integer auditId;
private Integer goodsId;
private List<Goods> goods;
/**
* 直播间列表
*/
@SerializedName("room_info")
private List<RoomInfo> roomInfos;
/**
* 获取回放源视频列表
*/
@SerializedName("live_replay")
private List<LiveReplay> liveReplay;
public static WxMaGetLiveInfo fromJson(String json) {
return WxMaGsonBuilder.create().fromJson(json, WxMaGetLiveInfo.class);
public static WxMaLiveResult fromJson(String json) {
return WxMaGsonBuilder.create().fromJson(json, WxMaLiveResult.class);
}
/**
* 商品列表
*/
@Data
public static class Goods implements Serializable {
private static final long serialVersionUID = 5769245932149287574L;
@SerializedName("goods_id")
private Integer goodsId;
@SerializedName("cover_img_url")
private String coverImgUrl;
private String name;
private String url;
@SerializedName("price_type")
private Integer priceType;
/**
* 0未审核1审核中2:审核通过3审核失败
*/
@SerializedName("audit_status")
private Integer auditStatus;
private String price;
private String price2;
/**
* 1, 2表示是为api添加商品否则是在MP添加商品
*/
@SerializedName("third_party_tag")
private String thirdPartyTag;
}
/**
@ -54,22 +89,20 @@ public class WxMaGetLiveInfo implements Serializable {
private Long endTime;
@SerializedName("anchor_name")
private String anchorName;
@SerializedName("anchor_wechat")
private String anchorWechat;
@SerializedName("anchor_img")
private String anchorImg;
private List<Goods> goods;
}
/**
* 商品列表
*/
@Data
public static class Goods implements Serializable {
private static final long serialVersionUID = 5769245932149287574L;
@SerializedName("cover_img")
private String coverImg;
private String url;
private String price;
private String name;
private Integer type;
@SerializedName("screen_type")
private Integer screenType;
@SerializedName("close_like")
private Integer closeLike;
@SerializedName("closeGoods")
private Integer closeGoods;
@SerializedName("close_comment")
private Integer closeComment;
private List<WxMaLiveInfo.Goods> goods;
}
/**
@ -85,6 +118,4 @@ public class WxMaGetLiveInfo implements Serializable {
@SerializedName("media_url")
private String mediaUrl;
}
}

View File

@ -0,0 +1,92 @@
package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import com.google.inject.Inject;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import java.io.File;
import java.util.Arrays;
import static org.testng.Assert.assertNotNull;
/**
* 测试直播商品管理相关的接口
*
* @author <a href="https://github.com/lipengjun92">lipengjun (939961241@qq.com)</a>
*/
@Test
@Guice(modules = ApiTestModule.class)
public class WxMaLiveGoodsServiceImplTest {
@Inject
private WxMaService wxService;
@Test
public void addGoods() throws Exception {
//上传临时素材
WxMediaUploadResult mediaUpload = this.wxService.getMaterialService().mediaUpload("image", new File("E:\\1.png"));
WxMaLiveInfo.Goods goods = new WxMaLiveInfo.Goods();
goods.setCoverImgUrl(mediaUpload.getMediaId());
goods.setName("宫廷奢华真丝四件套");
goods.setPrice("1599");
goods.setPrice2("0");
goods.setPriceType(1);
goods.setUrl("pages/goods/goods?id=b7c4fbf95493bd294054fe4296d0d9ad");
WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().addGoods(goods);
assertNotNull(liveResult);
System.out.println(liveResult.toString());
}
@Test
public void resetAudit() throws Exception {
boolean result = this.wxService.getLiveGoodsService().resetAudit(715138516, 9);
System.out.println(result);
}
@Test
public void auditGoods() throws Exception {
String result = this.wxService.getLiveGoodsService().auditGoods(9);
System.out.println(result);
}
@Test
public void deleteGoods() throws Exception {
boolean result = this.wxService.getLiveGoodsService().deleteGoods(9);
System.out.println(result);
}
@Test
public void updateGoods() throws Exception {
WxMaLiveInfo.Goods goods = new WxMaLiveInfo.Goods();
goods.setGoodsId(8);
goods.setName("宫廷奢华真丝四件套");
goods.setCoverImgUrl("http://mmbiz.qpic.cn/mmbiz_png/omYktZNGamuUQE0WPVfqdnLV61JDhluXOac7PiaoZeticFpcR7wvicC0aXUC2VXkl7r1gN0QSKosv2satn6oCFeiaQ/0");
goods.setPrice("2299");
goods.setPrice2("0");
goods.setPriceType(1);
goods.setUrl("pages/goods/goods?id=b7c4fbf95493bd294054fe4296d0d9ad");
boolean maLiveInfo = this.wxService.getLiveGoodsService().updateGoods(goods);
System.out.println(maLiveInfo);
}
@Test
public void getGoodsWareHouse() throws Exception {
WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().getGoodsWareHouse(Arrays.asList(1, 2));
assertNotNull(liveResult);
System.out.println(liveResult.toString());
}
@Test
public void getApprovedGoods() throws Exception {
WxMaLiveResult liveResult = this.wxService.getLiveGoodsService().getApprovedGoods(0, 4, 2);
assertNotNull(liveResult);
System.out.println(liveResult.toString());
}
}

View File

@ -1,23 +1,20 @@
package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaGetLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveInfo;
import cn.binarywang.wx.miniapp.bean.WxMaLiveResult;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import cn.binarywang.wx.miniapp.test.TestConfig;
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonObject;
import com.google.inject.Inject;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import org.testng.annotations.Guice;
import org.testng.annotations.Test;
import java.io.File;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
/**
* 测试直播相关的接口
@ -31,9 +28,34 @@ public class WxMaLiveServiceImplTest {
@Inject
private WxMaService wxService;
@Test
public void createRoom() throws Exception {
//上传临时素材
WxMediaUploadResult mediaUpload = this.wxService.getMaterialService().mediaUpload("image", new File("E:\\1.png"));
WxMaLiveInfo.RoomInfo roomInfo = new WxMaLiveInfo.RoomInfo();
roomInfo.setName("订阅通知直播间");
roomInfo.setCoverImg(mediaUpload.getMediaId());
Calendar c = Calendar.getInstance();
c.set(2020, Calendar.SEPTEMBER, 10, 8, 0);
roomInfo.setStartTime(c.getTimeInMillis() / 1000);
c.set(2020, Calendar.SEPTEMBER, 10, 12, 0);
roomInfo.setEndTime(c.getTimeInMillis() / 1000);
roomInfo.setAnchorName("鹏军_专业小程序开发");
roomInfo.setAnchorWechat("pengjun939961241");
roomInfo.setShareImg(mediaUpload.getMediaId());
roomInfo.setType(1);
roomInfo.setScreenType(1);
roomInfo.setCloseLike(0);
roomInfo.setCloseGoods(0);
roomInfo.setCloseComment(0);
Integer roomId = this.wxService.getLiveService().createRoom(roomInfo);
System.out.println(roomId);
}
@Test
public void getLiveInfo() throws Exception {
WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveInfo(0,10);
WxMaLiveResult list = this.wxService.getLiveService().getLiveInfo(0, 10);
assertNotNull(list);
System.out.println(list.toString());
}
@ -41,15 +63,21 @@ public class WxMaLiveServiceImplTest {
@Test
public void getLiveReplay() throws Exception {
// [12, 11, 10, 9, 8, 7, 6, 5, 3, 2]
WxMaGetLiveInfo list = this.wxService.getLiveService().getLiveReplay(11,0,10);
WxMaLiveResult list = this.wxService.getLiveService().getLiveReplay(3, 0, 10);
assertNotNull(list);
System.out.println(list.toString());
}
@Test
public void getLiveinfos() throws Exception {
List<WxMaGetLiveInfo.RoomInfo> list = this.wxService.getLiveService().getLiveinfos();
List<WxMaLiveResult.RoomInfo> list = this.wxService.getLiveService().getLiveinfos();
assertNotNull(list);
System.out.println(list.toString());
}
@Test
public void addGoodsToRoom() throws Exception {
boolean result = this.wxService.getLiveService().addGoodsToRoom(5, Arrays.asList(8, 7, 5, 4, 10));
System.out.println(result);
}
}