天天看點

koubei.marketing.campaign.activity.create (活動建立接口)沙箱java版

通過 建立營銷活動接口 ,活動定義主要由活動基本資訊,預算資訊,活動限制資訊,優惠券工具,投放管道和招商工具資訊組成,為了示範簡單,我們僅用必要的配置來建立一個“消費後送1分錢代金券”的活動,如需了解更詳細的活動建立配置說明,可參閱 進階說明 。 示例使用的是java語言,jdk版本需在1.5及以上的開發環境,否者可能會出現測試不通過,在沙箱調通接口後,必須線上上進行測試與驗收,所有傳回碼及業務邏輯以線上為準; 對接須知:  1、正式環境需 建立應用配置密鑰 送出稽核,簽約生效後方可正常使用;簽約請聯系 商戶客服 進行咨詢   沙箱環境 測試注意點:      a、在沙箱調通接口後,必須線上上進行測試與驗收,所有傳回碼及業務邏輯以線上為準;      c、可使用沙箱環境-沙箱工具-口碑門店賬号&二維碼轉換工具,通過沙箱錢包的掃一掃功能,進入商家詳情頁,檢視門店效果;      d、沙箱測試建立門店,推薦使用北京、上海、杭州三個城市在 國家統計局 中有的區域進行測試,如遇到區域不存在的情況,請更換區域調試;  2、 下載下傳服務端SDK   demo下載下傳: 營銷活動建立接口.zip (非官方文檔,僅供參考) koubei.marketing.campaign.activity.create (活動建立接口)接口示例代碼

package com.alipay.demo;
    
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
    
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.BudgetInfo;
import com.alipay.api.domain.ConstraintInfo;
import com.alipay.api.domain.ItemInfo;
import com.alipay.api.domain.KoubeiMarketingCampaignActivityCreateModel;
import com.alipay.api.domain.PromoTool;
import com.alipay.api.domain.PublishChannel;
import com.alipay.api.domain.SendRule;
import com.alipay.api.domain.UseRule;
import com.alipay.api.domain.Voucher;
import com.alipay.api.request.KoubeiMarketingCampaignActivityCreateRequest;
import com.alipay.api.response.KoubeiMarketingCampaignActivityCreateResponse;
import com.alipay.config.AlipayConfig;
    
/**
 * koubei.marketing.campaign.activity.create (活動建立接口)
 * @author wb-wly251833
 * 文檔連結:https://doc.open.alipay.com/doc2/apiDetail.htm?spm=a219a.7395905.0.0.zlCQSG&docType=4&apiId=1086
 */
public class koubeiMarketingCampaignActivityCreate {
    
    public static void main(String[] args) throws AlipayApiException, ParseException {
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        KoubeiMarketingCampaignActivityCreateRequest request = new KoubeiMarketingCampaignActivityCreateRequest();
        KoubeiMarketingCampaignActivityCreateModel model = new KoubeiMarketingCampaignActivityCreateModel();
        //外部批次ID
        model.setOutBizNo(getOutBizNo());   
        //活動名稱
        model.setName("消費滿10元送1元代金券"); 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        Date startTime = sdf.parse("2017-05-01 00:00:00");  
        Date endTime = sdf.parse("2018-05-01 00:00:00");  
        //活動開始時間
        model.setStartTime(startTime); 
        //活動結束時間
        model.setEndTime(endTime); 
        //活動類型,CONSUME_SEND:消費送活動; DIRECT_SEND:直發獎活動; REAL_TIME_SEND:實時立減類活動 
        model.setType("REAL_TIME_SEND"); 
        //活動詳細說明
        model.setDesc("該活動是用于挽回流失使用者的"); 
        //投放管道
        model.setPublishChannels(getPublishChannels());
        //活動預算
        model.setBudgetInfo(getBudgetInfo());
        // 活動限制資訊
        model.setConstraintInfo(getConstraintInfo());
            
        /********營銷工具集   **********/
        List toolList =new ArrayList<>();
        toolList.add(getPromoTool());
        model.setPromoTools(toolList); 
            
        request.setBizModel(model);
        KoubeiMarketingCampaignActivityCreateResponse response = alipayClient.execute(request);
        if(response.isSuccess()){
        System.out.println("調用成功");
        } else {
        System.out.println("調用失敗");
        }
         System.out.println(response.getBody());
    }
        
        
    /**
     * 外部批次ID
     * @return
     */
    private static String getOutBizNo() {
        SimpleDateFormat simpleDateFormat;
        simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        Date date = new Date();
        String str = simpleDateFormat.format(date);
        Random random = new Random();
        int rannum = (int) (random.nextDouble() * (999 - 100 + 1)) + 100;// 擷取5位随機數
        return str+rannum;// 目前時間
    }
        
