2011-11-02 29 views
12

Tôi đang cố gắng xây dựng một giỏ mua hàng được trả tiền rất đơn giản để người dùng có thể mua nhiều mặt hàng. Tôi muốn paypal để xử lý tất cả các chi tiết thanh toán. Tôi thậm chí không muốn xác nhận đơn đặt hàng. Tôi sẽ tự kiểm tra xác nhận đơn hàng trên paypal.Tại sao DoExpressCheckoutThanh toán bắt buộc đối với Paypal?

Lúc đầu, tôi muốn sử dụng "Tiêu chuẩn thanh toán trang web" vì có vẻ như dễ dàng tạo biểu mẫu sẽ đăng lên paypal và để paypal xử lý nó từ đó. Nhưng không, điều này không hiệu quả vì các nút/biểu mẫu "Thanh toán Trang web" không hỗ trợ gửi nhiều mục. Tôi đã thử tất cả các loại khóa/giá trị trong biểu mẫu của mình và nó không bao giờ hoạt động.

Sau đó, tôi đã dùng thử Checkout Checkout bằng cách sử dụng các hướng dẫn tìm thấy here. Nó chủ yếu làm việc, nhưng khi tôi hiểu nó, sau khi gửi một SetExpressCheckout, bạn phải lắng nghe một yêu cầu từ paypal và thực hiện một DoExpressCheckoutPayment để hoàn thành giao dịch. SO reference.

Tôi thấy điều này hơi rắc rối, bởi vì nếu máy chủ của tôi không nhận được yêu cầu từ paypal và tôi không bao giờ gửi thanh toán DoExpressCheckoutPayment thì sao? Vì vậy, một khách hàng THINKS họ đã hoàn thành việc gửi một đơn đặt hàng, nhưng đơn đặt hàng chưa bao giờ nhận được.

Có ai biết cách bỏ qua bước "xác nhận" này không? Tôi thấy nó không cần thiết, và không chắc tại sao paypal lại yêu cầu nó.

+0

Về mặt kỹ thuật 'DoExpressCheckoutPayment' chỉ bắt buộc (hoặc thậm chí có sẵn) cho API thanh toán Express và API thanh toán trên trang web. –

Trả lời

39

Đó là vì Express Checkout và Chuẩn thanh toán trang web là các sản phẩm cơ bản khác nhau.

Để sử dụng Express Checkout, bạn sẽ gọi API SetExpressCheckout. Trong cuộc gọi API, bạn chỉ định chi tiết về sản phẩm, số tiền và RETURNURL.
Khi bạn đăng dữ liệu này lên điểm cuối API của PayPal, bạn sẽ nhận được mã thông báo trả lại. Sau đó, bạn sẽ chuyển hướng người mua và thêm mã thông báo vào URL sau: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX

Khi người mua đã đồng ý mua hàng của bạn, anh được chuyển hướng trở lại URL bạn đã chỉ định trong RETURNURL.
Bây giờ bạn sẽ hiển thị xác nhận đơn đặt hàng và gọi API GetExpressCheckoutDetails **.
Khi gọi GetExpressCheckoutDetails, hãy cung cấp mã thông báo. Trong phản hồi API GetExpressCheckoutDetails bạn sẽ tìm thấy một PayerID.

Bây giờ bạn đã sẵn sàng gọi DoExpressCheckoutPayment và tính phí cho người mua. Hãy nhớ bao gồm cả mã thông báo và ID người thanh toán khi gọi DoExpressCheckoutPayment.

Lưu ý: Nếu bạn muốn tính phí người mua ngay lập tức bằng cách gọi GetExpressCheckoutDetails và DoExpressCheckoutThanh toán ngay lập tức, chuyển hướng người mua đến https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX&useraction=commit. useraction=commit sẽ thay đổi nút "Tiếp tục" trên trang 'Xem xét thanh toán của PayPal' của bạn thành nút "Thanh toán ngay bây giờ".

-

