要让我的Delphi应用程序查看Woocommerce的Api,我面临着巨大的挑战。 我得到了GET,我得到了POST,但现在我被困在其余的PUT中。 我以为可以使用与POST相同的功能来执行PUT,但是我得到了不允许更改的消息。什么是没有意义的,我可以创造但不能改变?
放下,我将列出执行POST的方式,并列出第二个代码,在这些代码中我做了一些更改以尝试创建PUT。
记住,我已经尝试过通过将方法更改为rmPUT和PUT代码来处理POST代码,我得到的消息是签名无效。
如果有人知道如何帮助我,如果没有,我的最后一个选择是找到一种方法来更改Woocommerce API的身份验证类型,我不知道这是否可能...
//My Procedure for POST
procedure TForm1.Criar;
var
s,r: String;
begin
RESTRequest.ResetToDefaults;
RESTClient.ResetToDefaults;
RESTResponse.ResetToDefaults;
RESTResponseDSAdapter.ResetToDefaults;
WooAuth.ResetToDefaults;
WooAuth.ConsumerKey := edtConsumerKey.Text;
WooAuth.ConsumerSecret := edtConsumerSecret.Text;
RESTClient.BaseURL := edtBaseURL.Text;
RESTRequest.Method := TRESTRequestMethod.rmPOST;
RESTRequest.Resource := '/products/categories';
RESTRequest.AddParameter('name', edtNomeGrupo.Text);
RESTRequest.AddParameter('description', edtDescGrupo.Text);
RESTRequest.AddParameter('oauth_consumer_key', edtConsumerKey.Text);
RESTRequest.AddParameter('oauth_signature_method', WooAuth.SignatureMethod);
RESTRequest.AddParameter('oauth_nonce', WooAuth.nonce);
RESTRequest.AddParameter('oauth_timestamp', WooAuth.timeStamp.DeQuotedString);
RESTRequest.AddParameter('oauth_version', WooAuth.Version);
s := WooAuth.SigningClass.BuildSignature(RESTRequest, WooAuth);
RESTRequest.AddParameter('oauth_signature', s);
end;
//My Procedure for PUT
procedure TForm1.Atualizar;
var
s,r: String;
begin
RESTRequest.ResetToDefaults;
RESTClient.ResetToDefaults;
RESTResponse.ResetToDefaults;
RESTResponseDSAdapter.ResetToDefaults;
WooAuth.ResetToDefaults;
WooAuth.ConsumerKey := edtConsumerKey.Text;
WooAuth.ConsumerSecret := edtConsumerSecret.Text;
RESTClient.BaseURL := edtBaseURL.Text;
RESTRequest.Method := TRESTRequestMethod.rmPUT;
RESTRequest.Resource := '/products/categories';
RESTRequest.ResourceSuffix := '16?name={name}&description={description}&oauth_consumer_key={oauth_consumer_key}&oauth_signature_method={oauth_signature_method}&oauth_nonce={oauth_nonce}&oauth_timestamp={oauth_timestamp}&oauth_version={oauth_version}&oauth_signature={oauth_signature}';
RESTRequest.AcceptEncoding := 'identity';
RESTClient.AcceptEncoding := 'identity';
RESTRequest.AddParameter('name', edtNomeGrupo.Text, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('description', edtDescGrupo.Text, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('oauth_consumer_key', edtConsumerKey.Text, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('oauth_signature_method', WooAuth.SignatureMethod, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('oauth_nonce', WooAuth.nonce, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('oauth_timestamp', WooAuth.timeStamp.DeQuotedString, TRESTRequestParameterKind.pkURLSEGMENT);
RESTRequest.AddParameter('oauth_version', WooAuth.Version, TRESTRequestParameterKind.pkURLSEGMENT);
s := WooAuth.SigningClass.BuildSignature(RESTRequest, WooAuth);
RESTRequest.AddParameter('oauth_signature', s, TRESTRequestParameterKind.pkURLSEGMENT);
end;
答案 0 :(得分:0)
您是否尝试过将Delphi的“ REST调试器”用于基本身份验证?
链接(https://github.com/woocommerce/woocommerce/wiki/Getting-started-with-the-REST-API)包含一个“入门”。也许会对您有帮助。也许有连接问题,例如波纹管。
服务器不支持POST / DELETE / PUT 理想情况下,应该将服务器配置为接受这些类型的API请求,但如果没有,则可以使用_method属性。
可以肯定,您正在使用其他方法进行连接。也许您可以使用“基本身份验证”代替。