当前位置: 首页 > 知识库问答 >
问题:

现有卡的条带api检查

柳坚白
2023-03-14

我确信我在这里遗漏了一些显而易见的东西,但我不知道如何针对客户检查现有卡。

我在laravel应用程序中使用stripe connect api代表他人管理付款,基本流程如下:

    < Li > stripe < code >令牌通过< code>stripe.js创建,并与支付表单一起提交 < li >如果客户存在于本地数据库中,我获取他们的< code>stripe_id,否则使用令牌作为源/卡创建新客户 < li >然后使用检索到的或新的客户< code>stripe_id创建< code >费用

目前,如果客户返回并使用不同的卡,由于费用只包括客户,而不是来源,因此无论如何都将从他们的默认卡中收取。

我想做的是:

  • 创建条纹令牌
  • 检查客户对本地数据库等
  • 检查指纹与客户的卡
  • 如有必要,在客户记录中创建新的
  • 使用客户id
  • 创建费用

简单地说:我看不到在过程中的哪个位置生成了持久的card_id;条纹中使用的那些.js响应,以及在条纹仪表板中创建时,看起来都是唯一的,这意味着每次充电都会在条纹中创建一个全新的卡对象。

我知道我可以检索存储在客户账户上的卡的列表,但是我从哪里获得初始的< code>card_id来进行搜索呢?

我在这里看到了一个涉及到这个的问题——在创建新的卡片之前,我能检查条纹卡片是否已经存在吗?-但是我不知道Ruby,所以搞不清楚它的来龙去脉。

编辑:

更简单的版本-是否有方法获得指纹,如这里的stripe docs所述-https://stripe.com/docs/api/php#card_object-无需首先创建卡对象?

共有2个答案

丰超
2023-03-14

我创建了一个函数来执行此操作:

