나는 joomla 1.5 웹 사이트에서 paypal 지불을 veryfied 문제가 있습니다. 나는 지불이 성공하더라도 항상 "INVALID"를 얻는다. paypal에서 POST 값을 가져올 수 없으며 GET 값만 얻을 수 있습니다. 이 코드 또는 설정의 문제점. 내 controller.php에를 MyComponent의 줌라에서 sandbox.paypal.comJoomla 페이팔 IPN은 항상 INVALID를 반환합니다
IPN : Turn On
Message delivery : enabled
notification url : http://mysite.com/index.php?option=com_order&type=orders
auto return : on
return url : http://mysite.com/index.php?option=com_order&type=orders
PDT : on
Encrypted Website Payments : off
PayPal Account Optional : off
에서
내 페이팔 설정
payment.php
<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr" name="paypal">
<input type="hidden" value="_xclick" name="cmd">
<input type="hidden" value="[email protected]" name="business">
<input type="hidden" value="test payment" name="item_name" id="item_name">
<input type="hidden" value="11" name="item_number" id="item_number">
<input type="hidden" value="0.1" name="amount" id="amount">
<input type="hidden" value="USD" name="currency_code" id="currency_code">
<input type="hidden" value="<?php echo JURI::base();?>index.php?option=com_order&type=orders" name="return" id="return">
<input type="hidden" value="<?php echo JURI::base();?>index.php?option=com_order&type=orders" name="cancel_return" id="cancel_return">
<input type="hidden" value="<?php echo JURI::base();?>index.php?option=com_order&task=orders" name="notify_url" id="notify_url">
<input type="hidden" name="rm" value="2">
<table class="tblpay">
.....
</table>
</form>
이
function display()
{
$user =& JFactory::getUser();
$type = JRequest::getVar('type');
switch($type) {
...
case 'orders':
$viewName = 'orders';
$viewLayout = 'orderslayout';
if (JRequest::getVar('tx') != null){
$this->processpayment();
$viewLayout = 'paymentlayout';
}
break;
...
}
function processpayment(){
// Response from Paypal
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
$get = JRequest::get('get');
foreach ($get as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// assign posted variables to local variables
$data['amount'] = JRequest::getVar('amt');
$data['currency'] = JRequest::getVar('cc');
$data['cm'] = JRequest::getVar('cm');
$data['idorder'] = JRequest::getVar('item_number');
$data['st'] = JRequest::getVar('st');
$data['tx'] = JRequest::getVar('tx');
$data['option'] = JRequest::getVar('option');
$data['type'] = JRequest::getVar('type');
$data['paymentresult'] = "";
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp($res, "VERIFIED") == 0) {
...
}else if (strcmp ($res, "INVALID") == 0) {
...
}
}
fclose ($fp);
}
//$redirectTo = str_replace("amp;","",JRoute::_('index.php?option='.JRequest::getVar('option').'&type=orders&layout=paymentlayout'));
//$this->setRedirect($redirectTo, '');
}
이 인 결과 페이팔 (jdump 사용)에서 얻을 :
[string] option = "com_order"
[string] type = "orders"
[string] tx = "9D9224627W344360N"
[string] st = "Completed"
[string] amt = "0.10"
[string] cc = "USD"
[string] cm = ""
[string] item_number = "41"
[string] Itemid = "" --> why i get this because i never send itemid?
나는 happenned 무슨 일인지 확실하지 않은 것 같습니다, 아마도 페이팔은 그들의 문자열 또는 더 이상 일치하지 않도록 뭔가를 강화했다 것 같습니다. 그것의 진짜 깡패, 나는 하루 종일 고투하고있다. 내가 해결책을 얻으면 게시 할 것이다 ... –