Hướng dẫn paypal ipn integration in php - tích hợp ipn paypal trong php

ApiciverseCurrent


Người nghe IPN có thể được triển khai trong bất kỳ ngôn ngữ lập trình nào hỗ trợ kịch bản và chạy trên máy chủ web của bạn.

PayPal cung cấp mã mẫu cho người nghe được thực hiện trong các ngôn ngữ được liệt kê dưới đây. Những người nghe mẫu này cho thấy cách thực hiện bắt tay xác thực tin nhắn IPN PayPal được thực hiện và sau đó chỉ cho bạn thấy logic phụ trợ người nghe của bạn nên được thực hiện.

  • PHP
  • Perl
  • ASP.NET
  • Hợp nhất lạnh

Những người nghe IPN mẫu này có sẵn trên GitHub tại vị trí sau: Các mẫu mã IPN.

IPN Lắng nghe yêu cầu phản hồi

Để nhận dữ liệu tin nhắn IPN từ PayPal, người nghe của bạn phải tuân theo luồng phản hồi yêu cầu này:

  1. Người nghe của bạn lắng nghe các tin nhắn IPN bài HTTPS mà PayPal gửi với mỗi sự kiện.

  2. Sau khi nhận được tin nhắn IPN từ PayPal, người nghe của bạn trả về phản hồi HTTP 200 trống cho PayPal. Nếu không, PayPal gửi lại tin nhắn IPN.

  3. Người nghe của bạn gửi tin nhắn hoàn chỉnh trở lại PayPal bằng bài đăng HTTPS.

    Tiền tố Thông báo đã trả lại với biến cmd=_notify-validate, nhưng không thay đổi các trường tin nhắn, thứ tự của các trường hoặc ký tự mã hóa từ thông báo gốc.

    Gửi tin nhắn phản hồi trở lại PayPal:

    • https://ipnpb.sandbox.paypal.com/cgi-bin/webscr (cho IPN hộp cát)

    • https://ipnpb.paypal.com/cgi-bin/webscr (cho IPN trực tiếp)

      Vui lòng đảm bảo bạn cung cấp giá trị tiêu đề User-Agent mô tả trình nghe IPN của bạn, chẳng hạn như, PHP-IPN-VerificationScript. Để biết thêm thông tin, hãy xem Thông số kỹ thuật của tác nhân người dùng.

  4. PayPal gửi một trong những từ sau đây cho người nghe của bạn:

    • VERIFIED (nếu tin nhắn khớp với bản gốc)
    • INVALID (nếu tin nhắn không khớp với bản gốc)

Để biết ví dụ về thông báo IPN, bạn có thể sử dụng thông báo IPN mẫu làm điểm bắt đầu.

Một danh sách các biến IPN có thể được tìm thấy trong tham chiếu các biến IPN; Tuy nhiên, một số biến này có thể không được trả lại cho bạn, tùy thuộc vào loại giao dịch và sự kiện được xử lý.

Để biết thêm thông tin về việc kiểm tra và khắc phục sự cố người nghe của bạn, hãy xem thử nghiệm IPN.

Là một thực hành lập trình tốt, cũng như để giữ cho mọi thứ đơn giản, trình nghe IPN của bạn nên lắng nghe một bài đăng từ PayPal và gửi nó ngay lập tức sang một thói quen khác hoặc xử lý logic kinh doanh liên quan đến thông điệp. Nếu người nghe của bạn được cấu trúc theo cách này, nó sẽ là một vòng lặp đơn giản và chặt chẽ lắng nghe một thông điệp và gửi nó để xử lý theo logic ứng dụng của bạn.

Khi bạn đã hoàn thành trình nghe của mình, hãy đẩy nó vào trang web của bạn và chỉ định URL hoặc URL thông báo của người nghe trong cài đặt tài khoản của bạn. Xem thiết lập IPN để biết thêm thông tin.

PayPal đã phát hành một kho lưu trữ GitHub có chứa mã mẫu cho người nghe IPN. Tôi rất khuyên bạn nên kiểm tra và kiểm tra những người dựa trên ngôn ngữ ưa thích của bạn.

Bạn có thể kiểm tra repo GitHub tại: https://github.com/paypal/ipn-code-samples

Bạn có thể tìm thấy lớp IPN PHP bên dưới:

