2010-04-07 34 views
5

Im viết biểu mẫu để đăng dữ liệu lên paypal, và điều này hoạt động tốt, tôi tạo biểu mẫu với các trường ẩn và sau đó có nút gửi gửi mọi thứ tới paypal.Tự động gửi biểu mẫu (cURL)

Tuy nhiên, khi người dùng nhấp vào nút đó, có nhiều thứ tôi muốn làm hơn, ví dụ như thay đổi trạng thái giỏ hàng của họ trong cơ sở dữ liệu. Vì vậy, tôi muốn có thể thực thi một số mã khi họ nhấp gửi và sau đó đăng dữ liệu lên paypal.

Tôi không muốn sử dụng javascript cho việc này.

Phương pháp của tôi tại thời điểm này đang sử dụng cURL, biểu mẫu đăng lại trang hiện tại, sau đó kiểm tra dữ liệu $ _POST, thực hiện các lệnh khác của tôi như cập nhật trạng thái giỏ hàng, sau đó tạo lệnh curl và gửi dữ liệu biểu mẫu đến paypal. Bây giờ, nó được đăng thành công, nhưng trình duyệt không đi đến paypal. Lúc đầu tôi chỉ lấy lại kết quả trong một chuỗi và sau đó lặp lại nó và tôi có thể thấy rằng bài đăng đã thành công, sau đó tôi đặt CURLOPT_FOLLOWLOCATION thành 1 giả định điều này sẽ cho phép trình duyệt chuyển sang paypal nhưng nó không, những gì nó có vẻ là làm là lấy một số công cụ từ paypal và đặt nó trên trang của tôi.

Bạn đang sử dụng cURL điều phù hợp với điều này? và nếu có, làm cách nào để tôi giải quyết vấn đề này? Tôi muốn tránh xa javascript cho điều này như là chỉ người dùng với kích hoạt javascript sẽ có giỏ hàng của họ được cập nhật.

Mã im sử dụng cho curl ở bên dưới, post_data là mảng tôi đã tạo và sau đó đọc cặp khóa-giá trị thành chuỗi bài đăng.

//Set cURL Options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl_connection, CURLOPT_MAXREDIRS, 20); 

//Set Data to be Posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

//Execute Request 
curl_exec($curl_connection); 

Trả lời

2

Có lẽ cố gắng kết hợp CURL với một tuyên bố tiêu đề

<?php 
header ("Location: https://www.paypal.com/"); 

này có thể làm việc tùy thuộc nếu trình duyệt cần phải vượt qua bất kỳ thông tin trạng thái (phiên) để paypal. Thông tin phiên này được thu thập trong CURL cuộc gọi của bạn, nhưng không có cách nào để chuyển nó vào trình duyệt không may. Vì vậy, nếu bạn cần duy trì trạng thái, thì điều này sẽ không hoạt động.

Curl hoạt động ở phía máy chủ. Nó sẽ không ảnh hưởng đến trình duyệt của bạn. CURLOPT_FOLLOWLOCATION chỉ đơn giản chỉ thị CURL tuân theo khi ví dụ paypal gửi cho nó một tiêu đề giống như đã đề cập ở trên. Cách duy nhất để hướng dẫn trình duyệt thực hiện điều gì đó là phản hồi bằng tiêu đề HTTP như ở trên hoặc với một số loại thẻ meta trong phản hồi HTML của bạn, ví dụ:

<META HTTP-EQUIV="refresh" CONTENT="10;URL=https://www.paypal.com/"> 

Thay vào đó, paypal không cung cấp chức năng chuyển hướng, khi giao dịch kết thúc, hãy chuyển hướng về máy chủ của bạn. Nếu vậy thì chỉ cần thay đổi trạng thái thẻ trong khi gọi lại này và bỏ qua toàn bộ quá trình curl?

+0

cảm ơn, tôi đã hy vọng tôi sẽ không phải làm điều đó trong cuộc gọi lại từ paypal, tôi muốn đặt trạng thái giỏ hàng khi nó chuyển sang paypal và một khi nó trả về chỉ để accuratley theo dõi tiến độ và trợ giúp với sửa bất kỳ lỗi nào, hãy thử thiết lập một số tiêu đề http và xem, nhưng tôi có thể chỉ cần thực hiện nó trong phần gọi lại. Tôi chỉ giả định rằng tự động gửi biểu mẫu và sau hành động sẽ dễ dàng hơn. – cast01

+0

Tôi đoán bạn vẫn có thể làm cả hai cho những người dùng đã bật javascript.Đối với những người không có javascript kích hoạt chỉ gọi lại được sử dụng nhưng đối với những người (đa số) đã kích hoạt javascript, bạn có thể thiết lập cờ 'đi-to-paypal' trong một cuộc gọi ajax và thiết lập 'hoàn thành' gắn cờ trong cuộc gọi lại. –

1

Sau khi nhận biểu mẫu và thực hiện những gì bạn cần làm, bạn nên trình bày biểu mẫu khác chỉ bằng một nút (tất cả dữ liệu khác trong trường ẩn) để người dùng nhấp và cuối cùng chuyển sang paypal.

+0

cảm ơn câu trả lời, tuy nhiên điều này sẽ đánh bại mục đích của những gì tôi đang cố gắng làm. Tôi muốn thiết lập một giỏ hàng như, nói, "đi đến paypal" khi người dùng nhấp chuột trả tiền. Nếu, khi họ nhấp vào thanh toán, tôi sẽ đặt trạng thái giỏ hàng và hiển thị cho họ một biểu mẫu khác mà họ phải gửi, sau đó họ có thể chọn không gửi, và trạng thái giỏ hàng của tôi sẽ sai. – cast01

+0

Sau đó, bạn sẽ cần một dòng javascript để tự động gửi biểu mẫu. Nếu không, máy chủ của bạn không thể chuyển hướng VÀ gửi một biểu mẫu để paypal tất cả bởi chính nó trong một đi. – zaf

Các vấn đề liên quan