Thanh toán bằng Paypal
This post hasn't been updated for 3 years
Có lẽ mọi người đều không xa lạ với hệ thống thanh toán Paypal. Nhiều dịch vụ thanh toán quốc tế chấp nhận thanh toán qua Paypal, nó gần như là 1 phương thức thanh toán được thế giới chấp nhận. Việc tích hợp thanh toán để mua bán vào web là điều mọi người đều làm. Ở đây mình cùng các bạn tìm hiểu về việc sử dụng Paypal để thực hiện các công việc thanh toán:
- Nạp tiền bằng thẻ thanh toán quốc tế.
- Thanh toán từ người dùng paypal.
Đăng ký tài khoản develop
Cũng như làm việc với Facebook hay Google, thì để làm việc với Paypal thì cũng cần có tạo các App khác nhau để tạo ra các Key và Secret. Ngoài ra vì đây làm việc liên quan đến tiền vì thế rất cần các tài khoản Sandbox để có thể test việc sử dụng Api nó như thế nào. Khi có tài khoản Paypal ta có thể vào đây để đăng nhập vào develop của Paypal. Sau khi đăng nhập xong thì ta để ý menu bên trái như sau Ta vào phần Sandbox > Account. Thường ở đây có sẵn 2 tài khoản nhưng theo kinh nghiệm bản thân thì bạn k nên dùng 2 tài khoản này, vì mình từng thử các API mà nó ko chạy khi sử dụng thông tin của 2 tài khoản này. Do vậy ta cần tạo tài khoản khác. Khi vào màn hình tạo tài khoản sẽ như sau Lúc tạo tài khoản thì ở đây sẽ có 2 loại tài khoản: đó là Personal và Business. Hiểu nôm na là người mua và người bán. sau khi tạo các tài khoàn này thì riêng với tài khoản Business ta cần phải bật chế độ Paypal Credit để có thể thực hiện việc thanh toán bằng thẻ tín dụng. Để tắt bật thì ta vào phần profile của Business account. Sau đó sang phần setting rồi bật Paypal Credit là được. Sau khi có tài khoản Business, mọi API làm việc đều cần có 3 thông số cần thiết đó là User / Pass / Signature. Thông số này được lấy từ profile của user. Ví dụ như hình dưới
Thực hiện giao dịch bằng thẻ Tín dụng
Để thực hiện giao dịch bằng thẻ tín dụng ta dùng phương thức DoDirectPayment của Paypal. Các thông số setup bao gồm: Endpoint là https://api-3t.sandbox.paypal.com/nvp User: (lấy ở trên) Pass: (Lấy ở trên) Signature: (Lấy ở trên) Với mỗi tài khoản Personal đều có thông tin mã thẻ tín dụng để test. Vậy để các param để gửi đi sẽ là:
$request_params = [
'METHOD' => 'DoDirectPayment',
'USER' => $api_username,
'PWD' => $api_password,
'SIGNATURE' => $api_signature,
'VERSION' => $api_version,
'PAYMENTACTION' => 'Sale',
'IPADDRESS' => '192.168.0.1',
'CREDITCARDTYPE' => 'Visa',
'ACCT' => '4032030352083613',
'EXPDATE' => '012023',
'CVV2' => '123',
'FIRSTNAME' => 'Huy',
'LASTNAME' => 'Nguyen',
'STREET' => 'Thanh Cong',
'CITY' => 'Ha Noi',
'STATE' => '00',
'COUNTRYCODE' => 'VN',
'ZIP' => '10000',
'AMT' => '15.00',
'CURRENCYCODE' => 'USD',
'DESC' => 'Check '
];
Và để thực hiện thanh toán ta thông qua hàm curl như sau:
$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_URL, $api_endpoint);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $nvp_string);
// những thông tin trên được gửi qua Paypal và tôi sẽ nhận được phản hồi trong biến $result
$result = curl_exec($curl);
curl_close($curl);
Và kết quả ta có được là: Và để kiểm tra kết quả tiền thì ta có thể đăng nhập tài khoản sandbox từ link này để xem lịch sử giao dịch.
Giao dịch nhận tiền từ tài khoản Paypal người khác vào
Phương thức thanh toán ở đây ta dùng là AdaptivePayments. Trình tự thanh toán của nó sẽ như sau:
- Đầu tiên ta chạy API điền các thông số, sau đó sẽ trả về 1 paykey.
- Người chuyển tiền cần vào link https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey= để xác thực việc chuyển tiền bằng cách đăng nhập bằng tài khoản paypal và chấp nhận giao dịch.
- Sau khi chấp nhận giao dịch thì paypal se redirect về link đã setup từ trước.
Gửi API đến Paypal
Như phần nhận tiền từ thẻ tín dụng thì ta cần các thông số setup như sau Endpoint là https://svcs.sandbox.paypal.com/AdaptivePayments/Pay User: (lấy ở phần bussiness info) Pass: (lấy ở phần bussiness info) Signature: (lấy ở phần bussiness info) Và param sẽ như sau
$request_params = [
'actionType' => 'PAY',
'currencyCode' => 'USD',
'receiverList' => [
'receiver' => [
[
'amount' => '10.00',
'email' => 'huynguyen_test_buyer1@yahoo.com',
]
],
],
'returnUrl' => 'https://example.com/success.html', //Link sẽ trả về nếu thanh toán thành công
'cancelUrl' => 'https://example.com/failure.html', // Link trả về nếu giao dịch bị hủy
'requestEnvelope' => [
'errorLanguage' => 'en_US',
'detailLevel' => 'ReturnAll',
],
];
và thực thi như sau
$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_URL, $api_endpoint);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerParams);
curl_setopt($curl, CURLOPT_POSTFIELDS, $params);
// những thông tin trên được gửi qua Paypal và tôi sẽ nhận được phản hồi trong biến $result
$result = curl_exec($curl);
curl_close($curl);
Và kết quả trả về như sau
Xác thực thanh toán
Như ta đã nói ở trên, sau khi có Paykey thì ta cần vào link https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=AP-0R408975WV7261848 để xác thực, nếu chấp nhận thanh toán thì Paypal sẽ redirect về link đã khai báo trong param. ### Xác định trạng thái của Paykey ### Để biết thành quả của giao dịch thì Paypal có cung cấp API cho việc xác định trạng thái của Paykey là PaymentDetails https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails
Kêt luận
Trong bài viết là những giao dịch cơ bản. Ngoài ra paypal có cung cấp sẵn các thư viện ngoài cho Php còn có cho lập trình Android, iOs. Các bạn có thể tham khảo trên link github của paypal.
All Rights Reserved