Cmd-Dwarf
view release on metacpan or search on metacpan
examples/helloworld/app/lib/Dwarf/Module/SocialMedia/Rakuten.pm view on Meta::CPAN
package Dwarf::Module::SocialMedia::Rakuten;
use Dwarf::Pragma;
use parent 'Dwarf::Module';
use Dwarf::HTTP::Async;
use HTTP::Request::Common ();
use JSON;
use LWP::UserAgent;
use MIME::Base64 qw/decode_base64 encode_base64url/;
use Dwarf::Util qw/safe_decode_json encode_utf8/;
use Digest::SHA qw/hmac_sha256_base64/;
use URI::Escape;
use Dwarf::Accessor qw/
ua urls
key secret
access_token
user_id name profile_image
on_error
/;
sub init {
my $self = shift;
$self->{ua} ||= LWP::UserAgent->new;
$self->{urls} ||= {
api => 'https://app.rakuten.co.jp/engine/api/MemberInformation/GetOpenIdUserInfo/20160715',
access_token => 'https://app.rakuten.co.jp/engine/idtoken',
};
$self->{on_error} ||= sub { die @_ };
}
sub show_user {
my $self = shift;
die 'access token must be specified.' unless defined $self->access_token;
my $params = {};
$params->{access_token} = $self->access_token;
my $uri = URI->new($self->urls->{api});
$uri->query_form(%$params);
my $res = $self->ua->post($uri);
my $content = eval { safe_decode_json(encode_utf8 $res->decoded_content) };
if ($@) {
warn "Couldn't decode JSON: $@";
$content = $res->decoded_content;
}
return $content;
}
sub request_access_token {
my ($self, %params) = @_;
die 'key must be specified.' unless defined $self->key;
die 'secret must be specified.' unless defined $self->secret;
die "redirect_uri must be specified." unless defined $params{redirect_uri};
die "code must be specified." unless defined $params{code};
$params{grant_type} = "authorization_code";
$params{client_id} ||= $self->key;
( run in 0.640 second using v1.01-cache-2.11-cpan-d8267643d1d )