2015-10-15 4 views
0

Я создаю зону членства, и я использую avangate.com в качестве платежной системы.Как настроить повторную подписку с помощью Avangate

Я просто хочу обновить дату подписчика в базе данных с новой датой истечения срока действия при повторной оплате.

Я получил этот IPN код из них в качестве отправной точки:

<?php 
/* Internet Payment Notification */ 

$pass  = "AABBCCDDEEFF"; /* pass to compute HASH */ 
$result  = "";    /* string for compute HASH for received data */ 
$return  = "";    /* string to compute HASH for return result */ 
$signature = $_POST["HASH"]; /* HASH received */ 
$body  = ""; 

/* read info received */ 
ob_start(); 
while(list($key, $val) = each($_POST)){ 
    $$key=$val; 

    /* get values */ 
    if($key != "HASH"){ 

     if(is_array($val)) $result .= ArrayExpand($val); 
     else{ 
      $size  = strlen(StripSlashes($val)); 
      $result .= $size.StripSlashes($val); 
     } 

    } 

} 
$body = ob_get_contents(); 
ob_end_flush(); 

$date_return = date("YmdGis"); 

$return = strlen($_POST["IPN_PID"][0]).$_POST["IPN_PID"][0].strlen($_POST["IPN_PNAME"][0]).$_POST["IPN_PNAME"][0]; 
$return .= strlen($_POST["IPN_DATE"]).$_POST["IPN_DATE"].strlen($date_return).$date_return; 

function ArrayExpand($array){ 
    $retval = ""; 
    for($i = 0; $i < sizeof($array); $i++){ 
     $size  = strlen(StripSlashes($array[$i])); 
     $retval .= $size.StripSlashes($array[$i]); 
    } 

    return $retval; 
} 

function hmac ($key, $data){ 
    $b = 64; // byte length for md5 
    if (strlen($key) > $b) { 
     $key = pack("H*",md5($key)); 
    } 
    $key = str_pad($key, $b, chr(0x00)); 
    $ipad = str_pad('', $b, chr(0x36)); 
    $opad = str_pad('', $b, chr(0x5c)); 
    $k_ipad = $key^$ipad ; 
    $k_opad = $key^$opad; 
    return md5($k_opad . pack("H*",md5($k_ipad . $data))); 
} 

$hash = hmac($pass, $result); /* HASH for data received */ 

$body .= $result."\r\n\r\nHash: ".$hash."\r\n\r\nSignature: ".$signature."\r\n\r\nReturnSTR: ".$return; 

if($hash == $signature){ 
    echo "Verified OK!"; 

    /* ePayment response */ 
    $result_hash = hmac($pass, $return); 
    echo "<EPAYMENT>".$date_return."|".$result_hash."</EPAYMENT>"; 

    /* Begin automated procedures (START YOUR CODE)*/ 


}else{ 
    /* warning email */ 
    mail("[email protected]","BAD IPN Signature", $body,""); 
} 
?> 

ответ

0

Вы должны использовать ответ LCN, а не IPN. С LCN в массиве данных есть поле EXPIRATION_DATE, которое сообщает нам новые данные об истечении срока действия.

Вам также необходимо проверить правильность ходатайства (продукт, подписка и т. Д.), Но основная часть использует крючок LCN (уведомление об изменении лицензии).