如何使用 API 接口更新电子卡券商品

在调用 API 接口更新电子卡券类商品时,会报“请求参数非法, 暂时无法编辑新版”电子卡券“类商品。请通过后台更新的错误。

这种情况需要联系有赞加白名单才可以,下面就电子卡券类商品的更新做一个详细的讲解

操作步骤

  1. 首先,我们需要生产 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

  1. 最后,我们将结果输出下
			JSONObject jsonObject1 = JSONObject.parseObject(JSON.toJSONString(result.getData()));
      System.out.println(jsonObject1);

  1. 结果如下
{"item_id":623015442,"is_success":true}