Периодический платеж в PayPal каждый месяц в переполнении стека

Я работаю над периодическим платежом для PayPal в php. Я видел несколько примеров, и ниже приведен код, который мне кажется простым для понимания.

    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" name="business" value="[email protected]">
<!-- Specify a Subscribe button. -->
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<!-- Identify the subscription. -->
<input type="hidden" name="item_name" value="Alice's Weekly Digest">
<input type="hidden" name="item_number" value="DIG Weekly">
<!-- Set the terms of the regular subscription. -->
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="a3" value="5.00">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="M">
<!-- Display the payment button. -->
<input type="image" name="submit" border="0" src="https://www.paypal.com/en_US/i/btn/btn_subscribe_LG.gif" alt="PayPal - The safer, easier way to pay online">
<img alt="" border="0" width="1" height="1" src="https://www.paypal.com/en_US/i/scr/pixel.gif" >
</form>

Согласно приведенному выше коду, он будет взимать 5 долларов каждый месяц. Я действительно не знаю, будет ли этот код работать или нет. Я также хочу знать, что в приведенном выше коде нет никакой опции для имени пользователя Paypal API, пароля и секретного ключа, он только получил бизнес, который является идентификатором электронной почты, зарегистрированным в PayPal. Я полностью сбит с толку, будет ли он работать или нет, или как сделать это правильно. Пожалуйста, предложите мне что-нибудь и как я могу получить данные после того, как пользователь отменил или успешно перечислил деньги на мой счет PayPal?

0

Решение

Чтобы избежать двойного тестирования, вы можете использовать цену для тестирования, например 0,01. Для создания регулярного платежа используйте эту HTML-форму:

<form method="post" name="formName" id="submitThisForm" action="https://www.paypal.com/cgi-bin/webscr" >
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<input type="hidden" name="business" value="[email protected]" />
<input type="hidden" name="item_name" value="Your Membership" />
<input type="hidden" name="a3" value="0.01">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="M">
<input type="hidden" name="src" value="1">
<input type="hidden" name="sra" value="1">
<input type="hidden" name="item_number" value="2" />
<input type="hidden" name="custom" value="SECURITYCODE" />
<input type="hidden" name="currency_code" value="USD" />
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="no_shipping" value="1" />
<input type="hidden" name="return" value="page going after payment" />
<input type="hidden" name="cancel_return" value="" />
<input type="hidden" name="cbt" value="ITEM DESCRIPTION" />
<input type="hidden" name="rm" value="2" />
<input type="hidden" name="notify_url" value="your_listener_file.php" />

Когда пользователь отменяет членство, PayPal уведомит об этом «notify_url» — в вашем случае это будет файл your_listener_file.php. Внутри этого файла вы должны проверить POST-переменную PayPal ‘txn_type’ = ‘subscr_cancel’. Есть несколько важных моментов:

  1. Вы должны проверить транзакцию IPN:

        $post           = array( 'cmd' => '_notify-validate' );
    foreach($_POST as $key=>$value){
    $post[$key] = $value;
    }
    $c  = curl_init();
    curl_setopt_array($c, array(
    CURLOPT_FOLLOWLOCATION  => TRUE,
    CURLOPT_RETURNTRANSFER  => TRUE,
    CURLOPT_CONNECTTIMEOUT  => 15,
    CURLOPT_MAXREDIRS       => 15,
    CURLOPT_TIMEOUT         => 15,
    CURLOPT_URL             => 'https://www.paypal.com/cgi-bin/webscr',
    CURLOPT_POST            => TRUE,
    CURLOPT_POSTFIELDS      => $post,
    ));
    $res = curl_exec($c);
    curl_close($c);
    $res    = trim($res);
    
    if( $res != 'VERIFIED' ) {
    exit();
    }
    
  2. Второе — проверьте, существует ли транзакция в вашей базе данных с использованием уникального ключа. Вы должны использовать переменную PayPal POST ‘custom’.

  3. Если транзакция существует, просто сделайте несколько простых проверок:

    if( !empty($_POST['txn_type']) && $_POST['txn_type'] == 'subscr_cancel' )
    $paypalData['approved'] = 0;
    
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]