我正在研究HMRC Tutorial /hello/user
的“ 2.用OAuth 2.0授权代码交换访问令牌”。
我设法获得了授权代码,但是在运行以下代码时:
{$REGION '1. Get the the Authorisation Code'}
wv := Tfrm_OAuthWebForm.Create(self);
try
wv.OnAfterRedirect := OAuth2Authenticator1_Hello_User_Redirect;
wv.ShowModalWithURL(LURL);
finally
wv.Release;
end;
{$ENDREGION '1. Get the the Authorisation Code'}
1.HM税收与海关。有权代表您与HMRC进行互动。单击继续。
2.HM税收和海关。登录。用户名和密码。登录。
3.单击“授予访问权限”。
4.在OAuth2Authenticator1_Hello_User_Redirect Event
上的代码中发布了授权代码。
5.显示我的重定向页面。
6.关闭Tfrm_OAuthWebForm
。
已执行以下代码:
RESTClient1.Authenticator := OAuth2Authenticator1_Hello_User;
RESTClient1.BaseURL := 'https://test-api.service.hmrc.gov.uk/oauth/token';
RESTRequest1.Method := TRESTRequestMethod.rmGET;
RESTRequest1.Params.AddItem('grant_type', 'authorization_code', TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Params.AddItem('client_id', eHello_User_Client_ID.Text, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Params.AddItem('client_secret', eHello_User_Client_Secret.Text, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Params.AddItem('redirect_uri', eHello_User_Redirect.Text, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Params.AddItem('authorization_code', eHello_User_Authorization_Code.Text, TRESTRequestParameterKind.pkGETorPOST);
RESTRequest1.Execute;
调用RESTRequest1.Execute
时引发异常。
procedure TfrmMain.RESTRequest1HTTPProtocolError(Sender: TCustomRESTRequest);
begin
// show error
Add_To_Memo(Sender.Response.StatusText, False{Clear_Memo});
Add_To_Memo(Sender.Response.Content, False{Clear_Memo});
// Sender.Response.Content, = <!--[if lt IE 9]><html class="no-js lte-ie8"
end;
Sender.Response.StatusText
是
未找到
Sender.Response.Content
是
HMRC说
如果由于您的应用程序出现客户端错误而未能成功,则在400到499之间的范围内
我已经检查并重新检查了该应用程序,但是在传递授权代码以获取访问和刷新令牌时,可以看到使代码混乱的原因。
使用相同的OAuth2Authenticator I:
1.右键单击OAuth2Authenticator。
2.选择配置。
3.按授权。
4.输入用户名和密码。
5.单击“授予访问权限”。
6.我得到了没有错误的访问令牌和刷新令牌。
有什么主意我的代码中缺少的内容吗?
希望如此。
TIA