2013-06-18 5 views
0

미리 알려주세요. 제 생각에는 변함이 없지만, 저는 PHP에 상당히 익숙하지 않습니다. 개별 항목을 판매하는 온라인 상점을위한 IPN 스크립트를 작성하려고합니다. 지불이 완료되면 스크립트는 데이터베이스를 업데이트하고 가용성을 "사용 가능"에서 "사용할 수 없음"으로 변경합니다. IPN은 데이터베이스를 업데이트하는 것과는 별개로 작동합니다. 나는 스크립트에 무엇이 잘못되었는지를 알 수 없으므로 지금 당장 끝내고있다. 여기 내가 무엇을 가지고 :PayPal IPN MySQL 데이터베이스를 업데이트하지 않습니다

curl_close($ch); 

if (strcmp ($res, "VERIFIED") == 0) { 

$token = $_POST['invoice']; 
$item= $_POST['invoice']; 

$conn=new PDO("mysql:host=SERVER;dbname=MYDATABASE","NAME","PASS"); 
if ($_POST['payment_status'] == 'completed') 
{ 
    $sql="UPDATE `tbl_products` SET `id_status` = 3 WHERE `id_product`=:idproduct"; 
    $stmt=$conn->prepare($sql); 
    $stmt->bindParam(':idproduct',$item); 
    $stmt->execute(); 
} 
if ($_POST['payment_status'] == 'pending') 
{ 
    $sql="UPDATE `tbl_products` SET `id_status` = 2 WHERE `id_product`=:idproduct"; 
    $stmt=$conn->prepare($sql); 
    $stmt->bindValue(':idproduct',$item); 
    $stmt->execute(); 
} 
foreach ($_POST as $key => $value) 
{ 
    $emailtext .= $key . " = " .$value ."\n\n"; 
} 
mail("MYEMAIL", "Live-VALID IPN", $emailtext . "\n\n" . $req); 
} 
else if (strcmp ($res, "INVALID") == 0) 
{ 
// log for manual investigation 
foreach ($_POST as $key => $value) 
{ 
    $emailtext .= $key . " = " .$value ."\n\n"; 
} 
mail("MYEMAIL", "Live-INVALID IPN", $emailtext . "\n\n" . $req); 
} 
+0

같은 검사를보다. 제품과 인보이스가 다른 것입니다. –

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. "인보이스"는 항목 번호 (데이터베이스의 id_product)를 전달하는 데 사용하는 형식의 변수입니다. 나는 이것을 "item_number"로 변경하고 다시 시도했지만 여전히 운이 없다. 나는 idid 그것을 전에 "item_number"로 가지고 있지만 그것을 "청구서"로 변경하면 도움이되는지 확인하십시오. – paul

답변

0

페이팔 IPN 반환 된 상태는 첫 문자 대문자 있습니다.

따라서 Completedcompleted과 같지 않습니다. 변수에 상태를 저장하고 소문자로 만들기 위해 PHP를 strtolower 기능을 사용하는 것이 더 좋습니다이

curl_close($ch); 

if (strcmp ($res, "VERIFIED") == 0) { 

$token = $_POST['invoice']; 
$item= $_POST['invoice']; 

$conn=new PDO("mysql:host=SERVER;dbname=MYDATABASE","NAME","PASS"); 
if ($_POST['payment_status'] == 'Completed') 
{ 
    $sql="UPDATE `tbl_products` SET `id_status` = 3 WHERE `id_product`=:idproduct"; 
    $stmt=$conn->prepare($sql); 
    $stmt->bindParam(':idproduct',$item); 
    $stmt->execute(); 
} 
if ($_POST['payment_status'] == 'Pending') 
{ 
    $sql="UPDATE `tbl_products` SET `id_status` = 2 WHERE `id_product`=:idproduct"; 
    $stmt=$conn->prepare($sql); 
    $stmt->bindValue(':idproduct',$item); 
    $stmt->execute(); 
} 
foreach ($_POST as $key => $value) 
{ 
    $emailtext .= $key . " = " .$value ."\n\n"; 
} 
mail("MYEMAIL", "Live-VALID IPN", $emailtext . "\n\n" . $req); 
} 
else if (strcmp ($res, "INVALID") == 0) 
{ 
// log for manual investigation 
foreach ($_POST as $key => $value) 
{ 
    $emailtext .= $key . " = " .$value ."\n\n"; 
} 
mail("MYEMAIL", "Live-INVALID IPN", $emailtext . "\n\n" . $req); 
} 

을보십시오.

$paypalStatus = strtolower($_POST['payment_status']); 

당신은`idproduct`라는 매개 변수에 invoice``의 값을 바인딩이

if($paypalStatus == 'pending') 
+0

정말 고마워요! 당신은 마침내 나를 괴롭혔던 문제를 해결했습니다! – paul

+0

@paul이 (가) 기꺼이 도와 드리겠습니다 :) –

관련 문제