【问题标题】:Create a recurring or subscription payment using Payum Stripe on Symfony 2在 Symfony 2 上使用 Payum Stripe 创建定期或订阅付款
【发布时间】:2016-04-26 19:35:13
【问题描述】:

我正在尝试在 Symfony 2 上使用 Payum 将计划附加到 Stripe 收费。我能够成功地从卡中收费,但我不明白如何将计划添加到收费中。

我开始研究直接使用 Stripe_Customer 对象,而不是使用 Payum,但我在获取 Stripe 令牌时遇到了麻烦。我向付款对象添加了一个计划方法。任何帮助将不胜感激!

<?php
namespace SEC\PaymentBundle\Controller;
use Payum\Core\Model\CreditCard;
use Payum\Core\Request\GetHttpRequest;
use Payum\Stripe\Action\Api\ObtainTokenAction;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use SEC\PaymentBundle\Entity\Payment;
use Payum\Core\Request\GetHumanStatus;
use Payum\Stripe\Request\Api\CreateCustomer;
use Payum\Stripe\StripeJsGatewayFactory;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
class PaymentController extends Controller
{
    public function prepareAction(Request $request)
    {
        $factory = new StripeJsGatewayFactory();
        $gateway = $factory->create(array(
            'publishable_key' => '****',
            'secret_key' => '****',
        ));
        $card = new \Payum\Core\Model\CreditCard();
        $card->setNumber('4111111111111111');
        $card->setExpireAt(new \DateTime('2018-10-10'));
        $card->setSecurityCode('123');
        $card->setHolder('Test');
        $customer = new \Stripe_Customer();
        $storage = $this->get('payum')->getStorage('SEC\PaymentBundle\Entity\Payment');
        $model = $storage->create();
        $model->setNumber(uniqid());
        $model->setCurrencyCode('USD');
        $model->setTotalAmount(100);
        $model->setClientId($this->getUser());
        $model->setDateCreated(new \DateTime('now'));
        $model->setClientEmail('test@gmail.com');
        $model->setCreatedBy($this->getUser());
        $model->setCreditCard($card);
        $model->setCustomer($customer);
        $model->setDescription('This is a description');
        $model->setPlan(1);
        $storage->update($model);
        $gateway->execute(new \Payum\Core\Request\Capture($model));
        $captureToken = $this->get('payum.security.token_factory')->createCaptureToken(
            'offline',
            $model,
            'done' // the route to redirect after capture
        );
        return $this->render('SECPaymentBundle:Default:debug.html.twig', array(
            'model2' => $model,
            'model' => $captureToken,
            'model3' => ''
        ));
    }

【问题讨论】:

  • 你可以使用 $model->setDetails() 方法。在那里你可以传递一个参数数组(条纹格式)。不确定它对您有帮助,但值得一试。
  • 我已经尝试过了,但是当我创建新客户时,我的问题是从 Payum 获取 Stripe Form 令牌。

标签: php symfony stripe-payments payum


【解决方案1】:

我目前正在处理它,已经有一个可以重复使用的CreateCustomerAction

所以CreateCustomerAction创建客户后,你必须将cust_XXXX令牌添加到模型中,以后可以用作收费源(而不是卡)。

但这需要某种不同的工作流程/操作。

【讨论】:

    【解决方案2】:

    documentation中有解释。

    为客户订阅计划

    这是我们展示的常见费用 只需添加以下内容即可开始使用:

    <?php // prepare.php
    
    /** @var \Payum\Core\Model\PaymentInterface $payment */
    
    $payment->setDetails([
        'amount' => 2000,
        'currency' => 'USD',
    
        // everything in this section is never sent to the payment gateway
        'local' => [
            'save_card' => true,
            'customer' => ['plan' => $plan['id']],
        ], ]);
    

    正如您在传递给$payment-&gt;setDetails() 方法的array 中看到的那样,键local 有一个子键customer:这个子键接受一个数组并在其中设置键plan 和相应的计划ID on Stripe 将为客户订阅该计划。

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 2022-07-21
      • 2015-10-04
      • 2021-10-27
      • 1970-01-01
      • 2022-01-03
      • 2011-08-23
      • 2015-09-01
      • 2020-01-14
      相关资源
      最近更新 更多