From d68fb87a42e7c52048bb733380101f4320c1b0d0 Mon Sep 17 00:00:00 2001 From: nyamanaka Date: Thu, 14 Nov 2024 16:34:11 +0900 Subject: [PATCH 1/4] add tds_finish, add three_d_secure_request --- lib/Net/Payjp.pm | 36 +++++++++++++++++++++++++ lib/Net/Payjp/ThreeDSecureRequest.pm | 34 +++++++++++++++++++++++ lib/Net/Payjp/Token.pm | 6 +++++ t/three_d_secure_request.t | 40 ++++++++++++++++++++++++++++ t/token.t | 9 +++++-- 5 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 lib/Net/Payjp/ThreeDSecureRequest.pm create mode 100644 t/three_d_secure_request.t diff --git a/lib/Net/Payjp.pm b/lib/Net/Payjp.pm index d3f177b..cbd677f 100644 --- a/lib/Net/Payjp.pm +++ b/lib/Net/Payjp.pm @@ -24,6 +24,7 @@ use Net::Payjp::Statement; use Net::Payjp::Balance; use Net::Payjp::Term; use Net::Payjp::Object; +use Net::Payjp::ThreeDSecureRequest; # ABSTRACT: API client for pay.jp @@ -489,6 +490,41 @@ sub transfer{ return Net::Payjp::Transfer->new(%$self); } +=head1 ThreeDSecureRequest Methods + +=head2 create + +Create a three_d_secure_request + +L + + $payjp->three_d_secure_request->create( + "resource_id" => "car_xxxx", + ); + +=head2 retrieve + +Retrieve a three_d_secure_request + +L + + $payjp->three_d_secure_request->retrieve('tdsr_xxxx'); + +=head2 all + +Returns the three_d_secure_request list + +L + +$res = $payjp->three_d_secure_request->all(limit => 2, offset => 1); + +=cut + +sub three_d_secure_request{ + my $self = shift; + return Net::Payjp::ThreeDSecureRequest->new(%$self); +} + =head1 Event Methods =head2 retrieve diff --git a/lib/Net/Payjp/ThreeDSecureRequest.pm b/lib/Net/Payjp/ThreeDSecureRequest.pm new file mode 100644 index 0000000..ecbb94d --- /dev/null +++ b/lib/Net/Payjp/ThreeDSecureRequest.pm @@ -0,0 +1,34 @@ +package Net::Payjp::ThreeDSecureRequest; + +use strict; +use warnings; + +use base 'Net::Payjp'; + +sub create{ + my $self = shift; + my %p = @_; + + $self->_request(method => 'POST', url => $self->_class_url, param => \%p); +} + +sub retrieve{ + my $self = shift; + my $id = shift; + $self->id($id) if $id; + + $self->_request(method => 'GET', url => $self->_instance_url); +} + +sub all{ + my $self = shift; + my %p = @_; + + $self->_request(method => 'GET', url => $self->_class_url, param => \%p); +} + +sub _class_url{ + my $self = shift; + return $self->api_base.'/v1/three_d_secure_requests'; +} +1; diff --git a/lib/Net/Payjp/Token.pm b/lib/Net/Payjp/Token.pm index 67e49ad..256fcdc 100644 --- a/lib/Net/Payjp/Token.pm +++ b/lib/Net/Payjp/Token.pm @@ -20,4 +20,10 @@ sub retrieve{ $self->_request(method => 'GET', url => $self->_instance_url); } +sub tds_finish{ + my $self = shift; + + $self->_request(method => 'POST', url => $self->_instance_url.'/tds_finish'); +} + 1; diff --git a/t/three_d_secure_request.t b/t/three_d_secure_request.t new file mode 100644 index 0000000..009781e --- /dev/null +++ b/t/three_d_secure_request.t @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::Mock::LWP; +use Net::Payjp; +use Test::More tests => 11; + +my $payjp = Net::Payjp->new(api_key => 'api_key'); + +isa_ok($payjp->three_d_secure_request, 'Net::Payjp::ThreeDSecureRequest'); +can_ok($payjp->three_d_secure_request, qw(retrieve create all)); + +$Mock_resp->mock( content => sub { '{"id":"tdsr_xxx"}' } ); +$Mock_resp->mock( code => sub {200} ); +$Mock_ua->mock( timeout => sub {} ); +$Mock_ua->mock( default_header => sub {} ); + +#Create +$Mock_req->mock( content => sub { + my $p = $_[1]; + is($p, 'resource_id=car_xxxx'); +} ); +my $tds_request = $payjp->three_d_secure_request; +my $res = $tds_request->create(resource_id => 'car_xxxx'); +is($Mock_req->{new_args}[1], 'POST'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/three_d_secure_requests'); +is($res->id, 'tdsr_xxx'); +is($tds_request->id, 'tdsr_xxx'); + +#Retrieve +$tds_request->retrieve; +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/three_d_secure_requests/tdsr_xxx'); + +#tds_finish +$tds_request->all; +is($Mock_req->{new_args}[1], 'GET'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/three_d_secure_requests'); diff --git a/t/token.t b/t/token.t index 2c62cb5..1e38cbc 100644 --- a/t/token.t +++ b/t/token.t @@ -5,12 +5,12 @@ use warnings; use Test::Mock::LWP; use Net::Payjp; -use Test::More tests => 12; +use Test::More tests => 14; my $payjp = Net::Payjp->new(api_key => 'api_key'); isa_ok($payjp->token, 'Net::Payjp::Token'); -can_ok($payjp->token, qw(retrieve create)); +can_ok($payjp->token, qw(retrieve create tds_finish)); ok(!$payjp->token->can('all')); ok(!$payjp->token->can('save')); ok(!$payjp->token->can('delete')); @@ -36,3 +36,8 @@ is($token->id, 'res1'); $token->retrieve; is($Mock_req->{new_args}[1], 'GET'); is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/tokens/res1'); + +#tds_finish +$token->tds_finish; +is($Mock_req->{new_args}[1], 'POST'); +is($Mock_req->{new_args}[2], 'https://api.pay.jp/v1/tokens/res1/tds_finish'); From bbc37aa15dc0e0e14a9aab90c1c10c39d791cb33 Mon Sep 17 00:00:00 2001 From: nyamanaka Date: Fri, 15 Nov 2024 10:15:53 +0900 Subject: [PATCH 2/4] change docs url, add docs for tds_finish on token --- lib/Net/Payjp.pm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/Net/Payjp.pm b/lib/Net/Payjp.pm index cbd677f..999cdf2 100644 --- a/lib/Net/Payjp.pm +++ b/lib/Net/Payjp.pm @@ -447,6 +447,15 @@ L $payjp->token->retrieve('tok_eff34b780cbebd61e87f09ecc9c6'); +=head2 tds_finish + +Finish 3D-Secure flow of token + +L + + $payjp->id->('tok_xxxxxx'); + $payjp->token->tds_finish(); + =cut sub token{ @@ -496,7 +505,7 @@ sub transfer{ Create a three_d_secure_request -L +L $payjp->three_d_secure_request->create( "resource_id" => "car_xxxx", @@ -506,7 +515,7 @@ L Retrieve a three_d_secure_request -L +L $payjp->three_d_secure_request->retrieve('tdsr_xxxx'); @@ -514,7 +523,7 @@ L Returns the three_d_secure_request list -L +L $res = $payjp->three_d_secure_request->all(limit => 2, offset => 1); From 5455df7a75e05d086973ed48f156cd2a5691c9e1 Mon Sep 17 00:00:00 2001 From: nyamanaka Date: Fri, 15 Nov 2024 10:17:24 +0900 Subject: [PATCH 3/4] invalid sample code --- lib/Net/Payjp.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Net/Payjp.pm b/lib/Net/Payjp.pm index 999cdf2..c2eac74 100644 --- a/lib/Net/Payjp.pm +++ b/lib/Net/Payjp.pm @@ -453,7 +453,7 @@ Finish 3D-Secure flow of token L - $payjp->id->('tok_xxxxxx'); + $payjp->id('tok_xxxxxx'); $payjp->token->tds_finish(); =cut From 334753931924f09ac2d590f63deff35816569626 Mon Sep 17 00:00:00 2001 From: nyamanaka Date: Fri, 15 Nov 2024 10:20:49 +0900 Subject: [PATCH 4/4] increment minor version --- lib/Net/Payjp.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Net/Payjp.pm b/lib/Net/Payjp.pm index c2eac74..56bfa19 100644 --- a/lib/Net/Payjp.pm +++ b/lib/Net/Payjp.pm @@ -68,7 +68,7 @@ This is required. You get this from your Payjp Account settings. =cut -our $VERSION = '0.3.1'; +our $VERSION = '0.4.0'; our $API_BASE = 'https://api.pay.jp'; our $INITIAL_DELAY_SEC = 2; our $MAX_DELAY_SEC = 32;