在PHP中实现PayPal EWP

时间:2017-07-31 14:47:32

标签: php paypal

我是PHP中PayPal集成的新手。 我发现了一些tutorial,我跟着它。 现在,我遇到了沙盒问题:

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

我尝试过发送我的Sandbox帐户的电子邮件和商家ID,但没有运气。

我的代码:

define("SANDBOX", 1);

$bussiness_id="paypal@***********";
if(SANDBOX) $bussiness_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...
};
?> 

PayPal表格是:

<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>

代码只是教程中的一个示例,我没有编辑太多。

1 个答案:

答案 0 :(得分:0)

我发现只要您检查IPN请求就不需要加密。

我在没有任何加密的情况下实施了付款表单,当IPN到来时,我会根据数据库和PayPal进行检查。

如果一切都匹配,我更新数据库并将订单标记为付款。如果存在差异,我只需记录所有内容并通过电子邮件发送自己的问题。