草庐IT

php - 检索客户来源时的 Stripe 响应

coder 2024-05-02 原文

我正在尝试通过提供客户 ID 来检索特定客户的所有卡。每the documentation ,我期待以下响应:

Stripe\Collection JSON: {
  "object" => "list",
  "url" => "/v1/customers/cu_16jdAj2eZvKYlo2CbrCP4HRs/sources",
  "has_more" => false,
  "data" => [
    [0] => Stripe\Card JSON: {
      "id": "card_14bIFkou9GUI42eZvKYlo2Cs",
      "object": "card",
      "last4": "4242",
      "brand": "Visa",
      "funding": "credit",
      "exp_month": 11,
      "exp_year": 2018,
      "country": "US",
      "name": "callingsudhanshu@gmail.com",
      "address_line1": null,
      "address_line2": null,
      "address_city": null,
      "address_state": null,
      "address_zip": null,
      "address_country": null,
      "cvc_check": null,
      "address_line1_check": null,
      "address_zip_check": null,
      "tokenization_method": null,
      "dynamic_last4": null,
      "metadata": {
      },
      "customer": "cus_6Nb0wxYHigk2mX"
    }
    [1] => <Stripe\Card[...] ...>
    [2] => <Stripe\Card[...] ...>
  ]
}

这是我向 Stripe 提出的请求。尝试从 $card_list 中提取 data(即所有卡片的数组):

\Stripe\Stripe::setApiKey($this->stripe_sk);
$card_list = \Stripe\Customer::retrieve($customer_id)->sources->all(array(
    'object' => 'card'
));

// Return a list of all cards.
$card_list = $card_list->data;
return $card_list;

我想知道为什么来自 $card_list 的 Stripe 响应包含额外的/意外的数据。这是我实际得到的结果:

array(1) {
  [0]=&gt;
  object(Stripe\Card)#292 (5) {
    ["_opts":protected]=&gt;
    object(Stripe\Util\RequestOptions)#294 (2) {
      ["headers"]=&gt;
      array(0) {
      }
      ["apiKey"]=&gt;
      string(32) "sk_test_d3..."
    }
    ["_values":protected]=&gt;
    array(23) {
      ["id"]=&gt;
      string(29) "card_16jLIwLBSNgilYpnoEiPhNhA"
      ["object"]=&gt;
      string(4) "card"
      ["last4"]=&gt;
      string(4) "4242"
      ["brand"]=&gt;
      string(4) "Visa"
      ["funding"]=&gt;
      string(6) "credit"
      ["exp_month"]=&gt;
      int(8)
      ["exp_year"]=&gt;
      int(2016)
      ["fingerprint"]=&gt;
      string(16) "T5RzXLIiXrF0nyqH"
      ["country"]=&gt;
      string(2) "US"
      ["name"]=&gt;
      NULL
      ["address_line1"]=&gt;
      NULL
      ["address_line2"]=&gt;
      NULL
      ["address_city"]=&gt;
      NULL
      ["address_state"]=&gt;
      NULL
      ["address_zip"]=&gt;
      NULL
      ["address_country"]=&gt;
      NULL
      ["cvc_check"]=&gt;
      string(4) "pass"
      ["address_line1_check"]=&gt;
      NULL
      ["address_zip_check"]=&gt;
      NULL
      ["tokenization_method"]=&gt;
      NULL
      ["dynamic_last4"]=&gt;
      NULL
      ["metadata"]=&gt;
      object(Stripe\AttachedObject)#261 (5) {
        ["_opts":protected]=&gt;
        object(Stripe\Util\RequestOptions)#294 (2) {
          ["headers"]=&gt;
          array(0) {
          }
          ["apiKey"]=&gt;
          string(32) "sk_test_d..."
        }
        ["_values":protected]=&gt;
        array(0) {
        }
        ["_unsavedValues":protected]=&gt;
        object(Stripe\Util\Set)#262 (1) {
          ["_elts":"Stripe\Util\Set":private]=&gt;
          array(0) {
          }
        }
        ["_transientValues":protected]=&gt;
        object(Stripe\Util\Set)#306 (1) {
          ["_elts":"Stripe\Util\Set":private]=&gt;
          array(0) {
          }
        }
        ["_retrieveOptions":protected]=&gt;
        array(0) {
        }
      }
      ["customer"]=&gt;
      string(18) "cus_6xCtshHPQiYSdI"
    }
    ["_unsavedValues":protected]=&gt;
    object(Stripe\Util\Set)#270 (1) {
      ["_elts":"Stripe\Util\Set":private]=&gt;
      array(0) {
      }
    }
    ["_transientValues":protected]=&gt;
    object(Stripe\Util\Set)#120 (1) {
      ["_elts":"Stripe\Util\Set":private]=&gt;
      array(0) {
      }
    }
    ["_retrieveOptions":protected]=&gt;
    array(0) {
    }
  }
}

