如何使用 API 接口更新电子卡券商品
在调用 API 接口更新电子卡券类商品时,会报“请求参数非法, 暂时无法编辑新版”电子卡券“类商品。请通过后台更新的错误。
这种情况需要联系有赞加白名单才可以,下面就电子卡券类商品的更新做一个详细的讲解
操作步骤
- 首先,我们需要生产 token
DefaultYZClient yzClient = new DefaultYZClient();
TokenParameter tokenParameter = TokenParameter.self()
.clientId("xxxx")
.clientSecret("xxxxx")
.grantId("xxxx")
.refresh(true)
.build();
OAuthToken oAuthToken = yzClient.getOAuthToken(tokenParameter);
Token token = new Token( oAuthToken.getAccessToken());
这里需要注意了,如果是有容器应用, token 的创建方式会有区别, 有容器应用的 token 创建方式需要注入 BifrostService
//注入 SDK的Service
@Resource
private BifrostService bifrostSdkService;
//自用型应用获取token
OAuthToken token = bifrostSdkService.getToken("店铺ID", OAuthEnum.TokenType.silent);
String accessToken = token.getAccessToken();
log.info("获取到的token {}",accessToken);
2. 然后我们需要去调用更新商品接口来更新电子卡券类商品,具体文档,请参考 https://doc.youzanyun.com/doc#/content/API/1-299/detail/api/0/517,这里我们调用接口将要更新的电子卡券类商品的商品 ID 传入,如下所示:
YouzanItemUpdate youzanItemUpdate = new YouzanItemUpdate();
//创建参数对象,并设置参数
YouzanItemUpdateParams youzanItemUpdateParams = new YouzanItemUpdateParams();
youzanItemUpdateParams.setItemId(623015442L);
youzanItemUpdateParams.setPrice(30000l);
youzanItemUpdateParams.setVirtualExtra(jsonObject.toJSONString());
youzanItemUpdate.setAPIParams(youzanItemUpdateParams);
YouzanItemUpdateResult result = yzClient.invoke(youzanItemUpdate, token, YouzanItemUpdateResult.class);
3. 对于电子卡券类商品,我们需要传入 setVirtualExtra 参数,这个参数中,我们通过 jsonObJect 创建一个 json 对象,然后将参数传入
JSONObject jsonObject = new JSONObject();
//当设置operateVersion支持微信卡包时,电子卡券不支持通过接口编辑,需要使用operate_version 为1 且需要开白名单
jsonObject.put("operate_version",1);
// 开始时间,留空表示长期有效
jsonObject.put("item_validity_start","");
// 结束时间,留空表示长期有效
jsonObject.put("item_validity_end","");
//凭证类型 0 表示立即生效
jsonObject.put("effective_type","0");
// 节假日可用
jsonObject.put("holidays_available",true);
//是否同步至微信卡包
jsonObject.put("update_we_chat_bag",false);
//生效后可用类型 0 长期可用
jsonObject.put("validity_type",0);
update_we_chat_bag 必须设置为 false, operate_version 设置为 1
- 最后,我们将结果输出下
JSONObject jsonObject1 = JSONObject.parseObject(JSON.toJSONString(result.getData()));
System.out.println(jsonObject1);
- 结果如下
{"item_id":623015442,"is_success":true}