当先前的设置完成(参见这里)后,应用程序可以将用户重定向到他们在eBay的登录页面,以此启动他们的用户Token生成过程。
方案一:客户端/桌面应用
如果你的应用没有web组件,或者你并不想做一个AcceptURL或RejectURL页面,这是你获取用户Token的***方法。此方案中:
1.应用程序调用GetSessionID 并获取一个session ID (SessionID)
2.应用程序构造一个包含SessionID 的eBay登录URL,编码URL,将用户转至登录和许可页面。在此页面上用户可以许可应用程序对用户Token的创建请求。参见为用户登录准备URL。
3.用户被转至一个eBay页面,在此页面上他们可以确认刚才的行为(他们被感谢并告知:“您可以关闭页面了”)。
4.然后应用程序会调用FetchToken以获取用户Token,使用与先前的登录URL中包含的同样的SessionID。在FetchToken中,不需将SessionID用URL编码。参见 通过FetchToken获取一个Token。
图6-1选项一:eBay用户登录流程如何结束;应用程序如何使用 FetchToken来获取用户Token

方案二:Web/服务器应用
大多数应用包含有Web组件,并且可以响应被重定向到你的MyAccount 页面上指定的URL。此节讨论的方案适用于可以处理从eBay重定向的应用。此方案中:
1. 用户启动一个许可流,同时应用程序调用GetSessionID,获取一个SessionID.
2. 应用程序构造一个包含SessionID 的eBay登录URL,编码URL,将用户转至登录和许可页面。在此页面上用户可以许可应用程序对用户Token的创建请求。
在一个web应用中,通常的做法是使用包含一个Submit按钮的HTML表单,例如:
<INPUT TYPE="submit" NAME=AUTHORIZE VALUE="Launch Auth & Auth" "
. "onclick="window.open('https://signin.ebay.com/ws/
eBayISAPI.dll?SignIn&RuName=$RuName&SessID=$SessionID');"> "
此处$RuName是指你应用中的RuName,$SessionID是通过调用GetSessionID获取的session ID, SessionID值存于session变量中。
3. eBay会将用户重定向回到应用程序的AcceptURL或RejectURL页面。更多信息请查看接受重定向URL的格式。
4. 然后应用程序会调用FetchToken以获取用户Token,使用与先前的登录URL中包含的同样的SessionID。在FetchToken中,不要将SessionID用URL编码。eBay通过ruparams向这个URL追加用户Token以及其他信息(如有关此Token到期时间的值或是关于此应用程序在往返程发送的任何信息)。参见通过FetchToken获取一个Token。
图6-2 方案二:登录流将用户返回至Web应用;应用程序如何使用FetchToken来检索Token

为了生成一个用户Token,应用程序必须使用下列URL来重定向一个用户到eBay的登录页面:
此URL必须包含&SessID=SessionID,可能包含&ruparams=ruparams.
-
SessID是用户和应用的登录URL中预期的标识符。它的值就是session ID。SessID在登录URL中必须被编码为URL。
-
ruparams 可以是任意你想要通过eBay的重定向传回应用程序的数据(例如,应用程序可以通过数据库使用的一个标识符,查找来确定用户以及与此用户相关的返回Token);eBay在任何情况下都不会这么做。
有了这个参数,你可以捕捉状态——你可以传递关于用户的细节,用户刚登录的网页的细节,诸如此类。自从eBay在将用户重定向回你的AcceptURL 和RejectURL页面时附加了这个ruparams信息,你可以分析这些信息并根据特定的用户和用例需要任意重定向。
这一通过ruparams传递的特定应用程序的数据可能包含零条或多条信息,任一信息均有变量名及URL编码值的格式。当eBay重定向至应用程序的Accept URL,ruparamaa的值被URL编码成 name/value的成对式。
例如,如果应用程序发送这个:
...&ruparams=VarA%3DB12309%26VarB%3DABC123
eBay在URL中返回:
...&VarA=B12309&VarB=ABC123
终的web页面看起来很像标准的eBay登录页面。同时它也包含了应用名和一些特殊的Token相关的文本。
对于Sandbox,等价的URL如下:
注意:应用程序不允许自行构建eBay登录页面。不允许使用框架进行重定向至登录页面。
假设用户在eBay登录页面成功登录并接受了应用的表示项,eBay将会将此用户重定向至应用的Accept URL。此URL由应用程序的拥有者在注册应用时提供,并且在eBay上维持档案,其目的在于Token生产过程中的重定向。默认情况下,应用程序可以替用户从Accept URL中取回Token。虽然应用程序可以指定在应用程序的身份验证数据输入并以此自动取回Token。
如果用户不接受同意书,eBay重定向至应用程序的Reject URL。这样做的时候,eBay会向Reject URL追加ruparams。这会将用于连接失败用户身份验证和正确用户的标识符发回给应用程序。应用程序应该给用户展示一个有意义的error或者其他报错信息,报错信息应表明,应用程序将无法通过此用户名调用API(也就是说,用户实际上无法使用此应用程序)。
任何应用程序都可以使用FetchToken来获取用户的Token。对于不基于Web(或重定向至AcceptURL不适用)的应用,这是***获取Token的方法。在FetchToken中有对FetchToken的详细介绍。
当构造一个将用户送至eBay登录页面以获取新的Token的URL时,应用程序将session ID使用URL编码并添加。session ID是一个参数,它的值由eBay为了用户的session***生成,并由应用程序通过GetSessionID获取。在GetSessionID有对GetSessionID的详细介绍。
session ID的存在可触发eBay生成一个用户Token并将其与session ID存在一起。eBay会将它们存储48小时,使应用程序在将用户导向登录和许可页面后,可以在一个合理的时间内通过FetchToken检索用户Token。如果这是你的应用程序***次运用此方法为用户获取Token,你应该等等5-10秒后再调用FetchToken,不然应用程序就会立即使用FetchToken获取Token。
下面的示例显示了一个定制RuName值和SessID值。注意SessID是经过URL编码的。这是因为有些通过GetSessionID返回的SessionID包含非法字符,无法被登录URL接受。
对于Sandbox,等价的URL如下:
下列SOAP API例子显示了一个SOAP头里包含请求证书的FetchToken请求:
例6-1 自动取回一个Token
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ebl="urn:ebay:apis:eBLBaseComponents">
<soap:Header>
<ebl:RequesterCredentials soapenv:mustUnderstand="0">
<Credentials>
<AppId>MyAppId</AppId>
<DevId>MyDevId</DevId>
<AuthCert>MyCertId</AuthCert>
</Credentials>
</ebl:RequesterCredentials>
</soap:Header>
<FetchTokenRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<SessionID>MySessionID</SessionID>
<Version>613</Version>
</FetchTokenRequest>
</soap:Envelope>
下列XML API例子显示了如何使用FetchToken请求:
<?xml version="1.0" encoding="utf-8"?>
<FetchTokenRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>613</Version>
<RequesterCredentials>
<DevId>MyDevID</DevId>
<AppId>MyAppID</AppId>
<AuthCert>MyAuthCert</AuthCert>
</RequesterCredentials>
<SessionID>MySessionID</SessionID>
</FetchTokenRequest>