这个是我找到的另一个第三方文档, 不过少了一点后续过程

因为我们有几个兄弟公司, 都做了淘宝返佣这个功能, 我们是最后做这个功能的, 说实话, 刚接到任务我是有点无从下手的, 百川的sdk也没有讲的那么详细, 在开发的过程中才慢慢摸出一点门道, 也希望对后来的集成者能有一些力所能及的帮助.

1. 去创建你的应用

2. 下载对应的安全图片



3.申请开通你的电商功能,马上就能通过



4.gradle配置

repositories { 
    maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" }
} 
dependencies {
    // 授权登陆 (MemberSDK)
    compile 'com.ali.auth.sdk:alibabauth_core:1.2.4@jar'
    compile 'com.ali.auth.sdk:alibabauth_ui:1.2.4@aar'
    compile 'com.ali.auth.sdk:alibabauth_ext:1.2.4@jar'
    
    // fastjson
    compile 'com.alibaba:fastjson:1.2.9'
    // 基础电商组件(AlibcTradeSDK, AlibcTrade, AlibcLogin)
    // 包含打开detail,淘客分润,jsbridge注入等功能
    compile 'com.alibaba.sdk.android:alibc_trade_sdk:3.1.1.11@aar'
    // 集成支付宝(可选)
    compile 'com.alibaba.alipay:alipaySingle:20160825@jar'
    // 组件可用性统计
    compile 'com.alibaba.mtl:app-monitor-sdk:2.5.1_for_bc'
    
    // 基础安全组件
    compile 'com.taobao.android:securityguardaar3:5.1.96@aar'
    // 网关
    compile 'com.taobao.android:mtopsdk_allinone_open:1.3.0@jar'
    // 手机淘宝与三方app之间的往返跳转
    compile 'com.taobao.android:alibc_applink:2.0.0.9@jar'
    // deviceID,主要用于计算设备的uttid, 设备唯一标识
    compile 'com.taobao.android:utdid4all:1.1.5'
}
复制代码

5.初始化, 最好是在Application里

AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() {
    @Override
    public void onSuccess() {
        // 初始化成功,设置相关的全局配置参数
        
        // 是否使用支付宝
        AlibcTradeSDK.setShouldUseAlipay(true);
        
        // 设置是否使用同步淘客打点
        AlibcTradeSDK.setSyncForTaoke(true);
        
        // 是否走强制H5的逻辑,为true时全部页面均为H5打开
        AlibcTradeSDK.setForceH5(true);
        
        // 设置全局淘客参数,方便开发者用同一个淘客参数,不需要在show接口重复传入
        AlibcTradeSDK.setTaokeParams(taokeParams)
        
        // 设置渠道信息(如果有渠道专享价,需要设置)
        AlibcTradeSDK.setChannel(typeName, channelName)

        // ...
    }

    @Override
    public void onFailure(int code, String msg) {
        //初始化失败,可以根据code和msg判断失败原因,详情参见错误说明
    }
});
复制代码

在合适的地方销毁

AlibcTradeSDK.destroy();
复制代码

业务中需要了解的细节

无论是H5还是吊起淘宝打开相关页面,都需要使用AlibcTrade.show()方法, 这个方法里面配置了很多参数, 基本决定了你的业务逻辑是否正常, 你可以像上面一样初始化的时候就配置好, 不过因为我们不止一个电商模块, 所以是单独设置的.

百川sdk具体的跳转AlibcTrade.show()方法
AlibcTrade.show(context, detailPage, showParams, alibcTaokeParams, exParams, new AlibcTradeCallback() {
 @Override
 public void onTradeSuccess(AlibcTradeResult tradeResult) {
    
 }

 @Override
 public void onFailure(int i, String s) {
    
    }
});
复制代码
第二个参数就是具体要跳转的页面, 我们的需求几乎都是碰到商品详情才跳转, 所以只用了两种方式AlibcDetailPage和AlibcPage, 前者只能使用ID跳转具体页面,后者只能通过url跳转具体页面
AlibcDetailPage detailPage = new AlibcDetailPage(id);
AlibcPage detailPage = new AlibcPage(url);
复制代码
第三个参数就是跳转方式,可以H5,可以拉手淘,也可以自动
AlibcShowParams showParams = new AlibcShowParams(OpenType.Native, false);
复制代码
第四个重要的参数是AlibcTaokeParams, 淘宝联盟后台的订单匹配就是通过PID来识别的



上图是pid的具体位置