>

  • $customer是条带客户对象
  • $stripe_account是您的帐户的条带ID或连接的帐户的条纹ID
  • $token来自stripe。js元素
  • $check_exp允许您决定是否还要检查卡的到期日期,因为如果卡的号码相同,指纹不会改变
  • 条带式PHP API 7.0.0

    function check_duplicate_card($customer, $stripe_account, $token, $check_exp) {
    $loc = "check_duplicate_card >> ";
    $debug = true;
    
    if ($debug) {
        // see here for an explanation for logging: http://php.net/set_error_handler >> Examples
        trigger_error("$loc started", E_USER_NOTICE);
    }
    
    try
    {
        // get token data
        $response = \Stripe\Token::retrieve(
            $token,
            ["stripe_account" => $stripe_account]
        );
        $token_fingerprint = $response->card->fingerprint;
        $token_exp_month = $response->card->exp_month;
        $token_exp_year = $response->card->exp_year;
        if ($debug) {
            trigger_error("$loc token_fingerprint = $token_fingerprint; token_exp_month = $token_exp_month; token_exp_year = $token_exp_year", E_USER_NOTICE);
        }
    
        // check for duplicate source
        if ($debug) {
            trigger_error("$loc customer sources = " . json_encode($customer->sources), E_USER_NOTICE);
        }
        $duplicate_found = false;
        foreach ($customer->sources->data as &$value) {
            // get data
            $fingerprint = $value->fingerprint;
            $exp_month = $value->exp_month;
            $exp_year = $value->exp_year;
    
            if ($fingerprint == $token_fingerprint) {
                if ($check_exp) {
                    if (($exp_month == $token_exp_month) && ($exp_year == $token_exp_year)) {
                        $duplicate_found = true;
                        break;
                    }
                } else {
                    $duplicate_found = true;
                    break;    
                }
            }
        }
        if ($debug) {
            trigger_error("$loc duplicate_found = " . json_encode($duplicate_found), E_USER_NOTICE);
        }
    } catch (Exception $e) {
        if ($e instanceof \Stripe\Exception\ApiErrorException) {
            $return_array = [
                "status" => $e->getHttpStatus(),
                "type" => $e->getError()->type,
                "code" => $e->getError()->code,
                "param" => $e->getError()->param,
                "message" => $e->getError()->message,
            ];
            $return_str = json_encode($return_array);
            trigger_error("$loc $return_str", E_USER_WARNING);
            http_response_code($e->getHttpStatus());
            echo $return_str;
        } else {
            $return_array = [
                "message" => $e->getMessage(),
            ];
            $return_str = json_encode($return_array);
            trigger_error("$loc $return_str", E_USER_ERROR);
            http_response_code(500); // Internal Server Error
            echo $return_str;
        }
    }
    
    if ($debug) {
        trigger_error("$loc ended", E_USER_NOTICE);
    }
    
    return $duplicate_found;
    }
    

  • 周承天
    2023-03-14

    因此,这里的想法是在卡对象或Token对象上使用指纹,而不是ID本身,因为如果您多次添加同一张卡,它们会有所不同。

    当您获得新卡令牌时,您可以通过Retrieve Token API检索它并在card哈希中查找指纹

    您可以在数据库中保存一份与特定客户和/或卡相关的已知指纹列表,以便检测重复的卡。

    注意:确保使用密钥来获取这些信息。否则,如果您使用可发布密钥,您可能无法获得指纹值。

     类似资料:
    • 当客户提交信用卡时,我希望执行以下序列(使用Stripe API): 检查用户的元数据中是否有条带客户id 如果没有,则创建一个新客户,将输入的卡保存给该用户 如果用户已经有客户id,请检查输入的卡是否已经是其保存的卡之一 如果是,则对该卡收费 如果不是,请将新卡添加到客户对象,然后对该卡收费 在我当前的代码中,Stripe在尝试创建费用时返回invalid_request错误。以下是相关代码部分

    • 我正在用作曲家实例化条纹,并试图在测试模式下使用卡号4000 0000 0000 0341订阅客户订阅计划。留档表示这将被接受,但在用于创建订阅时抛出一个错误。我的问题是,为什么创建订阅步骤总是以这个卡号返回成功? 我的收费代码是 还有我的订阅。php是

    • 我想进行更新,但我想添加的条件检查不是基于主表的哈希/范围,而是基于GSI。 实际上,如果给定属性(即GSI的哈希)已经存在,我希望保存失败。 例如,在一个虚构的employees表中,“SSN”是散列键,“EmployeeId”上有一个GSI。这两个属性都必须是独一无二的。在保存员工时,我希望确保表中没有使用“SSN”或“EmployeeId”。我可以用表的散列,也就是SSN,但不能用GSI的散

    • 我目前正在尝试用服务器端stripe api创建收费。 但是我遇到了一个问题;我用两种方法来进行付款: > 用户可以使用条带元素付款 = 或者,如果用户已经在其帐户上添加了一些卡,他可以在列表中选择其中的一张 我想知道是否有办法生成一个带有卡id和客户id的令牌,以便使用这个令牌来创建收费,而不是使用卡id和客户id来对用户收费。 我已经试过了https://stripe.com/docs/api

    • 我有一个Squarespace应用程序,可以为客户收取费用,但Squarespare不创建客户对象,它只存储费用。 我的目标:当用户进行购买时,创建一个附加了订阅计划的Customer对象,以便我们可以对卡进行重复收费。 我可以通过条带测试API提取费用列表,并且每个费用都有一个包含卡令牌。因此,根据我的理解,我应该能够创建一个客户并传入源或源ID,它将向该客户添加源。 我的代码如下: 我在条纹沙

    • 问题内容: 我需要将json发送到我的Web服务,json是: 。我正在尝试使用Retrofit API 1.8。当我尝试发送帖子时引发异常。 例外: 我正在尝试 改造接口 机具 问题答案: 通常是在某些字符格式不正确的JSON时抛出。异常消息本身建议使反序列化更加容忍。 但是我建议您修复JSON并从不需要的字符中修剪掉它。 您应该扩展 和覆盖以从宽容中读取。然后将其设置为您的。如果没有抛出异常,