我出我的深度捲曲到PayMill。 我想將PayMill整合到我的網站(用Perl編寫)中。 Paymill還沒有Perl庫,所以我需要通過curl連接到它們。形成一個捲曲的請求在Perl
我已經完成了前端JS Paymill整合,並從PayMill收到支付令牌。
我現在需要通過從Paymill收到我的後端令牌並使用curl問PayMill完成交易,並收取用戶。 在這一點上,我卡住了。
進行交易時,PayMill文檔中說,我必須做到以下幾點:
curl https://api.paymill.de/v2/transactions \
-u b94a7550bd908877cbae5d3cf0dc4b74: \
-d "amount=4200" \
-d "currency=EUR" \
-d "token=098f6bcd4621d373cade4e832627b4f6" \
-d "description=Test Transaction"
我相信-u是Paymill密鑰雖然文檔並不清楚這裏來驗證我的要求。
我看了一下WWW ::捲曲::易,網:捲曲::簡單,LWP ::捲曲,但沒有對這些方法的文檔中使其明顯,我如何形成上面的查詢。
我已經試過(不真正認爲這是可行的),只是編碼如上所述在Perl的字符串;
my $request = '-u ' . $private_key . " ";
foreach my $key (keys %$params_in) {
$request .= '-d "' . lc($key) .'='.$params_in->{$key} . ' ';
}
然後傳遞$ request給我的curl嘗試,如下所示;
my $curl = WWW::Curl::Easy->new;
$curl->setopt(WWW::Curl::Easy::CURLOPT_HEADER(), 1);
$curl->setopt(WWW::Curl::Easy::CURLOPT_URL(), $paymill_server);
$curl->setopt(WWW::Curl::Easy::CURLOPT_POST(), 1);
$curl->setopt(WWW::Curl::Easy::CURLOPT_POSTFIELDS(), $request);
my $response;
$curl->setopt(WWW::Curl::Easy::CURLOPT_WRITEDATA(), \$response);
my $retcode = $curl->perform;
但是失敗,出現拒絕訪問錯誤,我以爲是因爲Paymill沒有找到我的鑰匙,因爲我搞亂了Curl(假設-u應該是SECRET_KEY)。
我覺得我缺少明顯的東西在這裏。
有人能指出我再怎麼做這個正確的方向? 謝謝
更新優秀的答案,謝謝大家的幫助,它現在工作。我最終選擇了Matthias的解決方案,最終完成交易的完整解決方案如下所示:
use LWP::UserAgent;
use MIME::Base64;
use JSON::XS;
my $ua = LWP::UserAgent->new;
$ua->default_header(Authorization => "Basic " . encode_base64(private_key));
my $response = $ua->post(https://api.paymill.de:443/v2/transactions , $params);
if ($response->is_success) {
my $obj = eval { decode_json $response->content } || {};
etc
}
我認爲你可以用[LWP](http://search.cpan.org/~gaas/libwww-perl-6.04/lib/LWP/UserAgent.pm)以及Curl來完成這個任務。我不習慣捲曲,所以你的代碼看起來很難閱讀。 '-u'選項用於向請求中添加憑證(如用戶/密碼)(請參閱http://curl.haxx.se/docs/manpage.html#-u)。 – simbabque
首先確保您可以通過命令行成功執行curl請求;只有然後嘗試將其集成到您的Perl代碼 – ysth