完善营销API

This commit is contained in:
xiafang
2020-12-02 19:31:00 +08:00
parent 9bc2eceebf
commit 2fd5a26a5e
4 changed files with 213 additions and 59 deletions

View File

@@ -53,13 +53,9 @@ public enum WechatPayV3Type {
*/
MARKETING_FAVOR_USERS_COUPONS(HttpMethod.POST,"%s/v3/marketing/favor/users/{openid}/coupons"),
/**
* 重启代金券
* 重启代金券API
*/
MARKETING_FAVOR_STOCKS_RESTART(HttpMethod.POST,"%s/v3/marketing/favor/stocks/{stock_id}/restart"),
/**
* 查询代金券可用商户.
*/
MARKETING_FAVOR_STOCKS_MERCHANTS(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/merchants"),
/**
* 条件查询批次列表API.
*/
@@ -68,6 +64,18 @@ public enum WechatPayV3Type {
* 查询批次详情API.
*/
MARKETING_FAVOR_STOCKS_DETAIL(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}"),
/**
* 查询代金券详情API
*/
MARKETING_FAVOR_USERS_COUPONS_DETAIL(HttpMethod.GET, "%s/v3/marketing/favor/users/{openid}/coupons/{coupon_id}"),
/**
* 查询代金券可用商户API.
*/
MARKETING_FAVOR_STOCKS_MERCHANTS(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/merchants"),
/**
* 查询代金券可用单品API.
*/
MARKETING_FAVOR_STOCKS_ITEMS(HttpMethod.GET, "%s/v3/marketing/favor/stocks/{stock_id}/items"),
/**
* 营销图片上传API.
*/

View File

@@ -4,6 +4,7 @@ import cn.felord.payment.wechat.WechatPayProperties;
import cn.felord.payment.wechat.enumeration.StockStatus;
import cn.felord.payment.wechat.enumeration.WeChatServer;
import cn.felord.payment.wechat.enumeration.WechatPayV3Type;
import cn.felord.payment.wechat.v3.model.CouponDetailsQueryParams;
import cn.felord.payment.wechat.v3.model.StocksCreateParams;
import cn.felord.payment.wechat.v3.model.StocksQueryParams;
import cn.felord.payment.wechat.v3.model.StocksSendParams;
@@ -64,8 +65,9 @@ public class WechatMarketingApi extends AbstractApi {
private RequestEntity<?> createStocksFunction(WechatPayV3Type type, StocksCreateParams params) {
WechatPayProperties.V3 v3 = this.meta().getWechatPayProperties().getV3();
String mchId = v3.getMchId();
String httpUrl = type.uri(WeChatServer.CHINA);
URI uri = UriComponentsBuilder.fromHttpUrl(httpUrl).build().toUri();
URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA))
.build()
.toUri();
params.setBelongMerchant(mchId);
return post(uri, params);
}
@@ -107,8 +109,10 @@ public class WechatMarketingApi extends AbstractApi {
// 服务号
params.setAppid(v3.getMp().getAppId());
params.setStockCreatorMchid(v3.getMchId());
String httpUrl = type.uri(WeChatServer.CHINA);
URI uri = UriComponentsBuilder.fromHttpUrl(httpUrl).build().expand(params.getOpenid()).toUri();
URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA))
.build()
.expand(params.getOpenid())
.toUri();
params.setOpenid(null);
return post(uri, params);
}
@@ -127,6 +131,7 @@ public class WechatMarketingApi extends AbstractApi {
.request();
return wechatResponseEntity;
}
/**
* 重启代金券批次API.
*
@@ -147,59 +152,16 @@ public class WechatMarketingApi extends AbstractApi {
String mchId = v3.getMchId();
Map<String, String> body = new HashMap<>();
body.put("stock_creator_mchid", mchId);
String httpUrl = type.uri(WeChatServer.CHINA);
URI uri = UriComponentsBuilder.fromHttpUrl(httpUrl).build().expand(stockId).toUri();
URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA))
.build()
.expand(stockId)
.toUri();
return post(uri, body);
}
/**
* 查询批次详情API.
*
* @param stockId the stock id
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryStockDetail(String stockId) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_DETAIL, stockId)
.function(this::stockDetailFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
private RequestEntity<?> stockDetailFunction(WechatPayV3Type type, String stockId) {
WechatPayProperties.V3 v3 = this.meta().getWechatPayProperties().getV3();
String httpUrl = type.uri(WeChatServer.CHINA);
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("stock_creator_mchid", v3.getMchId());
URI uri = UriComponentsBuilder.fromHttpUrl(httpUrl).queryParams(queryParams).build().expand(stockId).toUri();
return RequestEntity.get(uri).build();
}
/**
* 查询该代金券可用的商户
*
* @param params the params
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryMerchantsByStockId(StocksQueryParams params) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_MERCHANTS, params)
.function(this::queryStocksFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
/**
* 分页查询商户下的代金券批次.
* 条件查询批次列表API.
*
* @param params the params
* @return the wechat response entity
@@ -254,6 +216,120 @@ public class WechatMarketingApi extends AbstractApi {
return RequestEntity.get(uri).build();
}
/**
* 查询批次详情API.
*
* @param stockId the stock id
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryStockDetail(String stockId) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_DETAIL, stockId)
.function(this::stockDetailFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
private RequestEntity<?> stockDetailFunction(WechatPayV3Type type, String stockId) {
WechatPayProperties.V3 v3 = this.meta().getWechatPayProperties().getV3();
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("stock_creator_mchid", v3.getMchId());
URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA))
.queryParams(queryParams)
.build()
.expand(stockId)
.toUri();
return RequestEntity.get(uri).build();
}
/**
* 查询代金券详情API
*
* @param params the params
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryCouponDetails(CouponDetailsQueryParams params) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_USERS_COUPONS_DETAIL, params)
.function(this::couponDetailFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
private RequestEntity<?> couponDetailFunction(WechatPayV3Type type, CouponDetailsQueryParams params) {
WechatPayProperties.V3 v3 = this.meta().getWechatPayProperties().getV3();
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
queryParams.add("appid", v3.getMp().getAppId());
MultiValueMap<String, String> pathParams = new LinkedMultiValueMap<>();
pathParams.add("openid", params.getOpenId());
pathParams.add("coupon_id", params.getCouponId());
URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA))
.queryParams(queryParams)
.build()
.expand(pathParams)
.toUri();
return RequestEntity.get(uri).build();
}
/**
* 查询代金券可用商户API
*
* @param params the params
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryMerchantsByStockId(StocksQueryParams params) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_MERCHANTS, params)
.function(this::queryStocksFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
/**
* 查询代金券可用单品API
*
* @param params the params
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryStockItems(StocksQueryParams params) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_ITEMS, params)
.function(this::queryStocksFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
/**
* 根据商户号查用户的券API
*
* @param params the params
* @return the wechat response entity
*/
public WechatResponseEntity<ObjectNode> queryUserCouponsByMchId(StocksQueryParams params) {
WechatResponseEntity<ObjectNode> wechatResponseEntity = new WechatResponseEntity<>();
this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_ITEMS, params)
.function(this::queryStocksFunction)
.consumer(wechatResponseEntity::convert)
.request();
return wechatResponseEntity;
}
/**
* 营销图片上传API.
*
@@ -287,7 +363,7 @@ public class WechatMarketingApi extends AbstractApi {
String metaStr = this.getMapper().writeValueAsString(meta);
return RequestEntity.post(uri)
.header("Content-Type", MediaType.MULTIPART_FORM_DATA_VALUE)
.header("Meta-Info",metaStr)
.header("Meta-Info", metaStr)
.body(body);
}

View File

@@ -0,0 +1,22 @@
package cn.felord.payment.wechat.v3.model;
import lombok.Data;
/**
* 查询代金券详情API参数
*
* @author Dax
* @since 18 :51
*/
@Data
public class CouponDetailsQueryParams {
/**
* 用户在公众号服务号配置{@link cn.felord.payment.wechat.WechatPayProperties.Mp}下授权得到的openid
* 参考发券
*/
private String openId;
/**
* 代金券id
*/
private String couponId;
}

View File

@@ -0,0 +1,48 @@
package cn.felord.payment.wechat.v3.model;
import cn.felord.payment.wechat.enumeration.CouponStatus;
import lombok.Data;
/**
* @author Dax
* @since 19:19
*/
@Data
public class UserCouponsQueryParams {
/**
* 用户公众号服务号标识
*/
private String openId;
/**
* 公众服务号ID
*/
private String appId;
/**
* 批次号
*/
private String stockId;
/**
* 券状态 null 不生效
*/
private CouponStatus status;
/**
* 创建批次的商户号
*/
private String creatorMchId;
/**
* 批次发放商户号
*/
private String senderMchId;
/**
* 可用商户号
*/
private String availableMchId;
/**
* 分页页码
*/
private int offset = 0;
/**
* 分页大小
*/
private int limit = 20;
}