I'm trying to create a form to allow my Japanese users to submit their registration details and have them prepopulate their PayPal payment form, but I'm running into some strange problems. First it was a problem of character encoding -- Japanese characters submitted through the form on my site were showing up in PayPal as numerical values. I solved this by simply changing the header of my Joomla english language file to "<?xml version="1.0" encoding="UTF-8"?>".
Now Japanese characters will display on my PayPal form, but sometimes they aren't the right ones. The phone number and email address fields always prepopulate correctly, but all the other fields are some times affected by a seemingly random character switch. If, for example, I enter "参加申込" for the first_name field, it shows up in PayPal as "蜿ょ刈逕ウ霎シ" (it's just a bunch of random characters). Just "参加" comes through as "蜿ょ刈". But "参加者数" makes it from my form to PayPal with no change.
Roman characters always make it through fine, and some Japanese characters aren't affected either. The email and telephone fields are completely unaffected.
I checked my error log, which is showing this
"Error: flashReference.clearPD is not a function
Source File: https://www.paypalobjects.com/MERCHANTPAYMENTWEB-580-20090715-1/js/rosettaLang.js
Line: 59"I don't know whether or not that's related. Is this a problem on PayPal's end, or is it more likely something I've done wrong? The data submitted through the form logs accurately in my databases and email notifications, but the jump over to PayPal gets things all jumbled up.
Here's my submit code for reference:
// get values from submitdata
$business = '';
$item_name = '';
$item_number = '';
$amount = '';
$first_name = '';
$last_name = '';
$address1 = '';
$address2 = '';
$city = '';
$state = '';
$zip = '';
$email = '';
$night_phone_a = '';
$night_phone_b = '';
$night_phone_c = '';
$quantity = '';
foreach ($this->submitdata as $data)
switch ($data[_FF_DATA_NAME]) {
case 'business' : $business = $data[_FF_DATA_VALUE]; break;
case 'item_name' : $item_name = $data[_FF_DATA_VALUE]; break;
case 'item_number' : $item_number = $data[_FF_DATA_VALUE]; break;
case 'amount' : $amount = $data[_FF_DATA_VALUE]; break;
case 'first_name' : $first_name = $data[_FF_DATA_VALUE]; break;
case 'last_name' : $last_name = $data[_FF_DATA_VALUE]; break;
case 'address1' : $address1 = $data[_FF_DATA_VALUE]; break;
case 'address2' : $address2 = $data[_FF_DATA_VALUE]; break;
case 'city' : $city = $data[_FF_DATA_VALUE]; break;
case 'state' : $state = $data[_FF_DATA_VALUE]; break;
case 'zip' : $zip = $data[_FF_DATA_VALUE]; break;
case 'email' : $email = $data[_FF_DATA_VALUE]; break;
case 'night_phone_a' : $night_phone_a = $data[_FF_DATA_VALUE]; break;
case 'night_phone_b' : $night_phone_b = $data[_FF_DATA_VALUE]; break;
case 'night_phone_c' : $night_phone_c = $data[_FF_DATA_VALUE]; break;
case 'quantity' : $quantity = $data[_FF_DATA_VALUE]; break;
default : break;
} // switch
// send form to Paypal
$nl = "\n";
echo
'<script type="text/javascript">'.$nl.
'<!--'.$nl.
'onload = function() { document.payment.submit(); }'.$nl.
'// -->'.$nl.
'</script>'.$nl.
'<form name="payment" action="https://www.paypal.com/j1/cgi-bin/webscr" method="post" target="_blank">'.$nl.
'<input type="hidden" name="cmd" value="_xclick"/>'.$nl.
'<input type="hidden" name="currency_code" value="JPY"/>'.$nl.
'<input type="hidden" name="tax" value="0"/>'.$nl.
'<input type="hidden" name="no_shipping" value="1"/>'.$nl.
'<input name="business" value="xxxxxxxxxxxxxx" type="hidden">'.$nl.
'<input name="country" value="JP" type="hidden">'.$nl.
'<input name="lc" value="JP" type="hidden">'.$nl.
'<input name="item_name" value="xxxxxxxxxxxx" type="hidden">'.$nl.
'<input type="hidden" name="item_number" value="'.$item_number.'"/>'.$nl.
'<input type="hidden" name="amount" value="'.$amount.'"/>'.$nl.
'<input type="hidden" name="first_name" value="'.$first_name.'"/>'.$nl.
'<input type="hidden" name="last_name" value="'.$last_name.'"/>'.$nl.
'<input type="hidden" name="address1" value="'.$address1.'"/>'.$nl.
'<input type="hidden" name="address2" value="'.$address2.'"/>'.$nl.
'<input type="hidden" name="city" value="'.$city.'"/>'.$nl.
'<input type="hidden" name="state" value="'.$state.'"/>'.$nl.
'<input type="hidden" name="zip" value="'.$zip.'"/>'.$nl.
'<input type="hidden" name="email" value="'.$email.'"/>'.$nl.
'<input type="hidden" name="night_phone_b" value="'.$night_phone_b.'"/>'.$nl.
'<input type="hidden" name="quantity" value="'.$quantity.'"/>'.$nl.
'<input type="hidden" name="return" value="xxxxxxxx">'.$nl.
'<input type="hidden" name="cancel_return" value="xxxxxxxxxxxx">'.$nl.
'<input type="hidden" name="image_url" value="xxxxxxxxxxxx">'.$nl.
'<input type="hidden" name="cpp_headerback_color" value="009f9d">'.$nl.
'<input type="hidden" name="cpp_headerborder_color" value="007876">'.$nl.
'<input type="hidden" name="cpp_payflow_color" value="def6f6">'.$nl.
'<input type="hidden" name="discount_rate" value="0">'.$nl.
'<input type="hidden" name="discount_rate2" value="35">'.$nl.
'</form>'.$nl.
'</body>'.$nl.
'</html>'.$nl;
exit;