私はカールで私の深さから外れています。PayMill を自分のサイト (Perl で記述) に統合したいと考えています。Paymill 用の Perl ライブラリはまだないので、curl 経由で接続する必要があります。
フロントエンドの 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::Curl::Easy、Net:Curl::Easy、および LWP::Curl を見てきましたが、これらのメソッドのドキュメントには、上記のクエリを作成する方法が明らかではありません。
上記のように、単純に 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;
ただし、これは Access Denied エラーで失敗します。これは、私が Curl をめちゃくちゃにしているために Paymill がキーを見つけられないためだと思います (-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
}