支付宝-创建商家券活动
官方文档 https://opendocs.alipay.com/open/03s1jd?ref=api&scene=a0667e04ac87431eb7e6adc5f13cc8ba
本篇只是附上 创建代码!
重要的事情说三遍!
一定要看接入指南
一定要看接入指南
一定要看接入指南
1.创建商家券活动接口同步返回创建请求受理结果,但并不代表创建成功,只有当接收异步通知(alipay.marketing.activity.message.created)才表示活动创建成功。
2.当activity_base_info.code_mode=MERCHANT_UPLOAD时,当接收到异步通知alipay.marketing.activity.message.created (商家券活动创建通知)后,还需要进行券码导入alipay.marketing.activity.ordervouchesh
创建商家券活动
public ResponseResult<String> alipayMarketingActivityOrderVoucherCreate() {
// 定义时间格式
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// 创建商家券活动模型类
AlipayMarketingActivityOrdervoucherCreateModel createModel = new AlipayMarketingActivityOrdervoucherCreateModel();
// 创建商家券活动请求类
AlipayMarketingActivityOrdervoucherCreateRequest createRequest = new AlipayMarketingActivityOrdervoucherCreateRequest();
// 创建商家券活动响应类
AlipayMarketingActivityOrdervoucherCreateResponse createResponse;
try {
// 外部业务单号
createModel.setOutBizNo(UUID.randomUUID().toString().replace("-", ""));
/*
商户自接入模式:SELF_MODE
服务商代接入模式:AGENCY_MODE
*/
createModel.setMerchantAccessMode("SELF_MODE");
//==============================================活动基础信息=================================================
ActivityBaseInfo activityBaseInfo = new ActivityBaseInfo();
// 活动名称
activityBaseInfo.setActivityName("满100减50活动");
/*
商户上传自定义code: MERCHANT_UPLOAD
发奖时指定券码发奖: MERCHANT_API
*/
// 码模式
activityBaseInfo.setCodeMode("MERCHANT_UPLOAD");
// 活动基础信息添加到请求参数中
createModel.setActivityBaseInfo(activityBaseInfo);
//==============================================券发放模式=================================================
VoucherSendModeInfo voucherSendModeInfo = new VoucherSendModeInfo();
// 券发放模式 直领模式: DIRECT_SEND_MODE
voucherSendModeInfo.setVoucherSendMode("DIRECT_SEND_MODE");
// 券发放规则
VoucherSendRuleInfo voucherSendRuleInfo = new VoucherSendRuleInfo();
/*
发行券的数量
code_mode=MERCHANT_UPLOAD模式下数量必须为0。 其他模式下该数值必须是大于0的整数。
*/
voucherSendRuleInfo.setQuantity(0L);
// 每人领取限制 1.默认按照支付宝账号进行领取限制。 2.不填写或填入0表示没有领取限制。
voucherSendRuleInfo.setQuantityLimitPerUser(0L);
// 券发放开始时间 格式:yyyy-MM-dd HH:mm:ss
voucherSendRuleInfo.setPublishStartTime(new Date());
/*
券发放结束时间 格式:yyyy-MM-dd HH:mm:ss
1.publish_end_time必须大于当前时间
2.publish_end_time必须大于publish_start_time
3.券发放结束时间publish_end_time 与 券发放开始时间publish_start_time 间隔必须小于等于180天
*/
voucherSendRuleInfo.setPublishEndTime(simpleDateFormat.parse("2022-11-30 06:00:00"));
voucherSendModeInfo.setVoucherSendRuleInfo(voucherSendRuleInfo);
// 券发放模式添加到请求参数中
createModel.setVoucherSendModeInfo(voucherSendModeInfo);
//==============================================券优惠抵扣信息=================================================
VoucherDeductInfo voucherDeductInfo = new VoucherDeductInfo();
/*
满减券: FIX_VOUCHER
折扣券: DISCOUNT_VOUCHER
特价券: SPECIAL_VOUCHER
*/
voucherDeductInfo.setVoucherType("FIX_VOUCHER");
// 满减券
FixVoucherInfo fixVoucherInfo = new FixVoucherInfo();
// 面额 取值范围:[0.1,3000] 单位为元
fixVoucherInfo.setAmount("50");
// 门槛金额 取值范围:[0.1,50000] 1.该字段不填写,认为无门槛。 2.币种为人民币,单位为元。 3.小数点以后最多保留两位
fixVoucherInfo.setFloorAmount("100");
voucherDeductInfo.setFixVoucherInfo(fixVoucherInfo);
// 券优惠抵扣信息添加到请求参数中
createModel.setVoucherDeductInfo(voucherDeductInfo);
//==============================================券可用范围=================================================
VoucherAvailableScopeInfo voucherAvailableScopeInfo = new VoucherAvailableScopeInfo();
// 券可用地理位置
VoucherAvailableGeographyScopeInfo geographyScopeInfo = new VoucherAvailableGeographyScopeInfo();
/*
可用门店: SHOP
可用城市: CITY_CODE
*/
// 券可用地理位置类型
geographyScopeInfo.setAvailableGeographyScopeType("SHOP");
// 券可用门店
VoucherAvailableGeographyShopInfo geographyShopInfo = new VoucherAvailableGeographyShopInfo();
// new VoucherAvailableGeographyAllShopInfo()全部门店可用
geographyShopInfo.setAvailableGeographyAllShop(new VoucherAvailableGeographyAllShopInfo());
geographyScopeInfo.setAvailableGeographyShopInfo(geographyShopInfo);
voucherAvailableScopeInfo.setVoucherAvailableGeographyScopeInfo(geographyScopeInfo);
// 券可用范围添加到请求参数中
createModel.setVoucherAvailableScopeInfo(voucherAvailableScopeInfo);
//==============================================券核销限制=================================================
VoucherUseRuleInfo voucherUseRuleInfo = new VoucherUseRuleInfo();
//券核销时间
VoucherUseTimeInfo voucherUseTimeInfo = new VoucherUseTimeInfo();
/*
绝对时间: ABSOLUTE
相对时间: RELATIVE
*/
voucherUseTimeInfo.setPeriodType("ABSOLUTE");
VoucherAbsolutePeriodInfo voucherAbsolutePeriodInfo = new VoucherAbsolutePeriodInfo();
//券可使用的开始时间
voucherAbsolutePeriodInfo.setValidBeginTime(new Date());
//券可使用的结束时间
voucherAbsolutePeriodInfo.setValidEndTime(simpleDateFormat.parse("2022-12-30 07:00:00"));
voucherUseTimeInfo.setAbsolutePeriodInfo(voucherAbsolutePeriodInfo);
voucherUseRuleInfo.setVoucherUseTimeInfo(voucherUseTimeInfo);
//券核销限制添加到请求参数中
createModel.setVoucherUseRuleInfo(voucherUseRuleInfo);
//==============================================券引导详情=================================================
VoucherCustomerGuideInfo voucherCustomerGuideInfo = new VoucherCustomerGuideInfo();
//券核销详情
VoucherUseGuideInfo voucherUseGuideInfo = new VoucherUseGuideInfo();
/*
券码扫码核销: OFFLINE_CODE
小程序线上核销: MINI_APP
*/
List<String> guideList = new ArrayList<>();
guideList.add("MINI_APP");
// 使用引导模式
voucherUseGuideInfo.setUseGuideMode(guideList);
// 小程序核销引导
VoucherMiniAppUseGuideInfo voucherMiniAppUseGuideInfo = new VoucherMiniAppUseGuideInfo();
// 指定跳转到mini_app_id时的具体页面路径
voucherMiniAppUseGuideInfo.setMiniAppUrl("alipays://platformapi/startapp?appId=2017052601179134");
voucherUseGuideInfo.setMiniAppUseGuideInfo(voucherMiniAppUseGuideInfo);
voucherCustomerGuideInfo.setVoucherUseGuideInfo(voucherUseGuideInfo);
// 券引导详情添加到请求参数中
createModel.setVoucherCustomerGuideInfo(voucherCustomerGuideInfo);
//==============================================券展示信息=================================================
VoucherDisplayPatternInfo voucherDisplayPatternInfo = new VoucherDisplayPatternInfo();
// 商户品牌名称
voucherDisplayPatternInfo.setBrandName("肯德基");
// 上传图片接口
AlipayMarketingMaterialImageUploadRequest request = new AlipayMarketingMaterialImageUploadRequest();
// 获取本地图片地址 因为是本地项目运行所以图方便 就选择了本地的图片
FileItem fileContent = new FileItem("C://123.png");
// 图片的byte字节数组。图片大小限制为2M
request.setFileContent(fileContent);
// brand_logo字段,file_key=PROMO_BRAND_LOGO,上传图片尺寸600*600,支持格式:png、jpg、jpeg、bmp,大小不超过2MB
request.setFileKey("PROMO_BRAND_LOGO");
request.setMerchantAccessMode("AGENCY_MODE");
// 返回的resource_id即为该参数的值。
AlipayMarketingMaterialImageUploadResponse response = alipayClient.execute(request);
voucherDisplayPatternInfo.setBrandLogo(response.getResourceId());
// 券详细使用说明
voucherDisplayPatternInfo.setVoucherDescription("1、本券不可兑换现金,不可找零。2、每个用户最多可以领取1张。3、如果订单发生退款,优惠券无法退还。");
// 券展示信息添加到请求参数中
createModel.setVoucherDisplayPatternInfo(voucherDisplayPatternInfo);
// 设置请求参数
createRequest.setBizModel(createModel);
// 发送请求
createResponse = alipayClient.execute(createRequest);
} catch (Exception e) {
throw new RuntimeException(e);
}
return createResponse.isSuccess() ? ResponseResult.success("创建成功", createResponse.getActivityId()) : ResponseResult.success("创建失败", null);
}
上面就是 创建商家券的所有代码了,其实很简单官方文档下也有示例。
需要注意的有以下几点
1.创建商家券时候选的码模式选择为 商户上传自定义code: MERCHANT_UPLOAD,因为是沙箱环境,领券操作只能是码模式为MERCHANT_UPLOAD这种券
2.创建成功后并不真的代表以成功,必须接收到异步通知消息才是创建成功。配置异步通知消息