上图是pid的具体含义, 这个解释能让你更好的理解为什么pid这么重要

AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams();
alibcTaokeParams.adzoneid = ConstBc.MALL_AD_ZONE_ID; //pub平台获取
alibcTaokeParams.pid = ConstBc.MALL_PID;
alibcTaokeParams.subPid = ConstBc.MALL_SUB_PID;
alibcTaokeParams.extraParams = new HashMap<>();
alibcTaokeParams.extraParams.put("taokeAppkey", ConstBc.APP_TAOKE_KEY); //pub平台获取Appkey
复制代码

adzoneid就是pid的最后一段,taokeappkey在阿里百川app控制台就能获取

第五个参数我不知道具体用处, 不过基本都是这么填的
Map<String, String> exParams = new HashMap<>();
exParams.put(AlibcConstants.ISV_CODE, "appisvcode");
复制代码

上面是如何跳转,让用户购物后能够返佣

下面说一下细节需求

比如为了提升体验, 我们只在用户点击详情时才跳转手淘,并将刚才的参数传过去, 之前的所有淘宝相关的页面都用的webview, 所以我们需要重载webview.setWebViewClient(mWebviewclient)的mwebviewclient;

mWebview = new WebViewClient() {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //当检测到详情页的url时跳转手淘,并返回true终止webview的跳转
        if(){
            AlibcTrade.show()
            return true
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
};
复制代码

刚开始我是通过AlibcPage跳转的, 但是我们app首页有一个足迹导航栏,在淘宝授权后可以直接跳转到自己的足迹Web页面, 但是从足迹跳转web的时候并没有传pid, 明明设置了参数的, 后来改成提取详情页url里面的id, 然后通过AlibcDetailPage来跳转就可以了, 我也不明白原因


这是我们首页的导航按钮, 下面一排需要淘宝授权才能跳转,

if (!AlibcLogin.getInstance().isLogin()) {
     AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
         @Override
         public void onSuccess(int i) {
             callBack.success();
         }

         @Override
         public void onFailure(int i, String s) {
             callBack.fail();
         }
     });
    } else {
        callBack.success();
    }
 }
复制代码

通过AlibcTrade.show()方法吊起手淘,参数也传输正确, 用户购买成功之后, 需要及时去拉取用户的购物订单传给我们自己的后台, 然后我们自己的后台去淘宝联盟拉取属于我们平台推广的订单, 然后再匹配到某个用户, 在用户的订单列表页显示出来

int mPage = 1;
 //说明回来前已经跳到淘宝,就要拉去pc的订单页;
 try {
     String url = "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction";
     byte[] bytes = ("pageNum=" + mPage + "&pageSize=15&prePageNo=" + (mPage - 1)).getBytes();
     connection = (HttpsURLConnection) new URL(url + "&event_submit_do_query=1&_input_charset=utf8").openConnection();
     connection.setRequestMethod("POST");
     connection.setDoOutput(true);
     connection.setInstanceFollowRedirects(false);
     connection.setUseCaches(false);
     connection.addRequestProperty("x-requested-with", "XMLHttpRequest");
     connection.addRequestProperty("Accept", "text/html,application/json, text/javascript, */*; q=0.01");
     connection.addRequestProperty("Accept-Encoding", "gzip, deflate");
     connection.addRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ms;q=0.2");
     connection.addRequestProperty("Referer", "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm");
     connection.addRequestProperty("Cookie", CookieManager.getInstance().getCookie(url));
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
     connection.setRequestProperty("Content-Length", Integer.toString(bytes.length));
     connection.getOutputStream().write(bytes);

     connection.connect();
     String content = read(connection);
} catch (Exception e) {
    
}
复制代码

上面是去淘宝的后台拉取用户的订单, 这段代码是copy的兄弟公司, 是否只能这样传, 是否每一个参数都得这样, 我都不知道, 我们两个人完成整个返佣功能工期只有一周, 很多东西都来不及验证, 这篇文章几乎也是记录一下

这里还有一个细节问题


后台是从淘宝联盟报表这里频繁的下载数据,然后匹配用户的返佣订单, 这里下载下来的是一个excel表格, 里面包含了各种信息, 其中有一个来源id, 后台通过excel的这一项来判断是否是我们上传的, 防止其他人恶意刷接口, 但是我们下载的报表一直没有来源id, 说实话, 这种问题真的莫名其妙, 各种分析查找, 最后换一个pid就好了[捂脸], 我也不知道为什么