2012-09-05 37 views
15

tôi gặp sự cố với IPN trả tiền này. Tôi thấy, rất nhiều người đã có.Paypal IPN ghi đè bộ ký tự

Tôi cố gắng thanh toán với tư cách người dùng: Árvíztűrő Tükörfúrógép Trong tên này, có tất cả các ký tự đặc biệt, có gì trong hungarian ABC.

Tôi là nhà phát triển PHP hungarian.

Ok, tôi đã cố gắng tìm kiếm rất nhiều trên google. Điều đầu tiên là kiểm tra cài đặt ngôn ngữ paypal: http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html

Mọi cài đặt đều là UTF-8.

Khi paypal gọi là url thông báo của tôi, tôi (nhà phát triển trước đó) xây dựng URL yêu cầu. Khi tôi đăng nhập url này, tôi thấy, bộ ký tự không phải là UTF-8, vì vậy tôi buộc kịch bản phải sử dụng nó.

$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
    if ($key == 'charset') { 
     $req .= "&charset=utf-8"; 
    } else { 
     $value = urlencode(stripslashes($value)); 
     $req .= "&$key=$value"; 
    } 

}

Và đây là điều intresting. Tôi lấy lại một tên người dùng hoàn chỉnh. Vì vậy, tôi đổ nó char char.

Tên đầu tiên sẽ là: CHARS: 193, 114, 118, 237, 122, 116, 26, 114, 26

Suck. Tôi đã cố gắng tìm mọi thứ để có được tên utf-8 thật của mình Mã mb_detect_encoding là UTF-8 cho nó.

Tôi đã cố gắng sử dụng biểu tượng, mb_convert_encoding, utf8_encode và giải mã. Không thành công. Cố gắng không urlencode tên, không thành công một lần nữa.

Ai đó có thể cho tôi biết, tại sao nó lại và làm thế nào tôi có thể lấy lại tên utf8 thật?

URL gì tôi gửi: cmd = _notify-xác nhận & mc_gross = 10.00 & protection_eligibility = đủ điều kiện & address_status = khẳng định & payer_id = JA3YMCJFKSCNJ & thuế = 0.00 & address_street = 1 + Main + St & PAYMENT_DATE = 07% 3A41 % 3A40 + Tháng Chín + 05% 2C + 2012 + PDT & payment_status = Completed * & charset = utf-8 * & address_zip = 95131 & first_name =% C1rv% EDzt% 1AR% 1A & mc_fee = 0,59 & address_country_code = US & address_name =% C1rv% EDzt% 1Ar% 1A + T% FCk% F6rf% FAr% F3g% E9p & notify_version = 3.6 & tùy chỉnh = lolka_bolka% 3Bfalse% 3B% 3B% 3B% 3BHungary% 3B% 3B% 3B% 3B% 3B% 3B & payer_status = xác & kinh doanh = vaso_1346830963_biz% 40mydomain.hu & address_country = Hoa + Hoa & address_city = San Jose + & lượng = 1 & verify_sign = AVVJjJNeVwHbYcMDVfj2N1DqWwUdAtNQIpb9KIP99gZ2PY-LPoOYzSCc & payer_email = test_1346830232_per% 40mydomain.hu & txn_id = 4J747779YW528551F & payment_type = instant & last_name = T% FCk% F6rf% FAr% F3g% E9p & address_state = CA & receive_email = vaso_1346830963_biz% 40mydomain. hu & payment_fee = 0.59 & receiver_id = TGEHBCMG336WE & txn_type = web_accept & ITEM_NAME = 510 + Silk & mc_currency = USD & ITEM_NUMBER = & residence_country = US & test_ipn = 1 & handling_amount = 0.00 & transaction_subject = lolka_bolka% 3Bfalse% 3B% 3B% 3B% 3BHungary% 3B % 3B% 3B% 3B% 3B% 3B & payment_gross = 10.00 & vận chuyển = 0.00 & ipn_track_id = 6fe12a7a34b74

+0

UTF-8 có được bật trong hồ sơ PayPal của bạn không? Xem http://shwup.blogspot.sg/2009/05/paypal-ipn-issues-with-unicode.html –

+0

@jack: đây là điều đầu tiên của tôi: "Ok, tôi đã cố gắng tìm kiếm rất nhiều trên google Điều đầu tiên là kiểm tra cài đặt ngôn ngữ paypal: http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html " – vaso123

+0

ok, bây giờ, khi tôi kiểm tra url của tôi, nhận ra, tôi đã gửi một tên xấu: first_name =% C1rv% EDzt% 1Ar% 1A trong đó űő giống nhau,% 1A. Vì vậy, bây giờ tôi sẽ cố gắng để urlencode char bằng char tên. – vaso123

Trả lời

33

bạn nên thay đổi các thiết lập của bạn tại Paypal.

  • đi đến Paypal profile
  • bạn nhấp chuột công cụ bán My trong thanh bên
  • cuộn xuống cuối trang và nhấp PayPal button language encoding
  • nhấp chuột Các tuỳ chọn khác và thiết lập mã hóa sang UTF-8

End page

+3

