2015-07-05 29 views
1

我试图连接到我的条纹支付测试帐户与德尔福。在delphi执行一个卷曲代码连接到条纹支付

的连接API是在这里: Stripe connect API 卷曲例如:

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

我试着用印TIdHTTP组件与TIdSSLIOHandlerSocketOpenSSL 和呼叫后用的TStringList或TIdMultipartFormDataStream作为参数 但我收到始终响应:401 - 未经授权

这里我的代码:

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; 

任何帮助或建议将非常感激。 谢谢, 彼得

回答

1

您不能使用表单域来传输API密钥。相反,请设置Request.Username属性。密码为空,所以Request.Passwort未使用。从链接page你的API文档:

身份验证的API通过HTTP基本认证发生。提供您的API 密钥作为基本身份验证用户名。您不需要提供密码。

这个例子与印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. 

注意:您还可以把用户名/密码的网址:

HTTP.Request.BasicAuthentication := True; 
try 
    WriteLn(HTTP.Get('https://sk_test_CpkBxhx9gcmNYYQTZIXU43Bv:@api.stripe.com/v1/charges')); 
+0

如果您在URL中输入用户名/密码,则“TIdHTTP”将在准备传输请求之前解析出它们并将其放入“请求”属性中。 –