1. 程式人生 > >接入淘寶客+拼多多(多多客)+京東進行優惠券推廣

接入淘寶客+拼多多(多多客)+京東進行優惠券推廣

記錄:

開發配置:java、jdk1.8、idea、springboot、windows

一、拼多多

2、進入控制檯,建立一個應用,選擇多多客聯盟(也可選擇其它),等待稽核通過。

3、稽核通過之後能夠拿到client_id和client_secret

4、(PS:因我本地maven沒安裝,因此只能用線上)在pom.xml中引入配置

<dependency>
            <groupId>javax.websocket</groupId>
            <artifactId>javax.websocket-client-api</artifactId>
            <version>1.0</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.tyrus.bundles</groupId>
            <artifactId>tyrus-standalone-client</artifactId>
            <version>1.13.1</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.6</version>
        </dependency>

        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.11</version>
        </dependency>

具體配置可以參考  拼多多開發者文件->sdk指南,有明確標識有哪些jar包 

然後先點選某個api,拉到最下面點選api工具測試,先測試是否可用(有的沒有許可權,需要申請)

最後在控制器裡面進行測試呼叫:拼多多是post請求,並且有簽名。看官網的教程是有類的,可以直接set設定值,但不知道為啥引入jar包之後還是不能用。就只能手動拼接

1、生成簽名,簽名的規則在sdk指南中有明確說明,對於資料進行首字母排序,並在資料的首尾加上client_secret

      我個人用了兩種方式:第一,最原始的,自己看有哪些引數,然後一個一個拼接

//拼接簽名
String signD = pddUtil.client_secret +"client_id"+ pddUtil.client_id + "data_typeJSON"
 + "sort_type0" +"timestamp"+timestamp+ "typepdd.ddk.goods.search"
                + "with_coupontrue"+pddUtil.client_secret;

        //生成簽名
        String encode = MD5Util.encode(signD);

第二種採用map,然後轉為string

//獲得時間戳(10位)
long timeStampSec = System.currentTimeMillis()/1000;
String timestamp = String.format("%010d", timeStampSec);

//設定引數
Map<String, String> map = new TreeMap();
map.put("type", "pdd.ddk.goods.search");
map.put("data_type", "JSON");
map.put("timestamp", timestamp);
map.put("client_id", pddUtil.client_id);
map.put("sort_type", "0");
map.put("with_coupon", "true");

//轉換資料為String
StringBuilder sb = new StringBuilder(pddUtil.client_secret);//應規則首尾加上client_secret

for (Map.Entry entry : map.entrySet()) {
    String name = (String) entry.getKey();
    String value = (String) entry.getValue();

    //檢測引數是否為空
    if (this.areNotEmpty(new String[]{name, value})) {
        sb.append(name).append(value);
    }
}
sb.append(pddUtil.client_secret);//應規則首尾加上client_secret

//進行簽名
String sign = MD5Util.encode(sb.toString());

//驗證是否為空
public static boolean areNotEmpty(String[] values) {
    boolean result = true;
    if ((values == null) || (values.length == 0))
        result = false;
    else {
        for (String value : values) {
            result &= !isEmpty(value);
        }
    }
    return result;
}

2、傳送請求,正式請求地址:https://gw-api.pinduoduo.com/api/router

//post引數
String param = "type=pdd.ddk.goods.search&data_type=JSON&timestamp="+
           timestamp +"&client_id="+pddUtil.client_id+
           "&sort_type=0&with_coupon=true&opt_id"+id+"&sign="+encode;

//發起請求
String s = api.sendPost(pddUtil.getURL(), param);

//列印結果
return s;

結果:到此拼多多結束
最後記錄,推廣採用優惠券,呼叫介面為:1、pdd.ddk.goods.search 2、pdd.ddk.goods.promotion.url.generate即可最後結果為

