2013-06-18 54 views
2

我使用貝寶的PHP SDK與此:PHP:貝寶定期付款令牌無效

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

快速結帳是行之有效的,但使用定期付款有問題:令牌無效。 在SDK 152線,有人說

一個時間戳標記,其值在響應 到第一次調用SetExpressCheckout返回。撥打 CreateRecurringPaymentsProfile一次爲每個計費 協議包含在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; 
} 

謝謝。

回答