Saya sedang bekerjasama dengan PayPal NVP untuk mencipta perkhidmatan berasaskan langganan di tapak web saya, saya akan menerima pembayaran melalui PayPal dan jenis pembayaran adalah pembayaran berulang.
Saya menggunakan kaedah PayPal berikut:
//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'] );
Berikut ialah fungsi PayPal saya:
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; }
Saya menghantar data nvp ke PayPal seperti ini:
toPayPal($nvp_data, "https://api-3t." .(PAYPAL_MODE == 'TEST' ? 'sandbox.paypal' : 'paypal'). ".com/nvp");
Masalahnya sekarang ialah semuanya nampaknya berfungsi dengan baik pada Kotak Pasir, tetapi dalam Live akaun berulang tidak dibuat pada akaun PayPal utama saya.
Adakah saya terlepas apa-apa? Selain itu, saya tidak tahu sama ada saya perlu memasang NVP SDK atau sesuatu.
Juga, dalam kotak pasir, apabila saya berada di GetRecurringPaymentsProfileDetails
的响应上运行 print_r()
时,PROFILESTARTDATE
dan NEXTPAYMENTDATE< /code> adalah sama. Adakah ini masalahnya?
Terima kasih semua kerana sudi meluangkan masa.
Jangan gunakan API NVP lama.
Penyepaduan langganan PayPal semasadidokumenkan di sini.
Untuk menjimatkan masa, anda boleh menjana butang dalam GUI akaun anda:
Tetapi semuanya boleh diuruskan melalui API, lihat dokumentasi pertama dan rujukan APInya.
Langgan acara webhook
PAYMENT.SALE.COMPLETED
menggunakan ID pelanggan yang membuat langganan untuk mendapatkan pemberitahuan tentang langganan awal serta semua pembayaran akan datang.Jika anda memerlukan metadata lain untuk dijejak, seperti pengguna/profil yang sepadan dengan langganan, sila tambahkan
dalam objek createSubscriptioncustom_id