修改试用期或为现有Paypal订阅添加第二个试用期



我正在尝试修改现有Paypal订阅的试用期。然而,似乎a1, p1和t1值总是被忽略。通过使用a3, p3和t3来更改总和和周期确实有效(IPN通知也正在发送)。

我还尝试添加第二个试用期(同时保持相同的值为第一个试用期),但这也不起作用。

我已经阅读了Paypal的文档,但是我找不到任何关于修改试用期的内容。这可能吗?我错过了什么?

下面是我的示例代码:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" name="business" value="XXXXX">
<!-- Specify a Subscribe button. -->
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<!-- Identify the subscription. -->
<input type="hidden" name="item_name" value="Item Name">
<!-- Set the revised subscription price and terms. -->
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="a1" value="1">
<input type="hidden" name="p1" value="78">
<input type="hidden" name="t1" value="D">
<input type="hidden" name="a3" value="90.88">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="Y">
<!-- Set recurring payments until canceled. -->
<input type="hidden" name="src" value="1">
<!-- Let current subscribers modify only. -->
<input type="hidden" name="modify" value="2">
<input name="custom" value="user access token" type="hidden" />
<input type="hidden" name="notify_url" value="http://..." />
<input type="hidden" name="cancel_return" value="http://..." />
<input type="hidden" name="return" value="http://..." />
<input type="hidden" name="email" value="user email" />
<!-- Display the payment button. -->
<input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online.">
<img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
</form>

您必须使用paypal express checkout api来完成此操作。

来自paypal api文档- https://developer.paypal.com/docs/classic/express-checkout/ht_ec-freeTrialRecurringPayments-curl-etc/

使用api方法CreateRecurringPaymentsProfile,您可以更改:

  1. RIALBILLINGPERIOD:一个试用期内的时长。例如,一个月。
  2. TRIALBILLINGFREQUENCY:在一段时间内收费的频率,如果有的话。
  3. TRIALBILLINGFREQUENCY:在一段时间内收费的频率,如果有的话。
  4. TRIALTOTALBILLINGCYCLES:试用期的长度。即试验的周期数。
  5. TRIALAMT:试用期内的付款金额。例如:0。

要创建循环配置文件,请遵循以下(PHP)示例:

//SetExpressCheckout的参数,这将被发送到PayPal
$padata['L_BILLINGAGREEMENTDESCRIPTION0'] = '产品描述';$padata['L_BILLINGAGREEMENTDESCRIPTION0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0']。"美元"。产品->价格。美元/月";$padata['L_PAYMENTREQUEST_0_DESC0'] = $padata['L_BILLINGAGREEMENTDESCRIPTION0']。' $'.$product->price.'/month';
$padata['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn';$padata['PAYMENTREQUEST_0_DESC'] = $product->name;$padata['RETURNURL'] = 'http://site_url/paypal/returnurl';$padata['CANCELURL'] = 'http://site_url/paypal/cancelurl';
$padata['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';$padata['PAYMENTREQUEST_0_PAYMENTACTION'] = 'SALE';
$padata[' PAYMENTREQUEST_0_ITEMAMT'] = $product->price;
$padata['L_BILLINGTYPE0'] = 'RecurringPayments';
$padata[' L_PAYMENTREQUEST_0_NUMBER0']= '322';
$padata['L_PAYMENTREQUEST_0_QTY0'] = '1';
$padata['L_PAYMENTREQUEST_0_AMT0'] = $product->price;
$paypal_data = http_build_query($padata);$httpParsedResponseAr = $this->PPHttpPost('SetExpressCheckout', $paypal_data);//根据我们从Paypal收到的消息进行响应if("SUCCESS" == strtoupper($httpParsedResponseAr["ACK"]) || "SUCCESSWITHWARNING" == strtoupper($httpParsedResponseAr["ACK"])){//重定向用户到PayPal商店与令牌收到。paypalurl = ' https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token= '。httpParsedResponseAr美元("令牌")。";头(地点:。paypalurl美元);其他}{echo '错误:' .urldecode ($ httpParsedResponseAr [" L_LONGMESSAGE0 "])。";
}

页面returnurl:

$ hostddata ['L_BILLINGAGREEMENTDESCRIPTION0'] = '循环描述';
$ hostddata ['L_BILLINGAGREEMENTDESCRIPTION0'] = $ hostddata ['L_BILLINGAGREEMENTDESCRIPTION0'] .
$ hostddata ['L_BILLINGAGREEMENTDESCRIPTION0']。
$hosteddata['L_PAYMENTREQUEST_0_NAME0'] = $pr->name;
$hosteddata['PROFILEREFERENCE'] = $GetExpressCheckoutDetails['L_PAYMENTREQUEST_0_NUMBER0'];
$hosteddata['PROFILESTARTDATE'] = date('Y-m-d')。"T"。
$ hostddata ['SUBSCRIBERNAME'] = $GetExpressCheckoutDetails['FIRSTNAME'] . date('H:i:s').'Z';’"。$GetExpressCheckoutDetails['LASTNAME'];
$ hostddata ['TOKEN'] = urlencode($_POST[' TOKEN']);
$ hostddata ['DESC'] = $ hostddata ['L_BILLINGAGREEMENTDESCRIPTION0'];
$ hostddata ['AMT'] = $pr->price;
$ hostddata ['BILLINGPERIOD'] = 'Month';
$ hostddata ['BILLINGFREQUENCY'] = '1';
$ hostddata ['TOTALBILLINGCYCLES'] =
$ hostddata ['REGULARTOTALBILLINGCYCLES'] = '1';
$ hostddata ['VERSION'] = '74.0';
$ hostddata ['MAXFAILEDPAYMENTS'] = '1';
$ hostddata ['L_BILLINGTYPE0'] = 'RecurringPayments';
$ hostddata ['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] = 'Digital';
$ hostddata ['L_PAYMENTREQUEST_0_AMT0'] = $pr->price;
$ hostddata ['L_PAYMENTREQUEST_0_AMT0'] = $pr->price;
$ hostddata ['L_PAYMENTREQUEST_0_AMT0'] = 'INITAMT']
$ hostddata ['L_PAYMENTREQUEST_0_NUMBER0'] = $pr->id;
$ hostddata ['PAYMENTREQUEST_0_NOTIFYURL'] = 'http://site_url/paypal/ipn';
$paypal_data = http_build_query($ hostddata);$hosted_saas_response = $this->PPHttpPost('CreateRecurringPaymentsProfile', $paypal_data);

我使用了一个单独的方法将参数发送到paypal

private function PPHttpPost($methodName_, $nvpStr_) {
$api_username = 'yourpaypal@email.com';$api_password = ' qweqqeqweqqqwe ';
$api_signature = ' wqeqweqweqweqweqweqweqwe . ct ';
$api_endpoint = "https://api-3t.paypal.com/nvp";
$version = '124.0';$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint);
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_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);$nvpreq = "METHOD=$methodName_&VERSION=$version&PWD=$api_password&USER=$api_username&SIGNATURE=$api_signature&$nvpStr_";
curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);
$httpResponse = curl_exec($ch);如果(! $ httpResponse) {退出(" $ methodName_失败:".curl_error (ch美元)。"(".curl_errno (ch)美元。)"),
}//提取响应细节。$httpResponseAr = explosion ("&", $httpResponse);
$httpParsedResponseAr = array();foreach ($httpResponseAr作为$i => $value) {$tmpAr = explosion ("=", $value);if(sizeof($tmpAr)> 1) {$httpParsedResponseAr[$tmpAr[0]] = $tmpAr[1];}}if((0 == sizeof($httpParsedResponseAr)) || !array_key_exists('ACK', $httpParsedResponseAr)) {
exit(" POST request($nvpreq) to $api_endpoint.");
}返回httpParsedResponseAr美元;
}

最新更新