DELPHI7 调用联盟API
目前为止,软件能收能发能找券,个人用配合大淘客已经没什么问题了。
但是,别人家的软件都有代理功能,我没有,这不存在。
我一定要搞出分佣功能。分佣的核心就是PID,你不可能让你的下级自己去申请PID,这样还要你干什么?
于是问大淘客官方,回答是只能二个PID,也就是说,靠淘客站你不可能搞出分佣系统来,淘客站对我们的唯一利用价值就是优惠券ID,也就是activityid,如果能获取这个ID,我要还什么淘客站?我自己就是个淘客站,但现在暂时不用管,先把PID分出来再说。
PID决定佣金的归属,大淘客只能生成二个PID的连接,而且每天的淘口令个人只能调用300次,至于那个什么助手,说实话我到今天都不知道有什么卵用,可能是给小白用的吧。
要组建一个二合一的优惠券网址,需要三个参数:商品ID,优惠券ID,淘客PID,有了这三个,你就能发布了,但这没有淘口令,而且我还需要短网址,就是sclick.taobao.com/abcdefg 这样的,现在,开始研究妈妈API吧。以前有大淘客帮助转换,现在要靠自己了。
短网址被妈妈称为物料传播,淘口令还是淘口令,当你有一个网站,可以到妈妈后台去申请一个联盟合作网站,通过后,就能申请到淘宝客基础API和淘口令API了。此时,你已经成为阿里开放平台的一个开发者了。
API详情API一天有100W次调用量,对个人来说,足够了,代理增加,窗口增加,100W也是够的,除非你弄个像大淘客一样的网站,很多人在你上面转来转去才可能不够用。
事实上是我想多了,淘口令是要花钱的,免费是一月10万个.这是后话了.
我搜索了一下API调用代码,没一个是delphi的,官方下载的SDK也没有,而且异常庞杂,没有简便易行的,我决定自己写。
首先就要搞定sign这个算法,看他的介绍就是MD5摘要,实际上就是MD5摘要,然后用他指定的那种很不人道非常复杂的拼接方法进行组装,稍有不慎就会返回签名错误。
官方介绍如下:
对所有API请求参数(包括公共参数和业务参数,但除去sign参数和byte[]类型的参数),根据参数名称的ASCII码表的顺序排序。如:foo=1, bar=2, foo_bar=3, foobar=4排序后的顺序是bar=2, foo=1, foo_bar=3, foobar=4。
将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar2foo1foo_bar3foobar4。
把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要。如果使用MD5算法,则需要在拼装的字符串前后加上app的secret后,再进行摘要,如:md5(secret+bar2foo1foo_bar3foobar4+secret);如果使用HMAC_MD5算法,则需要用app的secret初始化摘要算法后,再进行摘要,如:hmac_md5(bar2foo1foo_bar3foobar4)。
将摘要得到的字节流结果使用十六进制表示,如:hex(“helloworld”.getBytes(“utf-8”)) = “68656C6C6F776F726C64”
好在他有一个API测试工具,我在测试工具中提交参数,看他拼接后的参数,看他的返回值,然后,我用DELPHI组装同样的参数,只要和工具中生成的一样,就会成功了。经过数次测试,终于成功,代码放出如下:
这个sign函数异常简单
function Sign(param: string): string;
begin
Result := GetStrMD5(Appsecret + AnsiToUtf8(param) + Appsecret);
end;
下面是拼接的核心代码
param := TStringList.Create;
param.Sorted := True; //自动按ascii排序
param.Add('app_key='+ appkey);
param.Add('method=taobao.wireless.share.tpwd.create');
param.Add('sign_method=md5');
timestamp := FormatDateTime('yyyy-MM-dd hh:mm:ss', Now);
param.Add('timestamp=' + AnsiToUtf8(timestamp));
param.Add('format=json');
param.Add('v=2.0');
param.Add('tpwd_param='+ GenPwdIsvParamDto);
for i := 0 to param.Count - 1 do begin //清除=符号,拼接公共参数
if Pos('tpwd_param',param.Strings[i]) > 0 then
s := s + param.Strings[i]
else
s := s + StringReplace(param.Strings[i],'=','',[rfReplaceAll]); //拼接私有参数json
end;
s := StringReplace(s,'tpwd_param=','tpwd_param',[rfReplaceAll]);
// mmo1.Lines.Add('参数' + s);
s2 := Sign(s); //进行签名
后面的就用idhttp进行一个GET操作就行了,返回值是个json,直接取出来就是淘口令了,正宗官方提供,相当牛B。
物料传播的获取也是一样的,so easy!
这样一来,就可以获取不同PID下的淘口令和短网址了,分群PID目标成功实现。
阿里云的服务器相当牛B,测试一秒能获取接近10个淘口令,转换速度相当之快。