希望有人可以解释响应的“扩展”版本,我要到这里了。提前致谢!

最佳答案

几天前我陷入了这个问题,我已经设法使用 json_encode() API 解决了这个问题(需要将其导出为我这边的 AJAX 返回)。

$cards = \Stripe\Customer::retrieve($_SESSION['stripe_customer_id'])->sources->all(array("object" => "card"));
$list = json_encode($cards->data);
echo($list);

希望这对您有所帮助。

顺便说一句:您的响应看起来像 var_dump() 输出。

关于php - 检索客户来源时的 Stripe 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32512771/

有关php - 检索客户来源时的 Stripe 响应的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - 如何从过时的 TZInfo 标识符中获取 Rails TimeZone 名称? - 2

    已经有一个问题回答了如何将“America/Los_Angeles”转换为“PacificTime(US&Canada)”。但是我想将“美国/太平洋”和其他过时的时区转换为RailsTimeZone。我无法在图书馆中找到任何可以帮助我完成此任务的东西。 最佳答案 来自RailsActiveSupport::TimeZonedocs:TheversionofTZInfobundledwithActiveSupportonlyincludesthedefinitionsnecessarytosupportthezonesdefinedb

  3. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  4. ruby-on-rails - 使用 HTTP.get_response 检索 Facebook 访问 token 时出现 Rails EOF 错误 - 2

    我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token

  5. ruby - 如何在非 SSL 或 http 网站上使用 Stripe? - 2

    我正在使用Rails3.2.6和Stipe进行支付。是否有可能在不购买ssl证书的情况下进行付款。我可以使用Stripe页面作为我的支付页面吗? 最佳答案 您可以使用stripe.js在技术上跳过SSL但我强烈建议您设置SSL。它所做的是将信用卡信息直接传递给stripe,然后stripe会给你一个token,用于实际进行收费。这样做意味着信用卡信息永远不会接触您的服务器,您不必担心PCI合规性。但是,您仍应设置SSL以防止中间人攻击。您可以在https://stripe.com/docs/tutorials/forms找到有关如何

  6. ruby - 在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC? - 2

    我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!

  7. ruby-on-rails - 使用 Ruby 正确处理 Stripe 错误和异常以实现一次性收费 - 2

    我查看了Stripedocumentationonerrors,但我仍然无法正确处理/重定向这些错误。基本上无论发生什么,我都希望他们返回到edit操作(通过edit_profile_path)并向他们显示一条消息(无论成功与否)。我在edit操作上有一个表单,它可以POST到update操作。使用有效的信用卡可以正常工作(费用在Stripe仪表板中)。我正在使用Stripe.js。classExtrasController5000,#amountincents:currency=>"usd",:card=>token,:description=>current_user.email)

  8. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  9. ruby - 比较 rspec 中的 float 时的奇怪行为 - 2

    以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby​​或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}

  10. ruby-on-rails - 为什么我必须在使用客户验证器后重新加载 rspec 中的记录? - 2

    我有一个模型User,它在创建后的回调中创建了选项#Userhas_one:user_optionsafter_create:create_optionsprivatedefcreate_optionsUserOptions.create(user:self)end我对此有一些简单的Rspec覆盖:describe"newuser"doit"createsuser_optionsaftertheuseriscreated"douser=create(:user)user.user_options.shouldbe_kind_of(UserOptions)endend一切正常,直到我将自

随机推荐