#!/usr/bin/perl use LWP::UserAgent; use JSON::Create 'create_json'; use JSON; use Digest::SHA qw(hmac_sha256_base64 hmac_sha256_hex hmac_sha256); use MIME::Base64; use POSIX qw(strftime); my $Endpoint = 'https://api.coinbase.com'; my $api_key = 'KEY'; my $secret = 'SCRETE'; my %json = ( type => 'send', to => 'ADDY', amount => '1.00', amount => 'USD' ); my $body = create_json (\%json); my $timestamp = strftime '%Y-%m-%dT%H:%M:%SZ', gmtime(); my $request_method = "POST"; my $request_path = '/v2/accounts/account:id/transactions'; my $message = $timestamp . $request_method . $request_path . $body; my $decoded_secret = decode_base64($secret); my $signature_b64 = encode_base64( hmac_sha256($message, $decoded_secret) ); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 }, ); $ua->agent("MyApp/0.1"); my $res = $ua->post( "$Endpoint$request_path", 'CB-ACCESS-SIGN' => $signature_b64, 'CB-ACCESS-TIMESTAMP' => $timestamp, 'CB-ACCESS-KEY' => $api_key, 'CB-ACCESS-VERSION' => '2019-11-15', 'Content-Type' => 'application/json' ); if ($res->is_success) { print $res->decoded_content; } else { print "request failed."; print "status:", $res->decoded_content; }