php : 贝宝定期付款令牌无效

Posted

技术标签:

【中文标题】php : 贝宝定期付款令牌无效【英文标题】:php : paypal recurring payments token is invalid 【发布时间】:2013-06-14 06:16:38 【问题描述】:

我使用的是 paypal php sdk :

https://github.com/paypal/merchant-sdk-php/blob/master/samples/RecurringPayments/CreateRecurringPaymentsProfile.php

快速结帐运作良好,但使用定期付款有问题:令牌无效。 sdk中的第152行,据说

时间戳的令牌,其值在响应中返回 第一次调用 SetExpressCheckout。称呼 为每个账单创建一次 RecurringPaymentsProfile SetExpressCheckout 请求中包含的协议并使用相同的协议 每次通话的令牌。每个 CreateRecurringPaymentsProfile 请求 创建一个单一的定期付款资料。

但我不明白如何“在 SetExpressCheckout 中调用 CreateRecurringPaymentsProfile 一次”,这是我的代码:

public function createPayToken($returnUrl, $cancelUrl, $payModeData) 
    $itemName = $payModeData['name'];
    $order    = $payModeData['fee'];

    // $category = 'Digital';
    $category = 'Physical';

    $currencyCode = "USD";

    $paymentDetails = new PaymentDetailsType();

    $itemAmount = new BasicAmountType($currencyCode, $order);

    $itemDetails = new PaymentDetailsItemType();
    $itemDetails->Name = $itemName;
    $itemDetails->Amount = $itemAmount;
    $itemDetails->Quantity = 1;
    $itemDetails->ItemCategory = $category;

    $paymentDetails->OrderTotal = new BasicAmountType($currencyCode, $order);
    $paymentDetails->PaymentAction = 'Sale';
    $paymentDetails->PaymentDetailsItem[] = $itemDetails;

    $setECReqDetails = new SetExpressCheckoutRequestDetailsType();
    $setECReqDetails->PaymentDetails[] = $paymentDetails;
    $setECReqDetails->ReqConfirmShipping = 0;
    $setECReqDetails->NoShipping = 1;
    $setECReqDetails->AddressOverride = 0;
    $setECReqDetails->CancelURL = $cancelUrl;
    $setECReqDetails->ReturnURL = $returnUrl;

    $setECReqType = new SetExpressCheckoutRequestType();
    $setECReqType->SetExpressCheckoutRequestDetails = $setECReqDetails;

    $setECReq = new SetExpressCheckoutReq();
    $setECReq->SetExpressCheckoutRequest = $setECReqType;

    $paypalService = new PayPalAPIInterfaceServiceService();


    try 
        $setECResponse = $paypalService->SetExpressCheckout($setECReq);
        exit;
     catch (Exception $ex) 
        echo $ex;
        exit;
    



    if(isset($setECResponse)) 
        if($setECResponse->Ack =='Success') 
            $token = $setECResponse->Token;
            return $token;
        
        var_dump($setECResponse);
        exit;
    

    return false;

谢谢。

【问题讨论】:

【参考方案1】:

您只需确保在您的 SetExpressCheckout 请求中包含帐单协议信息。看看这个sample of set of API calls to complete a recurring payments profile using Express Checkout。

您会注意到 SEC 请求包含 L_BILLINGTYPE0 和 L_BILLINGAGREEMENTDESCRIPTION0 的参数。您需要确保包含这些,否则您取回的令牌对 CreateRecurringPaymentsProfile 无效。

【讨论】:

以上是关于php : 贝宝定期付款令牌无效的主要内容,如果未能解决你的问题,请参考以下文章

使用 Payflow Pro 进行定期付款 - 交易类型无效

贝宝定期付款负面测试

php - 检查贝宝定期付款状态[关闭]

贝宝定期付款重定向到贝宝的主页

在贝宝(贝宝订阅)中首次定期付款时应用折扣优惠券代码

Braintree 中的付款方式令牌无效