2017-07-31 14 views
0

我剛剛在PHP中集成了PayPal。 我發現了一些tutorial,我跟着它。 現在,我有問題,沙箱:PHP中的PayPal EWP的實現

The email address for the business is not present in the encrypted blob. Please contact your merchant.

我曾嘗試發送電子郵件和我的沙盒帳戶的商家ID,但沒有運氣。

我的代碼:

$form = array('cmd' => '_s-xclick', 
     'cert_id' => '*************', 
     'business' => $bussiness_id, 
     'custom' => 'test', 
     //'invoice' => '...', 
     'currency_code' => 'EUR', 
     'no_shipping' => '1', 
     'item_name' => 'TestItem', 
     'item_number' => '12345', 
     'amount' => '10' 
    ); 

$encrypted = paypal_encrypt($form); 

function paypal_encrypt($hash) 
{ 

    ...trimmed... 

    $data = ""; 
    foreach ($hash as $key => $value) { 
     if ($value != "") { 
      //echo "Adding to blob: $key=$value\n"; 
      $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); 

    ...trimmed... 
}; 
?> 

貝寶形式是:

define("SANDBOX", 1); 

$bussiness_id="[email protected]***********"; 
if(SANDBOX) $bussiness_id="***********"; 

要加密的數據

<form action="https://<?php if(SANDBOX) echo "www.sandbox"; else echo "www"; ?>.paypal.com/cgi-bin/webscr" method="post" target=_blank> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="encrypted" value="<?php echo $encrypted; ?>"> 
<input type="submit" value="Pay"> 
</form> 

的代碼只是從教程的樣品,我沒有太多編輯它。

+0

您是否在沙盒帳戶中包含該電子郵件地址? –

+0

@SirGalahad我做到了。它是沙盒帳戶中的唯一電子郵件。 –

+0

嗯,我看到它的方式,它可能有幾個問題:1.證書或密鑰文件可能無法正確讀取(缺少許可等)2.您的OPENSSL版本可能有問題。對於編號1,var轉儲變量,編號2,您只需將命令複製到命令行,看看發生了什麼 –

回答

0

只要您檢查IPN請求,我發現加密不是必需的。

我實施了沒有任何形式的加密的付款表格,當IPN出現時,我會根據數據庫和PayPal進行檢查。

如果一切都匹配,我更新數據庫並將付款標記爲已付款。如果有差異,我只記錄一切,併發送有關問題的電子郵件。