tuyệt vời. cảm ơn.những kẻ paypal ẩn nó sâu sắc :) – vaso123

+0

Hơn nữa, bạn nên đặt mã hóa trong chữ hoa trong trang IPN của bạn: '$ req = 'cmd = _notify-validate'; \t \t foreach ($ _ POST là $ key => $ value) { \t \t \t $ value = urlencode (stripslashes ($ value)); \t \t \t $ req. = "& $ Key = $ value"; \t \t} \t \t $ req = str_replace ('= utf-8', '= UTF-8', $ req); ' – toni07

+1

Ai có thể ngờ mã hóa cho IPNS đang được "mã hóa ngôn ngữ nút PayPal" .. . Cảm ơn vì tiền hỗ trợ! – Paludis

2

Câu trả lời của Lenart rất tuyệt vời và rất hữu ích, nhưng tôi nghĩ tôi sẽ thêm vào một vài điều không phù hợp với bình luận.

  • Để làm rõ: thiết lập các charset trên trang web của bạn, trong mẫu đơn đặt hàng của bạn (ví dụ .: qua một đầu vào ẩn), là không đủ, bạn cũng cần phải thiết lập mã hóa mặc định của bạn - như được giải thích trong câu trả lời Lenart của.
    • Đó là vì tùy chọn đó chỉ áp dụng cho dữ liệu của riêng bạn, trong khi cài đặt mặc định áp dụng cho dữ liệu được PayPal gửi tới tập lệnh xử lý IPN của bạn.
    • ví dụ: có thể bạn có UTF-8 làm thông tin nhập ẩn trên mẫu đơn đặt hàng của bạn nhưng IPN PayPal vẫn ở số windows-1252. Bạn chỉ có thể khắc phục điều đó bằng cách thay đổi cài đặt mặc định trong tài khoản PayPal của mình.
  • Vì mục đích thử nghiệm, bạn sẽ muốn đặt tùy chọn mã hóa cho tài khoản người bán Sandbox của bạn, quá! (Chỉ cần đăng nhập vào https://sandbox.paypal.com bằng chi tiết người bán trong hộp cát của bạn.)
  • Sau khi đặt mã hóa mặc định, nếu bạn quay trở lại cài đặt lần nữa để kiểm tra giá trị, nó sẽ hiển thị giá trị mặc định thay vì giá trị bạn đặt. Đây là một lỗi (và minh họa về chất lượng công việc của PayPal) và giá trị bạn đặt trước đó thực sự vẫn được đặt.
    • Vì vậy, nếu bạn muốn đảm bảo bộ ký tự thực sự là gì, hãy làm như vậy bên trong tập lệnh xử lý IPN của bạn bằng cách kiểm tra giá trị charset trong thông báo POST.
  • Bộ mã mặc định được PayPal sử dụng không hoạt động bình thường.
    • ví dụ: Western European Languages (including English) sẽ khiến các ký tự có dấu tiếng Pháp không hoạt động.
    • Bạn nên sử dụng UTF8 ở mọi nơi (sẽ hiển thị là UTF-8 trong IPN.)

§

EDIT. Cuối cùng nhưng không kém phần quan:

Nếu bạn muốn thử nghiệm kịch bản IPN xử lý của bạn với các nhân vật đặc biệt hoặc có dấu, bạn có (theo lý thuyết) một vài lựa chọn khác nhau nhưng hầu hết không có tác dụng trong thực tế.

Dưới đây là một bản tóm tắt: (. Nó tạo ra các yêu cầu giả, không những thực)

  • Sử dụng IPN Simulator sẽ không làm việc vì nó không thể xác nhận yêu cầu
  • Creating a PayPal Sandbox customer account với ký tự đặc biệt bên trong firstname hoặc họ không đáng buồn.
    • Giao diện người dùng không hỗ trợ và yêu cầu bạn Only enter letters (sic).
    • Phần lớn chức năng tải lên tài khoản là không tốt, dẫn đến Something went wrong. One or more sandbox accounts could not be uploaded. Try again.
  • Một tùy chọn đó hoạt động: kiểm tra trang web của bạn với máy chủ PayPal Sandbox và chọn lương mà không có một tài khoản PayPal.
    • Bằng cách này, bạn sẽ có thể nhập các ký tự có dấu/ký tự đặc biệt cho họ và tên.
    • (Bạn sẽ nhận được số thẻ tín dụng, loại hình và thời hạn sử dụng từ `Developer/Sandbox Accounts>tài khoản khách hàng của bạn> Hồ sơ> Tài trợ -. Bất kỳ số lượng sẽ làm cho giá trị CVV)

Tôi đã báo cáo vấn đề này cho PayPal vài tháng trước nhưng không có gì thay đổi.

§

Làm việc với PayPal không vui và lãng phí thời gian. Tôi hy vọng điều này sẽ giúp bạn tiết kiệm thời gian. Đưa doanh nghiệp của bạn đến nơi khác nếu bạn có thể.

+0

Câu trả lời hay. Bản cập nhật: Người dùng sandbox giờ đây có thể thay đổi địa chỉ của mình trong quá trình thanh toán bằng paypal và nhập các ký tự đặc biệt ... – DIDoS

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