forked from paypal/pdt-code-samples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
paypal_pdt.pl
160 lines (73 loc) · 2.98 KB
/
paypal_pdt.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/usr/bin/perl -w
# It is highly recommended that you use version 6 upwards of
# the UserAgent module since it provides for tighter server
# certificate validation
###
#
# PayPal PDT (Payment Data Transfer) CGI
#
###
use strict;
use CGI qw(:all unescape);
use CGI::Carp qw(fatalsToBrowser);
# These modules are required to make the secure HTTP request to PayPal.
use LWP::UserAgent 6;
###
# CUSTOMIZE THIS: This is the seller's Payment Data Transfer authorization token.
# Replace this with the PDT token in "Website Payment Preferences" under your account.
###
my $auth_token = "VUDGCF2EA5huqlEqbSLPbg0JY3F-Pokyf-99r2sZWPR4x7GkWZEa-zIG49O";
sub done_text {
return (p('Your transaction has been completed, and a receipt for your purchase has been
emailed to you. You may log into your account at <a
href="https://www.paypal.com/">www.paypal.com</a> to view details of this transaction.'),
end_html());
}
print header(), start_html("Thank you for your purchase!");
# Set up the secure request to the PayPal server to fetch the transaction info
my $paypal_server = "www.paypal.com";
my $transaction = param("tx");
if (not $transaction) {
print (h2("The transaction ID was not found."), done_text());
exit();
}
my $paypal_url = "https://$paypal_server/cgi-bin/webscr";
my $query = join("&", "cmd=_notify-synch", "tx=$transaction", "at=$auth_token");
my $user_agent = new LWP::UserAgent;
my $request = new HTTP::Request("POST", $paypal_url);
$request->content_type("application/x-www-form-urlencoded");
$request->header(Host => $paypal_server);
$request->content($query);
# Make the request
my $result = $user_agent->request($request);
if ($result->is_error) {
print(h1("An error was encountered"), br(), p("An error was encountered contacting the PayPal
server:"),
$result->error_as_HTML, done_text());
exit();
}
# Decode the response into individual lines and unescape any HTML escapes
my @response = split("\n", unescape($result->content));
# The status is always the first line of the response.
my $status = shift @response;
if ($status eq "SUCCESS") {
# success
my %transaction;
foreach my $response_line (@response) {
my ($key, $value) = split "=", $response_line;
$transaction{$key} = $value;
}
# These are only some of the transaction details available; there are others.
# You should print all the transaction details appropriate.
print(h2("Here are the details of your purchase:"),
ul(li("Customer Name: " . $transaction{'first_name'} . " " . $transaction{'last_name'}),
li("Item: " . $transaction{'item_name'}),
li("Amount: " . $transaction{'payment_gross'})));
} elsif ($status eq "FAIL") {
print(h2("Unable to retrieve transaction details."));
# failure
} else {
# unknown error
print(h2("Error retrieving transaction details."));
}
print done_text();