我们正在将计费协议与rest api配合使用,并且能够在沙盒上成功完成此操作。
现在我们有第一个月的折扣要求,
因此,如果每个月有100美元的协议,并且当用户应用某些推荐优惠券时,他将在第1个月获得10美元的折扣。即,他应在第1个月向您收取90美元,并在协议期内向其收取100美元。
除了设置费用外,我看不到任何其他选项,但这只能用于额外费用,即增加计划金额,但不能减少一些费用。
最佳答案
您必须使用Paypal Express Checkout API来执行此操作。
From paypal api documentation - https://developer.paypal.com/docs/classic/express-checkout/ht_ec-freeTrialRecurringPayments-curl-etc/
使用api方法CreateRecurringPaymentsProfile您可以更改:
RIALBILLINGPERIOD:一个试用期内的一段时间。例如一个月。
TRIALBILLINGFREQUENCY:一段时间内的收费频率(如果有)。
TRIALBILLINGFREQUENCY:一段时间内的收费频率(如果有)。
TRIALTOTALBILLINGCYCLES:试用期的长度。也就是说,试用期数。
TRIALAMT:试用期内的付款金额。例如,零。
您必须设置参数$ fields ['INITAMT'] = $ 10;以及其他每月需支付100美元的定期付款参数:
$ fields ['INITAMT'] = 10; $ fields ['L_PAYMENTREQUEST_0_AMT0'] = 100; $ fields ['AMT'] = 100;
在这种情况下,您将立即收取10美元,之后每个月将收取100美元的定期付款。
这是一个简单的示例(PHP),该示例如何设置多个产品的交易(也包括定期付款):
// SetExpressCheckout的参数,该参数将发送到PayPal
$ padata ['L_BILLINGAGREEMENTDESCRIPTION0'] ='产品说明';
$ padata ['L_BILLINGAGREEMENTDESCRIPTION0'] = $ padata ['L_BILLINGAGREEMENTDESCRIPTION0']。
'$'。$ product-> price。'/ month';
$ 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'] ='美元';
$ padata ['PAYMENTREQUEST_0_PAYMENTACTION'] ='销售';
$ padata ['PAYMENTREQUEST_0_ITEMAMT'] = $ product-> price; $ padata ['PAYMENTREQUEST_0_AMT'] = $ product-> price; $ padata ['L_BILLINGTYPE0'] ='RecurringPayments'; $ padata ['L_PAYMENTREQUEST_0_NAME0'] = $ product ->名称; $ padata ['L_PAYMENTREQUEST_0_NUMBER0'] ='322'; $ padata ['L_PAYMENTREQUEST_0_QTY0'] ='1'; $ padata ['L_PAYMENTREQUEST_0_AMT0'] = $ product-> price;
$ padata ['L_PAYMENTREQUEST_0_NAME1'] ='第二个产品名称'; $ hosteddata ['L_PAYMENTREQUEST_0_DESC1'] ='第二个产品描述'; $ hosteddata ['L_PAYMENTREQUEST_0_NUMBER1'] = $ secondproduct-> id; $ hosteddata ['ST_PAYTYRE1 '1'; $ hosteddata ['L_PAYMENTREQUEST_0_AMT1'] = $ secondproduct-> price;
$ paypal_data = http_build_query($ padata);
$ httpParsedResponseAr = $ this-> PPHttpPost('SetExpressCheckout',$ paypal_data);
//根据我们从Paypal收到的消息进行回复
if(“ SUCCESS” == strtoupper($ httpParsedResponseAr [“ ACK”])||“ SUCCESSWITHWARNING” == strtoupper($ httpParsedResponseAr [“ ACK”])){
//将收到令牌的用户重定向到贝宝商店。
$ paypalurl ='https://www.paypal.com/cgi-bin/webscr?cmd = _express-checkout&token ='。$ httpParsedResponseAr [“ TOKEN”]。''。''
header('Location:'。$ paypalurl);
}其他{
回声'错误:'.urldecode($ httpParsedResponseAr [“ L_LONGMESSAGE0”])。''。''
}
在returnurl上获取令牌后的脚本:
$ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0'] ='重复描述'; $ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0'] = $ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0']。 '$'。$ pr-> price。'/ month'; $ hosteddata ['L_PAYMENTREQUEST_0_NAME0'] = $ pr->名称; $ hosteddata ['PROFILEREFERENCE'] = $ GetExpressCheckoutDetails ['L_PAYMENTREQUEST_0_NUMBER0']; $ hosteddata ['PROFILESTARTDATE '] = date('Ym-d')。 'T'。 date('H:i:s')。'Z'; $ hosteddata ['SUBSCRIBERNAME'] = $ GetExpressCheckoutDetails ['FIRSTNAME']。 ''。 $ GetExpressCheckoutDetails ['LASTNAME']; $ hosteddata ['TOKEN'] = urlencode($ _ POST ['token']); $ hosteddata ['DESC'] = $ hosteddata ['L_BILLINGAGREEMENTDESCRIPTION0']; $ hosteddata ['AMT'] = $ pr-> price; $ hosteddata ['BILLINGPERIOD'] ='Month'; $ hosteddata ['BILLINGFREQUENCY'] ='1'; $ hosteddata ['TOTALBILLINGCYCLES'] ='12'; $ hosteddata ['REGULARTOTALBILLINGCYCLES'] ='1'; $ hosteddata ['VERSION'] = '74 .0'; $ hosteddata ['MAXFAILEDPAYMENTS'] ='1'; $ hosteddata ['L_PAYMENTREQUEST_0_QTY0'] ='1'; $ hosteddata ['L_BILLINGTYPE0'] =' RecurringPayments'; $ hosteddata ['L_PAYMENTREQUEST_0_ITEMCATEGORY0'] ='数字'; $ hosteddata ['L_PAYMENTREQUEST_0_AMT0'] = $ pr->价格; $ hosteddata ['INITAMT'] = $ pr-> price; $ hosteddata ['L_PAYMENT0QUEST = $ pr-> id; $ hosteddata ['PAYMENTREQUE ST_0_NOTIFYURL'] ='http:// site_url / paypal / ipn';
$ padata ['L_PAYMENTREQUEST_0_NAME1'] ='第二个产品名称';
$ hosteddata ['L_PAYMENTREQUEST_0_DESC1'] ='第二个产品说明'; $ hosteddata ['L_PAYMENTREQUEST_0_NUMBER1'] = $ secondproduct-> id; $ hosteddata ['L_PAYMENTREQUEST_0_QTY1'] ='1'; $ hosteddata ['L_PAYMENTRE1ST_0 ->价格;
$ paypal_data = http_build_query($ hosteddata);
$ hosted_saas_response = $ this-> PPHttpPost('CreateRecurringPaymentsProfile',$ paypal_data);
我使用了一种单独的方法将参数发布到贝宝
私有函数PPHttpPost($ methodName_,$ nvpStr_){
$ api_username ='[email protected]';
$ api_password ='QWEQWEWQEQWEQEQWE'; $ api_signature ='WQEQWEQWEQWEWQEQWEQWEQWEQWEQWE.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,CURLOPTOST_SSL_ $ 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); if(!$ httpResponse){
exit(“ $ methodName_失败:”。curl_error($ ch)。'('。curl_errno($ ch)。')');} //提取响应详细信息。$ httpResponseAr = explode(“&”,$ httpResponse) ;
$ httpParsedResponseAr = array(); foreach($ httpResponseAr as $ i => $ value){$ tmpAr = explode(“ =”,$ value); if(sizeof($ tmpAr)> 1){$ httpParsedResponseAr [$ tmpAr [0]] = $ tmpAr [1]; }}
if((0 == sizeof($ httpParsedResponseAr))||!array_key_exists('ACK',$ httpParsedResponseAr)){exit(“无效的POST请求($ nvpreq)到$ api_endpoint的HTTP响应。”);
}
返回$ httpParsedResponseAr;
}
关于paypal - 带有Rest API的较低首付款,折扣的Paypal订阅?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33623598/