简体   繁体   中英

PayPal recurring payments not showing in my buyer or merchant sandbox accounts?

I'm using the Paypal rest-api-sdk-php package and I can't seem to get recurring payments to show up in either my sandbox buyer or merchant/business account.

This is the code for my plan creation

public function payPalMakePlan()
{
    $plan = new Plan();
    $plan->setName('All Tools')->setDescription('test')->setType('INFINITE');

    $paymentDefinition = new PaymentDefinition();

    $paymentDefinition->setName('Regular Payments')
    ->setType('REGULAR')
    ->setFrequency('Month')
    ->setFrequencyInterval("1")
    ->setAmount(new Currency(array('value' => 49.99, 'currency' => 'USD')));

    $chargeModel = new ChargeModel();
    $chargeModel->setType('SHIPPING')->setAmount(new Currency(array('value' => 10, 'currency' => 'USD')));

    $paymentDefinition->setChargeModels(array($chargeModel));

    $merchantPreferences = new MerchantPreferences();
    $baseUrl = ResultPrinter::getBaseUrl();

    $merchantPreferences->setReturnUrl("$baseUrl/ExecuteAgreement.php?success=true")
    ->setCancelUrl("$baseUrl/ExecuteAgreement.php?success=false")
    ->setAutoBillAmount("yes")
    ->setInitialFailAmountAction("CONTINUE")
    ->setMaxFailAttempts("0")
    ->setSetupFee(new Currency(array('value' => 1, 'currency' => 'USD')));

    $plan->setPaymentDefinitions(array($paymentDefinition));
    $plan->setMerchantPreferences($merchantPreferences);

    $request = clone $plan;

    try {
        $output = $plan->create($this->apiContext);
    } catch (Exception $ex) {
        ResultPrinter::printError("Created Plan", "Plan", null, $request, $ex);
        exit(1);
    }

    ResultPrinter::printResult("Created Plan", "Plan", $output->getId(), $request, $output);

    try {
        $patch = new Patch();

        $value = new PayPalModel('{
               "state":"ACTIVE"
             }');

        $patch->setOp('replace')
            ->setPath('/')
            ->setValue($value);
        $patchRequest = new PatchRequest();
        $patchRequest->addPatch($patch);

        $plan->update($patchRequest, $this->apiContext);

        $plan = Plan::get($output->getId(), $this->apiContext);
                } catch (Exception $ex) {
                    ResultPrinter::printError("Updated the Plan to Active State", "Plan", null, $patchRequest, $ex);
            exit(1);
        }
        ResultPrinter::printResult("Updated the Plan to Active State", "Plan", $plan->getId(), $patchRequest, $plan);
}

This is the code for the agreement creation

public function payPalProcessPayment()
{
    //return $output;

    $agreement = new Agreement();

    $time = time() + 60;
    $startDate = date("Y-m-d",  $time) . 'T' . date("H:i:s",  $time) . 'Z';
    //'2018-03-22T09:13:49Z'
    $agreement->setName('Base Agreement')
    ->setDescription('Basic Agreement')
    ->setStartDate($startDate);

    $plan = new Plan();
    $plan->setId('P-5P607214NW3435943FGDG2OI');
    $agreement->setPlan($plan);

    $payer = new Payer();
    $payer->setPaymentMethod('paypal');
    $agreement->setPayer($payer);

    $shippingAddress = new ShippingAddress();
    $shippingAddress->setLine1('111 First Street')
        ->setCity('Saratoga')
        ->setState('CA')
        ->setPostalCode('95070')
        ->setCountryCode('US');
    $agreement->setShippingAddress($shippingAddress);

    $request = clone $agreement;

    try {
        $agreement = $agreement->create($this->apiContext);
        $approvalUrl = $agreement->getApprovalLink();
    } catch (Exception $ex) {
        ResultPrinter::printError("Created Billing Agreement.", "Agreement", null, $request, $ex);
        exit(1);
    }

    ResultPrinter::printResult("Created Billing Agreement. Please visit the URL to Approve.", "Agreement", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $agreement);

    //return $agreement;

    if (isset($_GET['success']) && $_GET['success'] == 'true') 
    {
        $token      = $_GET['token'];
        $agreement  = new \PayPal\Api\Agreement();

        try 
        {
            $agreement->execute($token, $this->apiContext);
        } 
        catch (Exception $ex) 
        {
            ResultPrinter::printError("Executed an Agreement", "Agreement", $agreement->getId(), $_GET['token'], $ex);
            exit(1);
        }

        ResultPrinter::printResult("Executed an Agreement", "Agreement", $agreement->getId(), $_GET['token'], $agreement);

        try 
        {
            $agreement = \PayPal\Api\Agreement::get($agreement->getId(), $this->apiContext);
        } 
        catch (Exception $ex) 
        {
            ResultPrinter::printError("Get Agreement", "Agreement", null, null, $ex);
            exit(1);
        }

        ResultPrinter::printResult("Get Agreement", "Agreement", $agreement->getId(), null, $agreement);
    } 
    else 
    {
        ResultPrinter::printResult("User Cancelled the Approval", null);
    }
}

This is the agreement URL that is created

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-20E88883UV349602M 

After I click the above URL sign into my paypal buyer account and click agree and continue I get redirected back to my "success" page with a URL of

https://www.mywebsite.com/ExecuteAgreement.php?success=true&token=EC-20E88883UV349602M 

The paypal logging is set to FINE and displays the flowing for the event

[15-03-2018 17:17:06] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.sandbox.paypal.com/v1/payments/billing-agreements/
[15-03-2018 17:17:12] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 201

What am I doing here that is causing this subscription not to show anywhere?

I was being an idiot and $agreement->execute($token, $this->apiContext); wasn't ever being executed lols.

http://paypal.github.io/PayPal-PHP-SDK/sample/doc/billing/ExecuteAgreement.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM