【问题标题】:how to prevent token generation for decliened cards on stripe payment gateway?如何防止在条带支付网关上为已失效的卡生成令牌?
【发布时间】:2018-06-17 05:05:51
【问题描述】:

我正在使用条带支付网关。

流程-

1 .生成令牌

2 。创建付款

生成令牌 - 按照下面的代码,一切都很好,并且它生成令牌。

现在我想在生成令牌时阻止或检查卡是否有效。

例如 - cvc 是有效的并为此生成令牌,因此它肯定会得到付款。

if ($this->request->is('post') && $this->request->getData('gtoken') == 'gtoken') {

                $planId = $this->request->getData('planid');
                $amount = $this->request->getData('finalamount');
                $cc = $this->request->getData('cc');
                $cardHolder = $this->request->getData('cardHolder');
                $expiryMonth = $this->request->getData('expiryMonth');
                $expiryYear = $this->request->getData('expiryYear');
                $cvc = $this->request->getData('cvc');

                // validate data and generate token
                if($cc) {
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, "https://api.stripe.com/v1/tokens");
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, "card[number]=".$cc."&card[exp_month]=".$expiryMonth."&card[exp_year]=".$expiryYear."&card[cvc]=".$cvc);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_USERPWD, STRIPE_SECRET_KEY. ":" . "");

                    $headers = array();
                    $headers[] = "Content-Type: application/x-www-form-urlencoded";
                    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

                    $tokendata = json_decode(curl_exec($ch), true);

                    if(@$tokendata["error"]) {
                        if(@$tokendata['error']['param'] =='invalid_number'){
                            $this->Flash->error("Please Enter a Valid Card Number.");
                        } elseif(@$tokendata['error']['param']=='exp_month'){
                            $this->Flash->error("Please Enter a Valid Month.");
                        }
                        else {
                            $this->Flash->error($tokendata['error']['message'] );
                        }
                    }
                    else{
                        $token = $tokendata['id'];
                        $this->request->session()->write('payment',$this->request->getData());
                        $this->request->session()->write('paymenttoken',$token);
                        // flush save coupon onsession
                        $this->request->session()->write('isapplycoupon', false);
                        $this->savePayment();
                        return $this->redirect(['controller'=>'venues', 'action'=>'add']);
                    }
                    if (curl_errno($ch)) {
                        echo 'Error:' . curl_error($ch);
                    }
                    curl_close ($ch);
                }
            }

【问题讨论】:

    标签: php stripe-payments


    【解决方案1】:

    是的,您绝对可以在创建令牌时验证 CVC,方法是在创建令牌时传递 0.1 美元。

    条纹文档中的任何地方都没有记录此功能

    有关详细信息,请参阅这些博客文章和邮件列表

    link 1

    link 2

    您更新后的代码应如下所示并使用 Stripe.js 创建令牌

    Stripe.card.createToken({
      number: '4242424242424242',
      exp_month: '12',
      exp_year: '2022',
      cvc: '987'
    }, 100, stripeResponseHandler);
    

    【讨论】:

    • 此解决方案已被弃用超过 4 年。您不应该依赖此功能,一旦他们完全删除它,它可能会在不久的将来停止工作
    • 除此之外没有其他方法可以在创建令牌时授权卡。默认情况下,条带仅在我们尝试充电时才授权卡
    • 是的,这是 Stripe 的预期行为以及您应该如何构建集成。这将消失,因此您不应依赖此或推荐此解决方案 IMO。
    • 是的。目前我们可以拥有这个。未记录的解决方案始终存在折旧风险
    猜你喜欢
    • 2015-03-10
    • 2021-08-09
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2015-12-26
    • 2020-12-24
    • 2020-05-17
    相关资源
    最近更新 更多