use_sandbox = true;
    }

    /**
     * Sets curl to use php curl's built in certs (may be required in some
     * environments).
     * @return void
     */
    public function usePHPCerts()
    {
        $this->use_local_certs = false;
    }

    /**
     * Determine endpoint to post the verification data to.
     *
     * @return string
     */
    public function getPaypalUri()
    {
        if ($this->use_sandbox) {
            return self::SANDBOX_VERIFY_URI;
        } else {
            return self::VERIFY_URI;
        }
    }

    /**
     * Verification Function
     * Sends the incoming post data back to PayPal using the cURL library.
     *
     * @return bool
     * @throws Exception
     */
    public function verifyIPN()
    {
        if ( ! count($_POST)) {
            throw new Exception("Missing POST Data");
        }

        $raw_post_data = file_get_contents('php://input');
        $raw_post_array = explode('&', $raw_post_data);
        $myPost = array();
        foreach ($raw_post_array as $keyval) {
            $keyval = explode('=', $keyval);
            if (count($keyval) == 2) {
                // Since we do not want the plus in the datetime string to be encoded to a space, we manually encode it.
                if ($keyval[0] === 'payment_date') {
                    if (substr_count($keyval[1], '+') === 1) {
                        $keyval[1] = str_replace('+', '%2B', $keyval[1]);
                    }
                }
                $myPost[$keyval[0]] = urldecode($keyval[1]);
            }
        }

        // Build the body of the verification post request, adding the _notify-validate command.
        $req = 'cmd=_notify-validate';
        $get_magic_quotes_exists = false;
        if (function_exists('get_magic_quotes_gpc')) {
            $get_magic_quotes_exists = true;
        }
        foreach ($myPost as $key => $value) {
            if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
                $value = urlencode(stripslashes($value));
            } else {
                $value = urlencode($value);
            }
            $req .= "&$key=$value";
        }

        // Post the data back to PayPal, using curl. Throw exceptions if errors occur.
        $ch = curl_init($this->getPaypalUri());
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
        curl_setopt($ch, CURLOPT_SSLVERSION, 6);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

        // This is often required if the server is missing a global cert bundle, or is using an outdated one.
        if ($this->use_local_certs) {
            curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/cert/cacert.pem");
        }
        curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'User-Agent: PHP-IPN-Verification-Script',
            'Connection: Close',
        ));
        $res = curl_exec($ch);
        if ( ! ($res)) {
            $errno = curl_errno($ch);
            $errstr = curl_error($ch);
            curl_close($ch);
            throw new Exception("cURL error: [$errno] $errstr");
        }

        $info = curl_getinfo($ch);
        $http_code = $info['http_code'];
        if ($http_code != 200) {
            throw new Exception("PayPal responded with http code $http_code");
        }

        curl_close($ch);

        // Check if PayPal verifies the IPN data, and if so, return true.
        if ($res == self::VALID) {
            return true;
        } else {
            return false;
        }
    }
}

Và ví dụ về người nghe IPN:

useSandbox();
$verified = $ipn->verifyIPN();
if ($verified) {
    /*
     * Process IPN
     * A list of variables is available here:
     * https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/
     */
}

// Reply with an empty 200 response to indicate to paypal the IPN was received correctly.
header("HTTP/1.1 200 OK");

Làm thế nào cấu hình paypal trong PHP?

Tích hợp cổng thanh toán trong PHP - một danh sách kiểm tra nhanh..
Bắt đầu bằng cách nhận tài khoản nhà phát triển PayPal và nhận được thông tin đăng nhập hộp cát. ....
Tạo cấu trúc thư mục thích hợp để tích hợp ..
Bắt đầu bằng cách tạo tệp thanh toán.php ..
Tạo thanh toán_form. ....
Kiểm tra tích hợp để xem mọi thứ có hoạt động như bình thường không ..

IPN PHP là gì?

IPN là một dịch vụ tin nhắn gửi cho bạn một thông báo khi bất kỳ loại giao dịch nào xảy ra trong tài khoản của bạn.Các tin nhắn được nhận và xử lý bởi (các) máy chủ của bạn.a message service that sends you a notification when any type of transaction occurs in your account. The messages are received and processed by your server(s).

Làm cách nào để sử dụng paypal với IPN?

Nhấp vào biểu tượng Cài đặt ở đầu trang tài khoản PayPal của bạn và sau đó nhấp vào Cài đặt tài khoản.Trên trang Thông báo, nhấp vào liên kết cập nhật cho mục thông báo thanh toán tức thì.Nhấp vào Chọn Cài đặt IPN để chỉ định URL của người nghe và kích hoạt trình nghe.

Làm cách nào để nhận được phản hồi paypal trong PHP?

Đi qua các bước dưới đây để thiết lập tài khoản hộp cát PayPal và kiểm tra mã PHP của bạn để tích hợp cổng thanh toán.Tạo các tài khoản cá nhân và doanh nghiệp Sandbox thông qua bảng điều khiển -> Hộp cát -> Tài khoản.Chỉ định địa chỉ email tài khoản doanh nghiệp Sandbox trong mẫu thanh toán.