最近接了個需求,是給公司作個用於手機淘寶的小頁面,用到了手淘的幾個接口。
在閱讀文檔時,發現手淘的JSSDK文檔頗有問題,和實際用起來差別很大,坑的我意識模糊。
就想寫篇小筆記,拋磚引玉一下,給後來者有個小借鑑。vue
手淘JSSDK文檔ios
我是用vue-cli直接搭的項目,基本都是默認選項,部分代碼基於es6語法。es6
<script src="//g.alicdn.com/tmapp/tida2/2.2.16/tida.js?appkey=應用的前臺appkey"></script>
注:EWS環境必須手動引用Tida!同時每一個頁面上的head裏面加入 <meta name="spm-id" content="a1z51.互動應用前臺appkey"/>開啓數據統計功能複製代碼
官方文檔說得很清楚,調用JSSDK是要有前提的,必須是在手淘或者貓客App和*.ews.m.jaeapp.com域名下,其實在天貓手機端也是能夠調用的。vue-cli
Tida.ready({
// interactId:"", // 互動實列ID type string 若無抽獎模塊,此參數無須傳入。給錯誤的實例ID會走錯誤流程
// module: [] // 應用所須要的模塊。非必選,默認加載全部模塊。支持的模塊見註釋。
// sellerNick:"" // 商家名稱
// shopId:123 // 店鋪ID 從url中取 可選
}, function(){
// TODO
})複製代碼
全部的接口調用前必須首先調用ready方法進行必要的初始化工做。bash
這裏若是你沒用到一些須要受權的接口,所有參數不填也能夠,建議在app.vue裏create鉤子直接調用。app
/**
* 混淆nick
*
* @memberOf Tida
* @name mixNick
* @function
*
* @param {object} options 入參
* @param {number} options.sellerNick 賣家暱稱,微淘應用必填,互動應用選填
* @param {function} callback 回調函數
*
*/
var options = {
sellerNick: "茵曼旗艦店"
};
Tida.mixNick(options, function (data) {
alert(JSON.stringify(data))
});複製代碼
獲取混淆nick就不用多說了,後臺不少操做都須要這個nick。
額外提示一句,引入tida.js的時候若是Appkey填錯,nick是沒法獲取的,這個接口是須要權限的,我當時調用一直失敗,回調的報錯也看不懂,後來換了Appkey才能調通。函數
Tida.itemFavor({
itemId, // 商品ID 注意這裏只能用string
action: 'add'
}, data => {
if (data) {
if (data.errorCode === 0 || data.errorCode === '0') {
Tida.toast('收藏成功!')
} else if (data.errorCode === 3002 || data.errorCode === '3002' || data.errorCode === 'ALREADY_COLLECTION'){
Tida.toast('您已收藏過此寶貝!')
} else {
Tida.toast('收藏寶貝失敗了哦!')
}
}
})複製代碼
商品的收藏回調文檔沒說清楚,這是我借鑑其餘家的寫法修改的。ui
Tida.follow({
pubAccountId:'86428989' // 店鋪或達人ID,
sellerId:'86428989' // 賣家id,
}, function(data){
});複製代碼
這個接口在手淘的ios端老版本會出現沒法調用的狀況,安卓平臺也有問題,總之最好別用。url
Tida.shopFavor({
shopId:'107922698' // 賣家店鋪id,
sellerId:'1917047079' // 賣家id,
}, function(data){
console.log(data);
});複製代碼
這個接口也有問題,不推薦用。spa
Tida.social({
sellerId: Tida.getParam('sellerId')||'2335371108',
action: "follow"
}, function (e) {
alert(JSON.stringify(e));
});複製代碼
這個接口是官方例子裏的寫法,我原本覺得是沒問題的,沒想到........
在部分手淘的ios端調用失敗,失敗的緣由沒看出來,感受和ios版本無關。
Tida.follow2({
sellerId
}, data => {
if ((typeof (data.success) === 'undefined' && data.errorCode === 0) || data.success === true || data.success === 'true') {
console.log('執行收藏店鋪回調')
} else {
console.log('收藏失敗')
}
})複製代碼
這是最穩定的接口了,可是沒直接寫在文檔裏,我是翻別人的代碼抄下來的(滑稽)。
我當時弄出收藏功能後,已是生無可戀了。