我有一些问题试图让这个工作,我已经成功实现了checkout express(或似乎),但我的系统需要订阅选项,遵循此示例.
现在,我的问题是,在Laravel你不能简单地放一些随机文件,所以我试图以正确的方式做到这一点,遗憾的是,没有关于库的类和方法的文档.
我在控制器中创建了一些功能(我不知道这是不是正确的方法)我现在面临的问题是尝试createRecurringPayment()来应用所需的定期付款金额,这是我猜的最后一步.
谢谢你的帮助.
应用程序/控制器/ PaypalController.php
public function prepareExpressCheckout(){
$storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject');
$details = $storage->createModel();
$details['PAYMENTREQUEST_0_CURRENCYCODE'] = 'USD';
$details['PAYMENTREQUEST_0_AMT'] = 1.23;
$storage->updateModel($details);
$captureToken = $this->getTokenFactory()->createCaptureToken('paypal_es', $details, 'payment_done');
$details['RETURNURL'] = $captureToken->getTargetUrl();
$details['CANCELURL'] = $captureToken->getTargetUrl();
$storage->updateModel($details);
return \Redirect::to($captureToken->getTargetUrl());
}
public function prepareSubscribe(){
$storage = $this->getPayum()->getStorage('Payum\Core\Model\ArrayObject');
$details = $storage->createModel();
$details['PAYMENTREQUEST_0_AMT'] = 0;
$details['L_BILLINGTYPE0'] = Api::BILLINGTYPE_RECURRING_PAYMENTS;
$details['L_BILLINGAGREEMENTDESCRIPTION0'] = "Suscripción por X meses";
$details['NOSHIPPING'] = 1;
$storage->updateModel($details);
$captureToken = $this->getTokenFactory()->createCaptureToken('paypal_es', $details, 'payment_done');
$storage->updateModel($details);
return \Redirect::to($captureToken->getTargetUrl());
}
public function createRecurringPayment(){
$payum_token = Input::get('payum_token'); …
Run Code Online (Sandbox Code Playgroud)我正在为我的网络应用寻找付款解决方案.我看到有像条纹(用于信用卡)或PayPal插件的API可以处理某些付费方法.
然后我看到有些库可以处理各种付费方式,如Payum(https://github.com/Payum/Payum)或Omnipay(https://github.com/thephpleague/omnipay).
如果我理解正确,它们都是相同类型的库:它们都以标准化的方式处理各种方法的付款.然而,我没有找到两者之间的任何比较,但解决了Payum如何包括OmniPay.所以我很困惑.因此我的问题:
Omnipay是否涵盖与Payum相同的目的.如果是,哪一个有什么优势.如果不是,他们正在实施的付款流程的哪些部分.
我一直在努力探讨如何使用Sylius(sylius/sylius-standard,v0.16)实现经典的离线支付网关.
到目前为止,我在bundle的build()方法中得到了这个:
public function build(ContainerBuilder $container)
{
/** @var PayumExtension $payum */
$payum = $container->getExtension('payum');
$payum->addGatewayFactory(new PayWayOffsiteGatewayFactory());
}
Run Code Online (Sandbox Code Playgroud)
这是我的config.yml:
sylius_payment:
gateways:
payway_offsite: PayWay
payum:
gateways:
payway_offsite:
payway_offsite:
secret_key: %tcompayway.secret_key%
shop_id: %tcompayway.shop_id%
username: %tcompayway.username%
password: %tcompayway.password%
sandbox: %tcompayway.sandbox%
Run Code Online (Sandbox Code Playgroud)
%compayway.*%字段配置正常,跳过此部分.然后我在PayWayOffsiteGatewayFactory类中得到了这个:
class PayWayOffsiteGatewayFactory extends AbstractGatewayFactory
{
/**
* {@inheritdoc}
*/
public function getName()
{
return 'payway_offsite';
}
/**
* {@inheritdoc}
*/
public function addConfiguration(ArrayNodeDefinition $builder)
{
parent::addConfiguration($builder);
$builder->children()
->scalarNode('secret_key')->isRequired()->cannotBeEmpty()->end()
->scalarNode('shop_id')->isRequired()->cannotBeEmpty()->end()
->scalarNode('username')->isRequired()->cannotBeEmpty()->end()
->scalarNode('password')->isRequired()->cannotBeEmpty()->end()
->booleanNode('sandbox')->defaultTrue()->end()
->end();
}
/**
* {@inheritDoc}
*/
protected function getPayumGatewayFactoryClass()
{ …
Run Code Online (Sandbox Code Playgroud) 我正在尝试自定义StripeBundle的模板,分别是结帐模板vendor\payum\stripe\Payum\Stripe\Resources\views\Action\obtain_checkout_token.html.twig
.
这是因为我希望Stripe弹出窗口显示在与付费对象相同的页面中,而不是在单个按钮的单独页面上.说,我想支付产品费用,我在结帐页面按"付款",并希望条纹弹出窗口出现在那里.
我看了一下另一个类似的问题,但我似乎无法让它运作起来.我已尝试app/Resources
使用PayumStripeBundle,Payum,Payum/Stripe中的每个文件夹名称组合,但它们似乎都没有覆盖使用过的模板.
bundle的结构也很奇怪,因为它的命名空间是Payum\Bundle\PayumBundle
,但是不是包含模板的bundle的Stripe组件在另一个文件夹中.
这个值设置在这里,所以也许Symfony永远不会在文件夹中找到它?
文件夹结构应该如何app/Resources
,如果它以这种方式工作?或者,如果这是另一种方式.
我觉得我已经阅读了很多想要帮助添加网关的人,但我似乎没有找到任何解决方案,一旦提问者找到了答案就分享了.我知道有人建议查看Payum Bundle文档,但由于我无法弄清楚Sylius究竟是如何与Payum Bundle集成的,所以我无法从payum文档中获得太多帮助.有人能够帮助解释让PayPal Pro在sylius应用程序中运行所需的内容吗?
我已将此添加到配置文件中:
payum:
contexts:
paypal_pro:
omnipay:
type: PayPal_Pro
options:
username: %paypal.username%
password: %paypal.password%
signature: %paypal.signature%
testMode: %paypal.test_mode%
storages:
Sylius\Component\Core\Model\Order:
doctrine:
driver: orm
Sylius\Component\Core\Model\Payment:
doctrine:
driver: orm
Run Code Online (Sandbox Code Playgroud)
这在我的services.yml文件中:
sylius.payum.paypal.action.capture_payment_using_credit_card:
class: %sylius.payum.paypal.action.capture_payment_using_credit_card.class%
tags:
- { name: payum.action, factory: omnipay }
Run Code Online (Sandbox Code Playgroud)
对于CapturePaymentUsingCreditCardAction类,我只是复制了Sylius的Stripe一个.我认为这就足够了,因为Stripe据说也可以开箱即用.当我输入假信用卡信息(我们处于沙箱模式)时,我只是在重定向到付款方式选择页面后收到"未知付款错误"的Flash消息.根据我从阅读此线程的理解,状态由状态机自动管理.我简单地添加了一个PaymentStatusAction(从Dummy类复制并var_dumping详细信息),但这没有任何帮助.
另外,有人能够解释是否需要ExecuteSameRequestWithDetailsAction?它看起来几乎与CapturePaymentUsingCreditCardAction相同.
我是 Payum 的新手,我正在尝试创建一个新的支付网关。但是我无法弄清楚配置值如何与我创建的文件(操作/工厂等)相关。
这是我到目前为止所拥有的;
payum:
security:
token_storage:
Path\To\PaymentSecurityToken:
doctrine:
driver: orm
contexts:
xxx:
yyyy:
api:
options:
sandbox: true
storages:
Path\To\Payment:
doctrine:
driver: orm
Run Code Online (Sandbox Code Playgroud)
我不明白我应该放入xxx和yyy 的内容。无论我尝试什么价值观,我仍然不明白。我不断收到以下错误。
InvalidConfigurationException: Unrecognized options "yyy" under "payum.contexts.xxx"
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这些值应该是什么以及我设置的值如何与网关相关以及需要在哪里,以便配置实际上与网关代码中的某些内容相匹配?
提前致谢:)
我完成了aciton,不知道如何获得paymentDetails对象...
这是手册:http: //payum.forma-dev.com/documentation/0.8/PayumBundle/purchase_done_action
我尝试从http://payum.forma-dev.com/documentation/0.8/PayumBundle/simple_purchase_examples/paypal_express_checkout之前的步骤获取对象PaymentDetails
UPDATE1
public function doneAction(){
$request = $this->getRequest();
/**
* @var $token PayumSecurityToken
*/
$token = $this->get('payum.security.http_request_verifier')->verify($request);
/**
* @var $details PaymentDetails
*/
$details = $token->getDetails();
var_dump($details);
Run Code Online (Sandbox Code Playgroud)
给
object(Payum\Core\Model\Identificator)[345]
protected 'class' => string 'ed\partnerBundle\Entity\PaymentDetails' (length=38)
protected 'id' => int 1
Run Code Online (Sandbox Code Playgroud)
UPDATE2
$details = unserialize($token->getDetails());
ContextErrorException: Notice: unserialize(): Error at offset 0 of 40 bytes in /home/grek/public_html/edpartner/src/ed/partnerBundle/Controller/PaymentController.php line 110
Run Code Online (Sandbox Code Playgroud) 我已经验证了PayUMoney的帐户.在沙盒模式下单击paynow按钮时,它显示"发生了一些错误".我用过pnp sdk.
此代码用于onnlick on paynow按钮.
payNowButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userAddress = address_line1.get(0) + "," + address_line2.get(0) + "," + address_pincode.get(0)
+ "," + address_taluka + "," + address_district + "," + address_state;
if (payment_type.equals("online")) {
launchPayUMoneyFlow();
} else if (payment_type.equals("cod")) {
launchNormalFlow();
}
}
});
Run Code Online (Sandbox Code Playgroud)
这是哈希计算功能
public static String hashCal(String str) {
byte[] hashseq = str.getBytes();
StringBuilder hexString = new StringBuilder();
try {
MessageDigest algorithm = MessageDigest.getInstance("SHA-512");
algorithm.reset();
algorithm.update(hashseq);
byte messageDigest[] = algorithm.digest(); …
Run Code Online (Sandbox Code Playgroud)