首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Payum定期付款的代币问题

使用Payum定期付款的代币问题
EN

Stack Overflow用户
提问于 2014-05-10 02:53:52
回答 1查看 1.4K关注 0票数 3

我正在尝试运行示例代码here

但是我得到了这个错误:

代码语言:javascript
复制
Payum\Core\Exception\InvalidArgumentException: A token with hash `RVpxpP1m3HnTWcj2oL19SQ38NWvCDIz5qeUwfr283kY` could not be found. in /var/www/test/vendor/payum/core/Payum/Core/Security/PlainHttpRequestVerifier.php on line 47

我的代码如下所示:

代码语言:javascript
复制
namespace Paypal\Model;

use Payum\Core\Model\ArrayObject;

class AgreementDetails extends ArrayObject {

}

namespace Paypal\Model;

use Payum\Core\Model\Token;

class PaymentSecurityToken extends Token
{
}

namespace Paypal\Model;

use Payum\Core\Model\ArrayObject;

class RecurringPaymentDetails extends  ArrayObject{

}

config.php

代码语言:javascript
复制
use Buzz\Client\Curl;
use Payum\Paypal\ExpressCheckout\Nvp\PaymentFactory;
use Payum\Paypal\ExpressCheckout\Nvp\Api;
use Payum\Core\Registry\SimpleRegistry;
use Payum\Core\Storage\FilesystemStorage;
use Payum\Core\Security\PlainHttpRequestVerifier;
use Payum\Core\Security\GenericTokenFactory;

$tokenStorage = new FilesystemStorage('/home/vagrant/tmp', 'Paypal\Model\PaymentSecurityToken');
$requestVerifier = new PlainHttpRequestVerifier($tokenStorage);

$agreementDetailsClass = 'Paypal\Model\AgreementDetails';
$recurringPaymentDetailsClass = 'Paypal\Model\RecurringPaymentDetails';
$storages = array(
    'paypal' => array(
        $agreementDetailsClass => new FilesystemStorage('/home/vagrant/tmp',$agreementDetailsClass),
        $recurringPaymentDetailsClass => new FilesystemStorage('/home/vagrant/tmp',$recurringPaymentDetailsClass)
    )
);

$payments = array(
    'paypal' => PaymentFactory::create(new Api(new Curl, array(
            'username' => 'REPLACE WITH YOURS',
            'password' => 'REPLACE WITH YOURS',
            'signature' => 'REPLACE WITH YOURS',
            'sandbox' => true
        )
    )));

$registry = new SimpleRegistry($payments, $storages, null, null);

$tokenFactory = new GenericTokenFactory(
    $tokenStorage,
    $registry,
    'https://'.$_SERVER['HTTP_HOST'],
    'capture.php',
    'notify.php'
);

prepare.php

代码语言:javascript
复制
use Payum\Paypal\ExpressCheckout\Nvp\Api;

include 'config.php';

$storage = $registry->getStorageForClass($agreementDetailsClass, 'paypal');

$agreementDetails = $storage->createModel();
$agreementDetails['PAYMENTREQUEST_0_AMT'] = 0;
$agreementDetails['L_BILLINGTYPE0'] = Api::BILLINGTYPE_RECURRING_PAYMENTS;
$agreementDetails['L_BILLINGAGREEMENTDESCRIPTION0'] = $subscription['description'];
$agreementDetails['NOSHIPPING'] = 1;
$storage->updateModel($agreementDetails);

$captureToken = $tokenFactory->createCaptureToken('paypal', $agreementDetails, 'create_recurring_payment.php');

$agreementDetails['RETURNURL'] = $captureToken->getTargetUrl();
$agreementDetails['CANCELURL'] = $captureToken->getTargetUrl();
$storage->updateModel($agreementDetails);

header("Location: ".$captureToken->getTargetUrl());

capture.php

代码语言:javascript
复制
use Payum\Core\Request\BinaryMaskStatusRequest;
use Payum\Core\Request\SecuredCaptureRequest;
use Payum\Core\Request\RedirectUrlInteractiveRequest;

include 'config.php';

$token = $requestVerifier->verify($_REQUEST);
$payment = $registry->getPayment($token->getPaymentName());

$payment->execute($status = new BinaryMaskStatusRequest($token));
if (false == $status->isNew()) {
    header('HTTP/1.1 400 Bad Request', true, 400);
    exit;
}

if ($interactiveRequest = $payment->execute(new SecuredCaptureRequest($token), true)) {
    if ($interactiveRequest instanceof RedirectUrlInteractiveRequest) {
        header("Location: ".$interactiveRequest->getUrl());
        die();
    }

    throw new \LogicException('Unsupported interactive request', null, $interactiveRequest);
}

$requestVerifier->invalidate($token);

header("Location: ".$token->getAfterUrl());

create_recurring_payment.php

same as here

我已经确认file存储类能够将数据写入文件,但在捕获步骤中,它无法验证令牌。

任何类型的帮助都可以让这段代码运行起来。

EN

回答 1

Stack Overflow用户

发布于 2014-05-10 18:19:13

令牌存储配置不正确(不是你的错,文档也是错误的)。它必须使用作为idhash模型字段。尝试:

代码语言:javascript
复制
<?php

$tokenStorage = new FilesystemStorage('/home/vagrant/tmp', 'Paypal\Model\PaymentSecurityToken', 'hash');

关于你得到的异常。它尝试通过id查找令牌,并使用作为该令牌的散列。但找不到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23571990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档