2013-12-16 3 views
1

Я динамически шифрую мои кнопки Paypal, но при нажатии кнопки «Подписаться» я получаю сообщение от Paypal: «Ошибка отправки, пожалуйста, проверьте файл журнала для получения дополнительной информации».Шифрование кнопки PayPal

код, я использую для создания моей кнопки:

<form id="suf" onsubmit="return newUser();" action="<?php echo $PPBtnURL; ?>" method="POST"> 
    <?php 
     $form = array(); 
     $form['business']=$PPbtnUser; 
     $form['itemname']=$_POST['item_name']; 
     $form['itemnumber']=$_POST['item_number']; 
     $form['currency_code']="USD"; 
     $skip_a2 = ($res['a2'] <= $res['a1']); 
     foreach($res as $k=>$v){ 
      if($skip_a2 && ($k == "a2" || $k=="p2" || $k=="t2")){continue;} 
      if($k == "trial1" || $k == "trial2"){continue;} 
      $form[$k]=$v;         
     } 
     $form['src']=1; 
     $form['rm']=2; 
     $form['return']="https://www.mysite.com/signup2.php"; 
     $form['cancel_return']="https://www.mysite.com/"; 
     $form['bname']=$_POST['bname']; 
     $form['fname']=$_POST['fname']; 
     $form['lname']=$_POST['lname'];       
     $form['pwone']=$_POST['pwone']; 
     $form['pwtwo']=$_POST['pwtwo']; 

     $encrypted = paypal_encrypt($form); 

     function paypal_encrypt($hash){ 
      global $MY_KEY_FILE; 
      global $MY_CERT_FILE; 
      global $PAYPAL_CERT_FILE; 
      global $OPENSSL; 

      // private key file to use 
      $MY_KEY_FILE = "/home/mysite/mysite.com/prvkey.pem"; 
      // public certificate file to use 
      $MY_CERT_FILE = "/home/mysite/mysite.com/a62ecbe3015a2165c8859b953753038a-pubcert.pem"; 
      // Paypal's public certificate 
      $PAYPAL_CERT_FILE = "/home/mysite/mysite.com/paypal_cert.pem"; 
      // path to the openssl binary 
      $OPENSSL = "/usr/bin/openssl"; 

      if (!file_exists($MY_KEY_FILE)) { 
       echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n"; 
      } 
      if (!file_exists($MY_CERT_FILE)) { 
       echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n"; 
      } 
      if (!file_exists($PAYPAL_CERT_FILE)) { 
       echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n"; 
      } 

      //Assign Build Notation for PayPal Support 
      $hash['bn']= 'StellarWebSolutions.PHP_EWP2'; 

      $data = ""; 
      foreach ($hash as $key => $value) { 
       if ($value != "") { 
        $data .= "$key=$value\n"; 
       } 
      } 
      $openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " . 
       "-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | " . 
       "$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE"; 
      exec($openssl_cmd, $output, $error); 
      if(!$error){ 
       return implode("\n",$output); 
      }else{ 
       return "ERROR: encryption failed"; 
      } 
     }; 
    ?> 
    <input type="hidden" name="cmd" value="_s-xclick"> 
    <input type="hidden" name="encrypted" value="<?PHP echo $encrypted; ?>"> 
    <input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> 
    <img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> 
</form> 

Я последовал шаги и использовать большую часть кода примера here.

Что может быть причиной этой ошибки? У меня нет ошибок с PHP.

Вопрос с бонусом: какой файл журнала относится к Paypal?

+0

ваш журнал сервера? – Grumpy

+0

, какой журнал сервера? в моем журнале ipn нет ничего, и я ничего не знаю из php, как я уже сказал. кроме того, как бы paypal имел доступ к любому из журналов на моем сервере? –

ответ

1

Бит поздно, но если это помогает: я получил ту же ошибку после того, как после этого же учебника, и хотя я не вижу проблемы в вашем коде, я обнаружил, что получаю эту ошибку всякий раз, когда что-то происходит в $ form передается в paypal_encrypt(), который не понравился PayPal.

ТЛ; др: недостоверные данные в $ форме может вызвать этот «полезный» ошибка

Кроме того, имейте в виду, что вы передаете данные из $ _POST непосредственно в $ openssl_cmd без возможности избежать этого.

Смежные вопросы