我的卷曲超出了我的深度。我想将 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;
但是,由于访问被拒绝错误而失败,我认为这是因为 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
}