2010-10-27 21 views
7

Tôi đã tìm kiếm hơn 4 giờ ngay bây giờ về cách gọi lại bằng PayPal sau khi thanh toán đã được tiến hành.PayPal Payment Callback

Điều này là, tôi có một trang web bán vé cho một bên LAN và cách duy nhất để thanh toán bằng PayPal.
Đây là PayPal của tôi mua mã nút:

<form target="paypal" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="add" value="1"> 
<input type="hidden" name="cmd" value="_cart"> 
<input type="hidden" name="business" value="_MY_PAYPAL_EMAIL_"> 
<input type="hidden" name="item_number" value="<?php echo mktime(); ?>"> 
<input type="hidden" name="cn" value="<?php echo $_SESSION['userid']; ?>"> 
<input type="hidden" name="return" value="http://80.202.213.240/apps/tickets/buy/success/" /> 
<input type="hidden" name="cancel_return" value="http://80.202.213.240/apps/tickets/buy/cancelled/" /> 
<input type="hidden" name="notify_url" value="http://80.202.213.240/apps/tickets/buy/ipn/" /> 
<input type="hidden" name="lc" value="NO"> 
<input type="hidden" name="item_name" value="BitHack - Standard Ticket"> 
<input type="hidden" name="amount" value="100.00"> 
<input type="hidden" name="currency_code" value="NOK"> 
<input type="hidden" name="no_shipping" value="1"> 
<input type="hidden" name="button_subtype" value="Tickets"> 
<input type="hidden" name="add" value="1"> 
<input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHostedGuest"> 
<input type="submit" value="Add to Cart" class="ticketShowButton submit" title="Payment via PayPal"> 

Thông báo thông tin sau đó sẽ được đưa vào một cơ sở dữ liệu, một phần tôi đã kết thúc. Chỉ cần hệ thống gọi lại để hoạt động. Bất cứ ai biết bất kỳ ví dụ kịch bản gọi lại nào tốt?

BTW, có thể sử dụng các đầu vào tùy chỉnh không?

Trả lời

10

Chức năng gọi lại được chỉ định trong các biến url trả về và thông báo là trách nhiệm của người lập trình. Tại sao? Bởi vì mỗi trang web có cấu trúc bảng riêng cho các đơn đặt hàng. Hãy thử làm hướng dẫn này:

Trên hồ sơ Paypal của bạn đặt tùy chọn chuyển hướng tự động sau một đơn hàng. Bạn cũng cần đặt url trả về mặc định. điều này sẽ được sử dụng nếu bạn quên chỉ định url trả về trên mẫu đơn đặt hàng hoặc chuỗi truy vấn được gửi đến Paypal.

Tiếp theo, thiết lập trường rm của bạn/biến thành "2" (điều này sẽ cho Paypal API để autoredirect để url trở lại của bạn sau khi trật tự và chuyển thông tin trật tự trong định dạng POST)

Bạn có thể xem phản hồi từ Paypal bằng cách thực hiện một var_dump ($ _ POST) hoặc print_r ($ _ POST).

Một trong các biến quan trọng từ phản hồi là $ _POST ['payment_status'] sẽ cho bạn biết kết quả của đơn đặt hàng. Giao dịch thành công là 'Đã hoàn thành'. Giao dịch yêu cầu xác minh từ Paypal hoặc từ phía người bán là 'Đang chờ xử lý'.

Cuối cùng, đừng quên chỉ định 'hóa đơn' trên trường/yêu cầu Paypal của bạn để bạn có thể cập nhật trạng thái đơn hàng của mình. Một cái gì đó như:

$status = $_POST['payment_status']; 
$invoice = $_POST['invoice']; 
mysql_query("UPDATE Orders SET status='$status' WHERE order_id='$invoice'"); 

Tôi biết đây là mã hóa kém nhưng ít nhất bạn có ý tưởng chung ở dạng đơn giản nhất.

Một lần nữa, không dựa vào các mã của người khác. Các mã trong mạng tồn tại cho mục đích tham khảo và không phải là thủ công của Đức Chúa Trời. Chỉ bạn mới có khả năng tạo ra kiệt tác của riêng mình: D

Tôi hy vọng điều đó sẽ hữu ích. Bình chọn nếu bạn thích. Bỏ qua nếu không.

+0

là '$ _POST' an toàn? điều gì xảy ra khi một người không thanh toán, gửi 'payment_status = 1' đến url gọi lại? – Cooper

1

Một giải pháp chi phí thương mại nhưng thấp là kịch bản LinkLokIPN tại địa chỉ:

http://www.vibralogix.com/linklokipn/

Không có kết nối khác hơn là một khách hàng hài lòng của phiên bản PHP. Đôi khi nó là MUCH dễ dàng hơn để mua (và có lẽ thích nghi) một giải pháp làm việc hơn để phát minh lại bánh xe.

+0

Cảm ơn, sẽ xem xét điều đó. – NoobiCake