Lý do có một sự khác biệt đáng kể giữa Express Checkout và Website Thanh toán tiêu chuẩn, đó là trang web thanh toán tiêu chuẩn được thiết kế để trở thành một thả trong dung dịch làm việc nơi PayPal xử lý các dòng giao dịch nói chung. Express Checkout là một giải pháp linh hoạt hơn cho phép bạn tích hợp nó một cách sâu sắc với luồng thanh toán hiện tại của trang web/giỏ hàng.

Đối với trường hợp sử dụng của bạn; tìm kiếm bằng cách sử dụng nút 'tải lên giỏ hàng' của PayPal. Xem một ví dụ https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_cart_upload

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_cart"> 
<input type="hidden" name="upload" value="1"> 
<input type="hidden" name="business" value="[email protected]"> 
<input type="hidden" name="item_name_1" value="Item Name 1"> 
<input type="hidden" name="amount_1" value="1.00"> 
<input type="hidden" name="item_name_2" value="Item Name 2"> 
<input type="hidden" name="amount_2" value="2.00"> 
<input type="submit" value="PayPal"> 
</form> 

Lưu ý tuy nhiên, điều này là không an toàn theo mặc định, như số tiền bạn đang đi để sạc sẽ rõ ràng có thể nhìn thấy trong HTML.

** ID thanh toán cũng được thêm vào trong GET của RETURNURL của bạn. Vì vậy, bạn có thể bỏ qua gọi GetExpressCheckoutDetails nếu bạn muốn.

+0

Cảm ơn bạn đã phản hồi chi tiết. Tuy nhiên, tôi chưa bao giờ đánh giá Trang web thanh toán chuẩn cho Express Checkout. Nếu tôi đã làm, nó sẽ là một sai lầm. Câu hỏi chính của tôi là tại sao paypal yêu cầu DoExpressCheckoutPayment, có vẻ như không cần thiết và gây nhầm lẫn vì người dùng đã hoàn tất thanh toán. Tuy nhiên, biểu mẫu Chuẩn thanh toán trên trang web mẫu của bạn cho nhiều mục đã hoạt động, đó là tất cả những gì tôi thực sự muốn bắt đầu (tuy nhiên nó vẫn không trả lời được câu hỏi này). Một lần nữa. Cảm ơn bạn! – vinhboy

+3

Tôi biết bạn đã không; nhưng nó trả lời câu hỏi của bạn tại sao DoExpressCheckoutPayment là bắt buộc. :-) Đó là bản chất của con thú. Express Checkout được dự định là giải pháp thanh toán nội bộ, nằm giữa giỏ hàng của bạn và trang xác nhận đơn đặt hàng. Do đó tại sao DoExpressCheckoutPayment là cần thiết để hoàn tất việc thanh toán; điều này cho phép người bán linh hoạt hơn về thời điểm, cách thức và nơi tính phí người mua thay vì người mua bị tính phí ngay lập tức trên trang web của PayPal. Thanh toán thực tế không được hoàn tất khi người mua đã * đồng ý thanh toán *. Nó chỉ được hoàn thành sau khi DoEC được gọi. – Robert

+4

+1 cho useraction = cam kết – Andreas

3

Với mục đích của trang web này, thao tác DoExpressCheckoutPayment chỉ cần theo yêu cầu của API PayPal Checkout Checkout.

Bạn chính xác rằng PayPal không cần xử lý thanh toán, nhưng có các trường hợp mà sẽ yêu cầu một thao tác thứ hai. Một ví dụ về kịch bản như vậy sẽ là một trong những nơi mà người dùng (khách hàng của trang web của bạn) đang chọn một địa chỉ giao hàng trong xác nhận thanh toán PayPal. Tùy thuộc vào nhà cung cấp dịch vụ vận chuyển của bạn, bạn có thể cần phải tính toán số tiền giao hàng thực tế sau người dùng đã chọn địa chỉ giao hàng trên các trang xác nhận PayPal.

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