淘口令的實現機制


淘口令的實現機制

一、前言

 

基於微信分享做裂變的童鞋應該知道,分享域名很容易被封掉,導致拉新數據降低;再加上最近微信對於裂變,變態級別的嚴格管理,導致各大電商巨頭哀鴻遍野,拉新數據慘不忍睹。所謂道高一尺,魔高一丈,不造馬雲爸爸是不是提前預知到微信分享的不靠譜,細心的小伙伴可以發現,淘寶很少會通過微信的API去做裂變分享,而是采用一種新的產品“淘口令”來應對微信帶來的風險;

在微信危機下,於是各公司開始尋求突破,把目光投向了 “淘口令”,以期突破微信的重重封鎖;

 

二、原理及機制

 

“淘口令”大體原理其實並不怎么復雜,起實現方式,不外乎是,用戶復制淘口令的文本, 打開APP的時候,APP會自動讀取剪貼板中的數據,然后截取對應的口令,上傳到服務端,然后解析出來相應的信息;

 

      這里便實際貼出一個淘口令,以便分析:  

【拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥MxwAYuKMXH8¥后咑閞👉淘灬寳👈

可以看到所有的淘口令,都會有一個 特殊字符 【¥ +(數字或大小寫字符)+ ¥】,這里¥就是口令標識符, 而客戶端,就是通過截取口令兩邊的特殊字符來得到口令,然后上傳到服務端來解析,並進行相應的操作(彈窗或跳轉);

 

我們都知道,想要一大串長的字符串,縮短到8位左右的字符串的話,不外乎兩種方式:

  • 鍵值對方式(key => value)
  • 進制轉換方式(低進制轉為高進制)

2.1 鍵值對方式

 

假設 我們有一個分享的口令信息:

10@user_id=654321&goods_id=123456@maidian

第一@前面是業務編號(10),第二個@(maidian)后面的字符串是埋點信息,中間的是分享人及分享的商品信息;如果直接分享的話,按照淘口令的形式為:

【拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥10@user_id=654321&goods_id=123456@maidian¥后咑閞👉淘灬寳👈

可以看到,信息被透露出去,且太長一串,也不夠友好;

 

鍵值對方式很好理解,就是通過key/value,將口令和口令信息進行一一對應的方式來進行實現,但是這樣有很大的局限性,首先鍵值對的話,要保證口令的位數不能太多,另外不能位數差異太大,不能一個口令是3位的,另外一個口令是8位;口令太多的話,整個分享文案,一眼望去全是數字,營銷文案就沒心思看下去了;

                           

                 隨機數字                                  數字對應的信息

如果是利用純數字存儲分享信息的話:

拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥101¥后咑閞👉淘灬寳👈


拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥10123230000¥后咑閞👉淘灬寳👈

兩個口令,長短不一,保存的信息有限,如果想包含更多信息,需要加大位數;

 

2.2 進制轉換的方式

 

【拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥10@user_id=654321&goods_id=123456@maidian¥后咑閞👉淘灬寳👈

依舊是該口令,因為該口令包含特殊字符,想使用進制轉換的方式卻不那么理想,而進制轉換的最理想的方式卻是將10進制的數字轉為62進制,這樣才能顯著的降低位數:

表一:進制范圍表

進制

范圍

10

0-9

26

小寫字母

32

不含ILOU的小寫字符 + 10數字

36

數字 + 小寫字符

52

大寫字母 + 小寫字母

58

不包含 0OlI 字符

62

數字 + 小寫字母 + 大寫字母

 表二:10進制轉為62進制結果

10進制

轉為62進制的結果

1234567890

1ly7vk

9999999999

aUKYOz

10000000000

aUKYOA

123456789

PNFQ

 

從上表可以看出,在10進制轉為62進制,縮短的效果還是比較明顯的,從原來的10位字符,縮短到6個字符串,且比較穩定,10億-到100億的范圍都是6位字符,還是比較短的;

 

下面將兩者的進行結合進行淘口令生成實戰;

 

 

三、淘口令實戰

 

上面介紹的兩個方式【鍵值對】和【進制轉換】的方式,都有或這或那的局限性,可能有童鞋就想,能否兩者結合起來,下面來進行實際操作下;

依舊假設我們有以下的口令信息:

10@user_id=654321&goods_id=123456@maidian

第一步:獲取一個隨機10億到百億之間的隨機數字:10000000000

 

第二步:將數字轉為62進制,結果為:aUKYOA

 

第三步:將字符串和口令信息進行匹配緩存(例如以鍵值對的形式存到Redis緩存中):aUKYOA => 10@user_id=654321&goods_id=123456@maidian


第四步:拼接,得到淘口令:

 

拜托幫我點一下!雙11狂歡節非常贊!我有一張【金稻旗艦店】20元限量優惠券送給你,快來看看!】,復zんíゞ整句話¥aUKYOA¥后咑閞👉淘灬寳👈

 

  • 解析口令

(1)從剪貼板中截取口令:aUKYOA

 

(2)根據口令從緩存(如redis)中查找鍵值對關聯信息:

 

10@user_id=654321&goods_id=123456@maidian

 

(3) 做一些業務處理(跳轉或記錄分享數據)

 

注意:

這里其實還有一個小問題,那就是取數字的方式,如果是隨機取數字的話,可能會導致重復,雖然在100億到1000億之前重復的概率比較小,但是還是會有重復的可能,所以生成的數據,需要去判斷一下重復;在這里,我推薦使用發號器,設置一個初始值然后遞增的發放數據,這樣就能保證生成的數據,是全局唯一的;

(轉載自安sir,原文地址:https://www.yuque.com/ansir/egwww1/itupzp)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM