1

Delphi でストライプ支払いテスト アカウントに接続しようとしています。

接続 API は次のとおりです: Stripe connect API Curl の例:

curl https://api.stripe.com/v1/charges \
   -u sk_test_CpkBxhx9gcmNYYQTZIXU43Bv:

TIdSSLIOHandlerSocketOpenSSL で Indy TIdHTTP コンポーネントを使用し、パラメーターとして Tstringlist または TIdMultipartFormDataStream で post を呼び出してみましたが、常に応答を受け取ります: 401 - Unauthorized

ここに私のコード:

var   
   Data: TIdMultipartFormDataStream;
   https: TIdHTTP;
   ssl: TIdSSLIOHandlerSocketOpenSSL;

begin

https := TIdHTTP.Create(self);
ssl   := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
https.IOHandler := ssl;

https.Request.BasicAuthentication := True;

Data := TIdMultipartFormDataStream.Create;
//Data.AddFormField('api_key', 'sk_test_CpkBxhx9gcmNYYQTZIXU43Bv');
Data.AddFormField('apikey', 'sk_test_CpkBxhx9gcmNYYQTZIXU43Bv');
https.Post('https://api.stripe.com/v1/charges', Data);
Memo1.lines.Add( https.ResponseText );
Data.Free;
end;

どんな助けや提案も大歓迎です。ありがとう、ピーター

4

1 に答える 1

2

API キーの転送にフォーム フィールドを使用しないでください。代わりに、Request.Username プロパティを設定してください。パスワードは空なので、Request.Passwort は使用されません。リンクされたページの API ドキュメントから:

API への認証は、HTTP 基本認証を介して行われます。基本認証のユーザー名として API キーを指定します。パスワードを入力する必要はありません。

この例は、プログラム フォルダー内の Indy 10.6.2 および OpenSSL ライブラリで機能します。

program Project31229779;

{$APPTYPE CONSOLE}

uses
  IdHTTP, SysUtils;

var
  HTTP: TIdHTTP;
begin
  HTTP := TIdHTTP.Create;
  try
    HTTP.Request.BasicAuthentication := True;
    HTTP.Request.Username := 'sk_test_CpkBxhx9gcmNYYQTZIXU43Bv';
    try
      WriteLn(HTTP.Get('https://api.stripe.com/v1/charges'));
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
      end;
    end;
  finally
    HTTP.Free;
  end;
  ReadLn;
end.

注: URL にユーザー名/パスワードを入力することもできます。

HTTP.Request.BasicAuthentication := True;
try
  WriteLn(HTTP.Get('https://sk_test_CpkBxhx9gcmNYYQTZIXU43Bv:@api.stripe.com/v1/charges'));
于 2015-07-05T11:46:23.573 に答える