2013-12-12 3 views
0

사용자가 PerfectMoney를 사용하여 자신의 계정을 충전 할 수있는 자동 결제 시스템을 만들고 있습니다. 그들의 사이트는 다음 형식을 생성하는 SCI 양식 생성기가 있습니다.PerfectMoney API 통합 (오류 500)

<form action="https://perfectmoney.is/api/step1.asp" method="POST"> 
<input type="hidden" name="PAYEE_ACCOUNT" value="E1089920"> 
<input type="hidden" name="PAYEE_NAME" value="Test account"> 
<input type='hidden' name='PAYMENT_ID' value='<?=time() ?>'> 
<input type="text" name="PAYMENT_AMOUNT" value=""><BR> 
<input type="hidden" name="PAYMENT_UNITS" value="EUR"> 
<input type="hidden" name="STATUS_URL" value="http://dev.limited.rs/status.php"> 
<input type="hidden" name="PAYMENT_URL" value="http://dev.limited.rs/complete.php"> 
<input type="hidden" name="PAYMENT_URL_METHOD" value="POST"> 
<input type="hidden" name="NOPAYMENT_URL" value="http://dev.limited.rs/failed.php"> 
<input type="hidden" name="NOPAYMENT_URL_METHOD" value="POST"> 
<input type="hidden" name="SUGGESTED_MEMO" value=""> 
<input type="hidden" name="BAGGAGE_FIELDS" value="IDENT"><br> 
<input type="submit" name="PAYMENT_METHOD" value="Pay Now!" class="tabeladugme"><br><br> 
</form> 

PerfectMoney 사이트로 데이터를 보내는 일반 양식. 다시 PerfectMoney는 지불이 끝나면 한 번, 사용자가 다시 사이트로 리디렉션 될 때 POST 메서드를 통해 데이터를 두 번 나에게 보냅니다.

<?php 
ob_start(); 
session_start(); 
require 'config.php'; 
if (!isset($_POST['PAYMENT_ID']) || !isset($_POST['PAYEE_ACCOUNT']) || !isset($_POST['PAYMENT_AMOUNT']) || !isset($_POST['PAYMENT_UNITS']) || !isset($_POST['PAYMENT_BATCH_NUM']) || !isset($_POST['PAYER_ACCOUNT']) || !isset($_POST['TIMESTAMPGMT'])) 
{ 
    header("location:uploadfunds.php"); 
    exit(); 
} 
if (isset($_POST['PAYMENT_ID']) || isset($_POST['PAYEE_ACCOUNT']) || isset($_POST['PAYMENT_AMOUNT']) || isset($_POST['PAYMENT_UNITS']) || isset($_POST['PAYMENT_BATCH_NUM']) || isset($_POST['PAYER_ACCOUNT']) || isset($_POST['TIMESTAMPGMT'])) 
{ 
$sum=$_POST['PAYMENT_AMOUNT']; 
$passphrase=strtoupper(md5("<passphrase here>")); 
$hash=$_POST['PAYMENT_ID'].':'.$_POST['PAYEE_ACCOUNT'].':'. 
     $_POST['PAYMENT_AMOUNT'].':'.$_POST['PAYMENT_UNITS'].':'. 
     $_POST['PAYMENT_BATCH_NUM'].':'. 
     $_POST['PAYER_ACCOUNT'].':'.$passphrase.':'. 
     $_POST['TIMESTAMPGMT']; 
$hash2=strtoupper(md5($hash)); 
$pending = "Pending"; 
$sqlcheck1 = "SELECT * FROM payments WHERE Hash = '$hash' AND Status = '$pending'"; 
$rescheck1 = mysql_query($sqlcheck1); 
if (mysql_num_rows($rescheck1) != 0) 
{ 
    if($hash2==$_POST['V2_HASH']) 
    { 
     echo "Hash2 = V2_HASH"; 
     $method = "Uploaded funds"; 
     $completed = "Completed"; 
     $today = date('Y-m-d'); 
     $type = "Perfect Money"; 
     $addfunds = "UPDATE balance SET Balance = Balance + '$sum' WHERE User = '$uploader'"; 
     $addhistory = "INSERT INTO bank (User,Amount,Method,Transdate,Type,Status) VALUES ('$me','$sum','$method','$today','$type','$status')"; 
     $updatepayment = "UPDATE payments SET Status = '$completed' WHERE Hash = '$hash' AND User = '$uploader'"; 
     mysql_query($addfunds); 
     mysql_query($addhistory); 
     mysql_query($updatepayment); 
     header("bank.php"); 
     exit(); 
    } 
    if($hash2!=$_POST['V2_HASH']) 
    { 
     echo "hash2 != V2_HASH"; 
     header("location:error.php?id=2"); 
     exit(); 
    } 
} 
?> 

을 그래서 말 그대로 데이터를 비교 해요 : 지불이 완료되면, 단순히 사용자가이 같은 사이트에 돌아 오면 바로 그래서 그것을 확인하실 수 있습니다, 데이터베이스의 모든 데이터 저장을 데이터를 받기까지 2 초가 남았습니다. 일치해야합니다. 스크립트를 작성한 후 10 일이 지나면 오류가 발생하여 오류 500이 발생합니다. 로그가 표시되지 않습니다. 문제가 무엇인지 파악하고 코드를 디버깅하는 데는 문제가 없습니다.

+1

더 이상 mysql_ * 함수를 사용하지 마십시오. 그들은 비난 받고 주사에 취약합니다. 자세한 정보는 http://www.php.net/manual/en/function.mysql-query.php를 참조하십시오. – chill0r

+0

고마워,하지만이 시점에서이 오류를 고치려고 애 쓰고있다. 실제 문제라고 생각하지 않는 한, 나는 오히려 작동 코드를 만들 것이고, 나중에 pdo 또는 mysqli로 쉽게 업그레이드 할 수있다. =) –

답변

0

맞아요. 답을 찾았습니다. 수치 스럽지만 ... header("Location:bank.php"); 대신 header("bank.php"); 예. 답을 찾으려면 오랜 시간이 걸렸습니다. 인생은 그렇게합니다.