PS:若是註冊的多多客,應用是多多客(即我文章這種,當你應用稽核通過之後拿到了client_id以後,需要到http://jinbao.pinduoduo.com/  多多進寶去繫結client_id)否則沒有許可權呼叫API

二、淘寶

2、進入建立應用,建立成功能夠得到appkey和appsecret

3、下載sdk,進入控制檯,進入其中一個應用的SDK下載頁面,選擇自己語言的sdk下載

4、Java下載出來就倆jar包加上一個空資料夾 進行引用

<dependency>
            <groupId>com.taobao</groupId>
            <artifactId>taobao-sdk-java-auto_1468685308771</artifactId>
            <version>20181109</version>
        </dependency>
        <dependency>
            <groupId>com.taobao</groupId>
            <artifactId>taobao-sdk-java-auto_1468685308771-20181109</artifactId>
            <version>source</version>
        </dependency>

具體怎麼引入可以百度maven怎麼引入外部jar包(我這裡大概說下1、pom.xml中配置好,名字隨便取,只要<artifactId>taobao-sdk-java-auto_1468685308771-20181109</artifactId>這裡和jar包名字一樣即可。2、寫好之後點選Import Changes就會自動生成對應的資料夾還會有幾個幾kb的檔案。3、找到.m2資料夾,然後跟著順序找到<version>source</version>這個資料夾,把jar包複製進去即可 例如:C:\Users\Administrator\.m2\repository\com\taobao\taobao-sdk-java-auto_1468685308771-20181109\source) 

5、檢視 淘寶客api 進行呼叫(看看呼叫以及示例)淘寶只要引入了jar包就可以直接使用物件方便快捷。

結果:

//構建系統引數
TaobaoClient client = new DefaultTaobaoClient(url, appkey, appsecret);

//構建可變引數
TbkDgItemCouponGetRequest req = new TbkDgItemCouponGetRequest();
req.setAdzoneId(56322550367L);
req.setQ(name);
req.setPageSize(20L);

//例項化請求類
TbkDgItemCouponGetResponse response = new TbkDgItemCouponGetResponse();
try {
     //請求
     response = client.execute(req);
} catch (ApiException e) {
     e.printStackTrace();
}
//列印結果
return response.getResults();

 通過swagger檢視頁面效果:

若是優惠券需要:1、taobao.tbk.item.get(商品查詢介面) 2、taobao.tbk.dg.item.coupon.get  在進行一點匹配,判斷操作即可

結果:  
PS:若是要區分天貓或者淘寶,判斷    user_type     Number    1      賣家型別,0表示集市,1表示商城

到此淘寶結束

三、京東

2、建立 應用(根據需要是網站還是app)

3、稽核通過(7個工作日)之後,在推廣管理裡面找到你的app或者網站,點選檢視,獲得appkey和secretkey

4、下載sdk(這裡有個坑,京東聯盟裡面死都找不到進入sdk的路徑最後問的客服>_<)https://news.jd.com/153_1.html 下載下來就一個jar包

5、專案引入sdk

<dependency>
     <groupId>com.jingdong</groupId>
     <artifactId>jd-cps-client</artifactId>
     <version>1.0</version>
</dependency>

6、若沒有引用好,就如上面的拼多多,那就只能自己拼接寫原生

public Object test(){
        Map<String, String> map = new TreeMap();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        map.put("timestamp", sdf.format(new Date()));
        map.put("v", "1.0");
        map.put("sign_method", "md5");
        map.put("format", "json");
        map.put("method", "jd.union.open.order.query");
        //param_json為空的時候需要寫成 "{}"
        map.put("param_json", "{\"orderReq\":{\"time\":\"20181112\",\"pageNo\":1,\"pageSize\":20,\"type\":1}}");
        map.put("access_token", accessToken);
        map.put("app_key", appKey);

        StringBuilder sb = new StringBuilder(appSecret);
        for (Map.Entry entry : map.entrySet()) {
            String name = (String) entry.getKey();
            String value = (String) entry.getValue();
            //檢測引數是否為空
            if (this.areNotEmpty(new String[]{name, value})) {
                sb.append(name).append(value);
            }
        }
        sb.append(appSecret);
        String encode = MD5Util.encode(sb.toString());

        //拼接請求引數
        String prarm = "sign="+encode+"&timestamp="+map.get("timestamp")+"&v=1.0"+
                "&sign_method=md5&format=json&method=jd.union.open.order.query"+
                "&param_json={\"orderReq\":{\"time\":\"20181112\",\"pageNo\":1,\"pageSize\":20,\"type\":1}}"+
                "&access_token="+accessToken+"&app_key="+appKey;
        ApiController api = new ApiController();
        String s = api.sendPost(SERVER_URL, prarm);
        return s;
    }

若引用上了,則可以使用類

public Object test2(){
        //構建系統引數
        JdClient client=new DefaultJdClient(SERVER_URL,accessToken,appKey,appSecret);

        //例項化封裝請求引數類
        UnionOpenOrderQueryRequest unionOpenOrderQueryRequest = new UnionOpenOrderQueryRequest();

        //設定變動引數
        OrderReq orderReq = new OrderReq();
        orderReq.setPageNo(1);
        orderReq.setPageSize(3);
        orderReq.setType(1);
        orderReq.setTime("2018092018");

        //封裝
        unionOpenOrderQueryRequest.setOrderReq(orderReq);

        //請求
        UnionOpenOrderQueryResponse response = null;
        try {
            response= client.execute(unionOpenOrderQueryRequest);
        } catch (JdException e) {
            e.printStackTrace();
        }
        //列印結果
        return response;
    }

若生成優惠券~~~~~~~~~~還需要申請許可權。。麻煩,後面在發