    /**
     * 投放管道
     * @return
     */
    private static List getPublishChannels() {
      // TODO Auto-generated method stub
      List l=new ArrayList<>();
      PublishChannel p= new PublishChannel();
      p.setType("SHOP_DETAIL");
      p.setName("投放到店鋪");
      l.add(p);
      return l;
    }
        
        
    /**
     * 活動限制資訊
     * @return
     */
    private static ConstraintInfo getConstraintInfo() {
        ConstraintInfo constraintInfo = new  ConstraintInfo();
        //活動期間使用者能夠參與的次數限制 ,不填則不做限制
        //constraintInfo.setUserWinCount("1"); 
        //活動期間使用者能夠參與的頻率限制 ,不填則不限制參與頻率, 每日中獎1次: D||1  
        //constraintInfo.setUserWinFrequency("D||3"); 
        //人群規則組ID 人群規則組ID 僅直發獎類型活動設定有效,通過調用營銷活動人群組規則建立接口參數傳回
        //constraintInfo.setCrowdGroupId("12344556");
        //活動适用的門店清單僅品牌商發起的招商活動可為空 最多支援10w家門店
        constraintInfo.setSuitShops(getSuitShops());
        //最低消費金額,機關元 僅在建立消費送禮包活動時設定
        //constraintInfo.setMinCost("12");
        return constraintInfo;
        }
        
    /**
     * 券對象,當活動類型為POINT_SEND時為null,其他活動類型此字段必填
     * @return
     */
    private static  Voucher getVoucher(){
        Voucher voucher = new Voucher();
        //券類型,目前支援以下類型:  EXCHANGE:兌換券  MONEY:代金券  REDUCETO:減至券  RATE:折扣券
        voucher.setType("MONEY");
        //該字段僅在兌換券條件下(即券類型為EXCHANGE),用于設定兌換券的核銷方式 
        //voucher.setVerifyMode("MERCHANT_SCAN");
        //名稱
        voucher.setName("滿十減一");
            
        //券的使用說明 
        List UseInstructionsList = new ArrayList<>();
        UseInstructionsList.add("滿十減一特價優惠");
        voucher.setUseInstructions(UseInstructionsList);
            
        //券LOGO檔案ID,調用圖檔上傳接口alipay.offline.material.image.upload獲得
        voucher.setLogo("gKpPK40RSNeBiMxDsat8CQAAACMAAQED");
        //券有效期類型,目前支援以下類型: RELATIVE:相對有效期 ,FIXED:絕對有效期
        voucher.setValidateType("RELATIVE");
        //券副标題
        voucher.setBrandName("券副标題測試");
        //券生效的方式,目前支援以下方式 立即生效:IMMEDIATELY  延遲生效:DELAY 僅在券有效期類型為相對有效期時生效
        voucher.setEffectType("IMMEDIATELY");
        //券面額
        voucher.setWorthValue("1");
        // 券的使用規則資訊
        voucher.setUseRule(getUseRule());
        //單品資訊 兌換券不允許設定單品資訊 減至券必須設定單品資訊 其他類型券可按需設定
        voucher.setItemInfo(getItemInfo());
        //券的備注
        voucher.setVoucherNote("券的備注測試");
        return voucher;
    }
        
    /**
     * Item_Info 單品資訊
     * @return
     */
    private static ItemInfo getItemInfo() {
          // TODO Auto-generated method stub
          ItemInfo itemInfo=new ItemInfo();
          itemInfo.setItemText("單品卷測試");
          itemInfo.setItemName("新版ipad");
          itemInfo.setItemIds(getitemIds());
          return itemInfo;
    }
        
    /**
     * item_ids 單品碼清單 
     * @return
     */
    private static List getitemIds() {
          // TODO Auto-generated method stub
          List l=new ArrayList<>();
          l.add("000123456");
          return l;
    }
        
    /**
     * 券的使用規則資訊
     * @return
     */
    private static UseRule getUseRule(){
        UseRule useRule = new UseRule();
        useRule.setSuitShops(getSuitShops());
        return useRule;
    }
        
    /**
     * 活動适用的門店清單 
     * @return
     */
    private static List getSuitShops() {
          // TODO Auto-generated method stub
          List SuitShops=new ArrayList<>();
          SuitShops.add("2017090500077000000000123588");
          SuitShops.add("2017031700077000000000073266");
          return SuitShops;
    }
        
