【问题标题】:how to get transaction id from CreateRecurringPaymentsProfile paypal api如何从 CreateRecurringPaymentsProfile paypal api 获取交易 ID
【发布时间】:2015-11-06 09:24:42
【问题描述】:

我正在尝试使用贝宝创建定期付款。为此,我正在使用此功能,

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 来完成付款。但随后金额从贝宝中扣除 2 次。

1)做完DoExpressCheckoutPayment 2)创建后recurring profile

我在定期付款方面做错了什么? 我只是在想,首先我需要做expresscheckout 然后我需要创建循环配置文件并将开始日期设置为明年。所以第一笔金额将扣除DoExpressCheckoutPayment,然后从明年开始扣除recurring profile

有没有更好的方式来使用快速结账进行定期付款?在贝宝中使用recurring payment 太混乱了。

请帮我解决这个问题。提前致谢。

【问题讨论】:

    标签: php paypal


    【解决方案1】:

    当您使用令牌值调用 CreateRecurringPaymentsProfile API 时,不会返回交易 ID。 参考https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/CreateRecurringPaymentsProfile_API_Operation_NVP/(CreateRecurringPaymentsProfile 响应消息部分) TRANSACTIONID 直接信用卡初始付款的交易ID。(不适用于Pay with PayPal 方式)

    如果您未在 API 请求中设置 INITAMT 参数,则 CreateRecurringPaymentsProfile API 不会向买家扣款。 在您的示例中。
    2)创建重复配置文件后,没有从买家那里扣除任何款项。 1)做DoExpressCheckoutPayment后,会从买家那里扣钱。

    一般只扣一次钱。

    【讨论】:

    • 是否需要在api请求中添加INITAMT参数才能在响应中获取transaction id
    【解决方案2】:

    我们调用 CreateRecurringPaymentsProfile(不带 INITAMT 值)来创建订阅。然后我们等待第一个 recurring_payment IPN 通知,该通知应该很快就会到达。这是第一次付款的通知,它包含一个交易 id (txn_id)。

    【讨论】:

      猜你喜欢
      • 2019-12-21
      • 2023-03-21
      • 2014-04-29
      • 2020-10-14
      • 2012-01-26
      • 2014-05-11
      • 2017-09-21
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多