woocommerce API是否有替代身份验证?

时间:2019-02-19 05:29:09

标签: wordpress rest delphi woocommerce woocommerce-rest-api

要让我的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;

1 个答案:

答案 0 :(得分:0)

您是否尝试过将Delphi的“ REST调试器”用于基本身份验证?

链接(https://github.com/woocommerce/woocommerce/wiki/Getting-started-with-the-REST-API)包含一个“入门”。也许会对您有帮助。也许有连接问题,例如波纹管。

  

服务器不支持POST / DELETE / PUT   理想情况下,应该将服务器配置为接受这些类型的API请求,但如果没有,则可以使用_method属性。

可以肯定,您正在使用其他方法进行连接。也许您可以使用“基本身份验证”代替。