    /**
     * 營銷工具集
     * @return
     */
    private static  PromoTool getPromoTool(){
        PromoTool promoTool = new PromoTool();
        //券對象
        promoTool.setVoucher(getVoucher());
        //單個營銷工具的生效狀态,當在招商部分券失效後會使用這個字段
        //promoTool.setStatus("");
        //獎品發放的規則
        promoTool.setSendRule(getSendRule());
        return  promoTool;
    }
        
    /**
     * 獎品發放的規則
     * @return
     */
    private static SendRule getSendRule() {
          // TODO Auto-generated method stub
          SendRule s=new SendRule();
          //發券最低消費金額
          s.setMinCost("100");
          return s;
        }
        
    /**
     * 活動預算
     * @return
     */
    private static   BudgetInfo getBudgetInfo(){
        //活動預算
        BudgetInfo budgetInfo = new BudgetInfo();
        //預算類型
        budgetInfo.setBudgetType("QUANTITY"); 
        //預算數量
        budgetInfo.setBudgetTotal("10258");
        return budgetInfo;
    }
}           

請求參數注意事項: 1.app_auth_token:ISV/開發者可以通過“

第三方應用授權

”得到商家授權令牌(app_auth_token)作為請求參數傳入,實作代商家發起請求的能力; 2.voucher.Logo:券LOGO檔案ID,調用

alipay.offline.material.image.upload

(

圖檔上傳接口

)獲得,接口示例 可點選【

檢視

】根據文章進行測試擷取image_id 3.SuitShops:活動适用的門店清單 ,這個需要使用

查詢商戶的門店編号清單接口

進行查詢擷取 調用成功傳回資訊:

{"koubei_marketing_campaign_activity_create_response":{"code":"10000","msg":"Success","camp_id":"20170926000000000839270000151581","camp_status":"STARTED"}           

注:如果建立成功 alipayResponse.getCode() 可以擷取結果碼10000,結果碼和錯誤碼請參考本文

結果碼說明

章節。alipayResponse.getCampId() 可以擷取營銷活動ID,後面會用到。 以下是我在沙箱環境下測試到的錯誤,這邊分享給大家: 1.錯誤原因:OperatorId(操作人id)該參數沒有填寫正确,必須和operator_type配對出現,不填時預設是商戶 

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"REQ_PARAM_ERROR","sub_msg":"非法通路,權限不足"}           

2.錯誤原因:SuitShops(活動适用的門店清單 )填寫不正确,這個需要使用

查詢商戶的門店編号清單

接口進行查詢擷取 還需注意的是PromoTools->voucher->UseRule.SuitShops 跟 ConstraintInfo.SuitShops 必須保持一緻

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"BIZ_INVOKE_ERROR","sub_msg":"AE0311111201:傳入門店id數目與查詢出的門店數目不符,門店[2015110600077000000002125023]不存在"}           

3.錯誤原因:你的voucher 中的EffectType(券生效的方式)=IMMEDIATELY(立即生效),Voucher的Type=EXCHANGE(兌換券),導緻的報錯,需要将EffectType改成DELAY(延遲生效)或者 将Voucher的Type修改為别的

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"BIZ_INVOKE_ERROR","sub_msg":"AE0311111201:實時優惠不支援兌換券"}           

4.将Voucher下的Type=MONEY時,voucher.WorthValue不能為空

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"BIZ_INVOKE_ERROR","sub_msg":"AE0311111201:券的類型為代金券或立減券時,券面額不能為空"},           

5. Voucher 下的Voucher的Type設定為EXCHANGE(兌換券)時,VerifyMode=MERCHANT_SCAN ,否者不能設值

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"BIZ_INVOKE_ERROR","sub_msg":"AE0311111201:隻有兌換券才能設定券核銷方式"}           

6.constraintInfo.CrowdGroupId 人群規則組ID ,僅直發獎類型活動設定有效,通過調用

營銷活動人群組規則建立接口

參數傳回的crowd_group_id

{"koubei_marketing_campaign_activity_create_response":{"code":"40004","msg":"Business Failed","sub_code":"BIZ_INVOKE_ERROR","sub_msg":"AE0311111201:傳入的人群id不正确"}           

7.這個錯有點坑的,有時候你的代碼沒有錯,也會報,過會再運作就好了,可能是你測試過于頻繁導緻的,但大多數是參數錯誤導緻的

{"null_response":{"code":"20000","msg":"Service Currently Unavailable","sub_code":"aop.unknow-error","sub_msg":"系統繁忙"}}           

如:constraintInfo.setCrowdRestriction我的傳值如下,然後一直報這個錯,注掉後就成功了

constraintInfo.setCrowdRestriction("NEW_MEMBER_PROMO:新會員 STUDENT:學生使用者,僅對DIRECT_SEND類型活動有效");