Heim > Fragen und Antworten > Hauptteil
Ich arbeite mit PayPal NVP zusammen, um einen abonnementbasierten Dienst auf meiner Website zu erstellen. Ich akzeptiere Zahlungen über PayPal und die Zahlungsart wird wiederkehrende Zahlung sein.
Ich verwende die folgende PayPal-Methode:
//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'] );
Hier sind meine PayPal-Funktionen:
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; }
Ich sende NVP-Daten wie folgt an PayPal:
toPayPal($nvp_data, "https://api-3t." .(PAYPAL_MODE == 'TEST' ? 'sandbox.paypal' : 'paypal'). ".com/nvp");
Das Problem ist jetzt, dass in der Sandbox alles gut zu funktionieren scheint, aber in Live wird das wiederkehrende Konto nicht auf meinem Haupt-PayPal-Konto erstellt.
Habe ich etwas verpasst? Außerdem weiß ich nicht, ob ich das NVP SDK oder ähnliches installieren muss.
Auch in der Sandbox, wenn ich dabei bin, sind GetRecurringPaymentsProfileDetails
的响应上运行 print_r()
时,PROFILESTARTDATE
und NÄCHSTES ZAHLUNGSDATUM< /code> gleich. Ist das das Problem?
Vielen Dank, dass Sie sich die Zeit genommen haben.
P粉9860280392023-09-14 00:57:46
不要使用旧的 NVP API。
当前的 PayPal 订阅集成记录在此处。
为了节省时间,您可以在帐户的 GUI 中生成一个按钮:
但是一切都可以通过 API 进行管理,请参阅第一个文档及其 API 参考。
使用正在创建订阅的客户端 ID,订阅 Webhook 事件 PAYMENT.SALE.COMPLETED
,以获取有关初始订阅以及所有未来付款的通知。
如果您需要其他元数据进行跟踪,例如订阅对应的用户/个人资料,请在 createSubscription 对象中添加 custom_id