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.
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
dans l'objet createSubscriptioncustom_id