我正在尝试使用paypal创建定期付款。为此,我正在使用此功能,
function CallShortcutExpressCheckout( $paymentAmount, $currencyCodeType, $paymentType, $returnURL, $cancelURL)
{
$nvpstr="&AMT=". $paymentAmount;
$nvpstr = $nvpstr . "&PAYMENTACTION=" . $paymentType;
$nvpstr = $nvpstr . "&BILLINGAGREEMENTDESCRIPTION=".urlencode($_SESSION['cart']['total_amount']['name']);
$nvpstr = $nvpstr . "&BILLINGTYPE=RecurringPayments";
$nvpstr = $nvpstr . "&RETURNURL=" . $returnURL;
$nvpstr = $nvpstr . "&INVNUM=" . $_SESSION['cart']['inv'];
$nvpstr = $nvpstr . "&CANCELURL=" . $cancelURL;
$nvpstr = $nvpstr . "&CURRENCYCODE=" . $currencyCodeType;
$_SESSION["currencyCodeType"] = $currencyCodeType;
$_SESSION["PaymentType"] = $paymentType;
$resArray=hash_call("SetExpressCheckout", $nvpstr);
$ack = strtoupper($resArray["ACK"]);
if($ack=="SUCCESS" || $ack=="SUCCESSWITHWARNING")
{
$token = urldecode($resArray["TOKEN"]);
$_SESSION['TOKEN']=$token;
}
return $resArray;
}
返回令牌,然后我使用此功能创建定期配置文件
function CreateRecurringPaymentsProfile()
{
$token = urlencode($_SESSION['TOKEN']);
$email = urlencode($_SESSION['email']);
$shipToName = urlencode($_SESSION['shipToName']);
$shipToStreet = urlencode($_SESSION['shipToStreet']);
$shipToCity = urlencode($_SESSION['shipToCity']);
$shipToState = urlencode($_SESSION['shipToState']);
$shipToZip = urlencode($_SESSION['shipToZip']);
$shipToCountry = urlencode($_SESSION['shipToCountry']);
$nvpstr="&TOKEN=".$token;
#$nvpstr.="&EMAIL=".$email;
$nvpstr.="&SHIPTONAME=".$shipToName;
$nvpstr.="&SHIPTOSTREET=".$shipToStreet;
$nvpstr.="&SHIPTOCITY=".$shipToCity;
$nvpstr.="&SHIPTOSTATE=".$shipToState;
$nvpstr.= "&DESC=".$_SESSION['cart']['total_amount']['name'];
$nvpstr.="&SHIPTOZIP=".$shipToZip;
$nvpstr.="&SHIPTOCOUNTRY=".$shipToCountry;
/*$nvpstr.="&PROFILESTARTDATE=".urlencode("2015-12-01T0:0:0");*/
$nvpstr .= "&PROFILESTARTDATE=".date("Y-m-d", mktime(0, 0, 0, date("m", time()), date("d", time()), date("Y", time())))."T00:00:00Z";
$nvpstr.="&BILLINGPERIOD=Year";
$nvpstr.="&BILLINGFREQUENCY=1";
$nvpstr.="&AMT=".$_SESSION['cart']['total_amount']['total'];
$nvpstr.="&CURRENCYCODE=USD";
$nvpstr.="&IPADDRESS=" . $_SERVER['REMOTE_ADDR'];
$resArray=hash_call("CreateRecurringPaymentsProfile",$nvpstr);
$ack = strtoupper($resArray["ACK"]);
return $resArray;
}
但它让我回到profile-id
而不是transaction-id
。我在某处读到我们必须使用DoExpressCheckoutPayment
来完成付款。但随后金额从paypal扣除2次。
1)完成DoExpressCheckoutPayment
之后
2)创建recurring profile
我对经常性付款做错了什么?
我只是想,首先我需要做expresscheckout
然后我需要创建定期的个人资料并将startdate设置为明年。因此,第一笔金额将从DoExpressCheckoutPayment
扣除,然后从明年扣除recurring profile
。
使用快速结账可以使用定期付款更好的方式吗?
在PayPal中使用recurring payment
太麻烦了。
请帮我解决这个问题。提前谢谢。
答案 0 :(得分:1)
当您使用令牌值调用CreateRecurringPaymentsProfile API时,不会返回任何事务ID。 请参阅https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/CreateRecurringPaymentsProfile_API_Operation_NVP/(CreateRecurringPaymentsProfile响应消息部分) TRANSACTIONID来自直接信用卡初始付款的交易ID。(它不适用于使用PayPal方法付款)
如果您未在API请求中设置INITAMT参数,则 CreateRecurringPaymentsProfile API不会从买方扣款。
在你的例子中。
2)创建定期配置文件后,不会从买方扣除任何金额。
1)在完成DoExpressCheckoutPayment之后,将从买方扣除资金。
一般来说,它只扣除一次钱。
答案 1 :(得分:0)
我们调用CreateRecurringPaymentsProfile(没有INITAMT值)来创建订阅。然后我们等待第一次recurring_payment IPN通知,该通知应该很快到达。这是第一笔付款的通知,它包含交易ID(txn_id)。