PayPal : profil de paiements récurrents non créé dans Live
P粉306523969
P粉306523969 2023-09-13 08:53:03
0
1
501

Je travaille avec PayPal NVP pour créer un service par abonnement sur mon site Web, j'accepterai les paiements via PayPal et le type de paiement sera un paiement récurrent.

J'utilise la méthode PayPal suivante :

//SetExpressCheckout
    $sec_data = array(
        'USER'                           => PAYPAL_API_USERNAME,
        'PWD'                            => PAYPAL_API_PASSWORD,
        'SIGNATURE'                      => PAYPAL_API_SIGNATURE,
        'VERSION'                        => "95.0",
        'METHOD'                         => "SetExpressCheckout",
        'PAYMENTREQUEST_0_AMT'           => $total_amt,
        'RETURNURL'                      => "<url_structure>",
        'CANCELURL'                      => "<url_structure>",
        'NOSHIPPING'                     => "1",
        'SOLUTIONTYPE'                   => "Sole",
        'LOGOIMG'                        => "<url_structure>",
        'BRANDNAME'                      => "My Website",
        'PAYMENTREQUEST_0_CURRENCYCODE'  => "USD",
        'PAYMENTREQUEST_0_ITEMAMT'       => $current_plan_price,
        'PAYMENTREQUEST_0_PAYMENTACTION' => "Sale",
        'L_PAYMENTREQUEST_0_AMT0'        => $current_plan_price,
        'L_BILLINGTYPE0'                 => "RecurringPayments",
        'L_BILLINGAGREEMENTDESCRIPTION0' => "You'll be billed USD ".$total_amt.".",
        'PAYMENTREQUEST_0_DESC'          => "You'll be billed USD ".$total_amt.".",
        'PAYMENTREQUEST_0_CUSTOM'        => "Thank you for your payment!",
        'PAYMENTREQUEST_0_INVNUM'        => "INV-".$invoice_num,
        'NOTETOBUYER'                    => $current_plan_name,
        'PAYMENTREQUEST_0_PAYMENTREASON' => "None",
        'EMAIL'                          => $email,
        'LANDINGPAGE'                    => "Billing",
        'PAYMENTREQUEST_0_TAXAMT'        => $tax_amt,
        'L_PAYMENTTYPE0'                 => "InstantOnly"
    );

//GetExpressCheckoutDetails
$get_ec_data = array(
        'USER'      => PAYPAL_API_USERNAME,
        'PWD'       => PAYPAL_API_PASSWORD,
        'SIGNATURE' => PAYPAL_API_SIGNATURE,
        'TOKEN'     => $ec_token,
        'METHOD'    => "GetExpressCheckoutDetails",
        'VERSION'   => "95.0"
    );

//DoExpressCheckoutPayment
$decp_data = array(
                'USER'                          => PAYPAL_API_USERNAME,
                'PWD'                           => PAYPAL_API_PASSWORD,
                'SIGNATURE'                     => PAYPAL_API_SIGNATURE,
                'METHOD'                        => "DoExpressCheckoutPayment",
                'TOKEN'                         => $ec_token,
                'PAYERID'                       => $ec_response['PAYERID'],
                'PAYMENTREQUEST_0_AMT'          => $total_amt,
                'PAYMENTREQUEST_0_CURRENCYCODE' => "USD",
                'PAYMENTREQUEST_0_ITEMAMT'      => $total_amt,
                'VERSION'                       => "95.0"
            );

//CreateRecurringPaymentsProfile
$crpp_array = array(
                'USER'               => PAYPAL_API_USERNAME,
                'PWD'                => PAYPAL_API_PASSWORD,
                'SIGNATURE'          => PAYPAL_API_SIGNATURE,
                'VERSION'            => "95.0",
                'METHOD'             => "CreateRecurringPaymentsProfile",
                'TOKEN'              => $ec_token,
                'PROFILESTARTDATE'   => $last_payment_date,
                'DESC'               => "You'll be billed USD ".$total_amt.".",
                'BILLINGPERIOD'      => "Month",
                'BILLINGFREQUENCY'   => "12",
                'TOTALBILLINGCYCLES' => '0',
                'AMT'                => $total_amt,
                'CURRENCYCODE'       => "USD",
                'EMAIL'              => $get_cx_data['cx_email'],
                'STREET'             => "Bedford Ave",
                'CITY'               => "Brooklyn",
                'STATE'              => "New York",
                'COUNTRYCODE'        => "US",
                'ZIP'                => "11211"
            );

//GetRecurringPaymentsProfileDetails
$grppd_array = array(
                    'USER'      => PAYPAL_API_USERNAME,
                    'PWD'       => PAYPAL_API_PASSWORD,
                    'SIGNATURE' => PAYPAL_API_SIGNATURE,
                    'VERSION'   => "95.0",
                    'METHOD'    => 'GetRecurringPaymentsProfileDetails',
                    'PROFILEID' => $get_crpp_response['PROFILEID']
                );

Voici mes fonctions PayPal :

function toPayPal($inputArray, $PayPalURL) {
        $nvp_post_data_str   = '';

        foreach($inputArray as $key => $value) {
            $nvp_post_data_str .= $key.'='.urlencode($value).'&';
        }

        $nvp_post_data_str = substr($nvp_post_data_str, 0, strlen($nvp_post_data_str) - 1);
        $ch = curl_init();
        
        curl_setopt($ch, CURLOPT_URL, $PayPalURL);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvp_post_data_str);
        $httpResponse = curl_exec($ch);
        
        //$httpResponse;
        
        $httpResponse = explode('&', $httpResponse);
        
        for($i = 0; $i < count($httpResponse); $i++) {
            $temp_array = explode('=', $httpResponse[$i]);
            $httpResponseArray[$temp_array[0]] = urldecode($temp_array[1]);
        }
        
        return $httpResponseArray;
    }

J'envoie des données nvp à PayPal comme ceci :

toPayPal($nvp_data, "https://api-3t." .(PAYPAL_MODE == 'TEST' ? 'sandbox.paypal' : 'paypal'). ".com/nvp");

Le problème maintenant est que tout semble bien fonctionner sur le Sandbox, mais dans Live, le compte récurrent n'est pas créé sur mon compte PayPal principal.

Est-ce que j'ai raté quelque chose ? De plus, je ne sais pas si je dois installer le SDK NVP ou quelque chose comme ça.

De plus, dans le bac à sable, quand je suis dans GetRecurringPaymentsProfileDetails 的响应上运行 print_r() 时,PROFILESTARTDATE et NEXTPAYMENTDATE< /code> sont les mêmes. Est-ce là le problème ?

Merci à tous d'avoir pris le temps.

P粉306523969
P粉306523969

répondre à tous(1)
P粉986028039

N'utilisez pas l'ancienne API NVP.

L'intégration actuelle de l'abonnement PayPalest documentée ici.

Pour gagner du temps, vous pouvez générer un bouton dans l'interface graphique de votre compte :

Mais tout peut être géré via API, voir la première documentation et sa référence API.


Abonnez-vous à l'événement webhook PAYMENT.SALE.COMPLETED en utilisant l'identifiant client qui crée l'abonnement pour recevoir des notifications sur l'abonnement initial ainsi que sur tous les paiements futurs.

Si vous avez besoin d'autres métadonnées à suivre, telles que l'utilisateur/le profil correspondant à l'abonnement, veuillez ajouter custom_id

dans l'objet createSubscription
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!