paypal经常性支付令牌无效


php : paypal recurring payments token is invalid

我使用paypal php sdk与此:

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

快速结帐工作良好,但使用循环付款有问题:令牌无效。在sdk的第152行,它说

带时间戳的令牌,其值在响应中返回第一次调用SetExpressCheckout。呼叫为每个账单创建一次ecaterurringpaymentsprofile协议包含在SetExpressCheckout请求和使用相同每个呼叫的令牌。每个CreateRecurringPaymentsProfile请求创建单个经常性付款配置文件。

但我不明白如何"调用CreateRecurringPaymentsProfile一旦SetExpressCheckout",有我的代码:

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;
}

谢谢。

您只需要确保在SetExpressCheckout请求中包含了计费协议信息。看一下这个API调用的示例集,它使用Express Checkout完成一个循环支付配置文件。

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