17

有没有人成功使用 Stripe connect 和 iOS 应用程序。我有几个问题:

我在这里遵循指南: https ://stripe.com/docs/connect/getting-started

注册应用程序:简单,没问题

然后再往下一点:

将您的用户发送到 Stripe:同样,这里很简单,我只有一个按钮,可以打开 UIWebView 中的链接。我假设在 URL 中有 client_id 很好?我的很多不确定性是我应该将哪些 ID/密钥硬编码到应用程序中

然后再往下一点:

用户连接或创建 Stripe 帐户后,我们会将他们重定向回您在应用程序设置中设置的 redirect_uri,并带有代码参数或错误。

我在这里所做的是使用 UIWebview 的 webView:shouldStartLoadWithReqest:navigationType 委托方法来检查 URL 中的字符串“code=”。如果它找到了,那么我就可以获取“代码”参数。所以实际上,redirect_uri 对我来说完全没有必要。这是处理这个问题的正确方法吗?我应该在我的应用程序中还是在我的服务器上执行此操作?

收到代码后,我们应该进行 POST 调用以接收 access_token。同样,这应该在应用程序内还是在服务器上完成?它需要使用secret_key,所以我猜是服务器?如果需要将令牌发送到服务器,我如何发送信用卡信息和这个令牌?我知道如何获取卡号、有效期和CVV。但就将它传递给服务器(有或没有令牌)而言,我不确定。

然后,当谈到在服务器上实际编写 PHP、Ruby 或 Python 代码时,我完全不知所措。

任何帮助将不胜感激。

4

2 回答 2

28

您应该设置一个小型 Web 应用程序来创建条带费用并存储您的客户授权代码。在您的网络应用程序中配置两条路由,redirect_uri并在您的Stripe Apps 设置webhook_uri中添加 url 。费用应该从服务器端应用程序创建,因为它需要不应该存储在 iPad 应用程序中的 secret_key / authorization_code。否则它们可能会导致安全漏洞。我试图描述以下概念:

  1. 在您的应用程序中提供stripe connect button,并将链接设置为在 Safari 中打开(而不是在 Web 视图中)。您应该state向 url 添加一个参数,该参数对id您的用户来说是唯一的。

  2. 点击按钮后,您的用户将被重定向到 Stripe,在那里她/他将被要求授权您的应用程序。授权后,条带将与您之前提供redirect_uri的 aauthorization_code和您一起使用。state根据 Stripe 文档使用 进行后调用authorization_code以获得access_token. 将access_token映射与存储state在数据库中。

  3. 在您的应用中定义自定义 url 方案。从您的 Web 应用程序调用自定义 URL。用户应该在移动 safari 中打开 url。因此调用自定义 url 将重新打开您的应用程序。您可以传递一个附加参数来指示失败/成功。在您的应用程序中,根据此参数更新视图。

  4. 现在您已准备好代表 iPad 用户在您的服务器上创建费用。card_token使用 stripe iOS sdk从卡信息中生成一个。它需要你的 stripe publishable_key。然后在您的 Web 应用程序中定义一个 api,它采用 3 个参数card_tokenuser_idamount. 每当您想创建费用时,从您的 iPad 应用程序调用此 API。如果您担心使用任何标准加密方法的安全性,也可以使用密钥加密此信息。知道密钥后,您可以轻松地解密 Web 应用程序中的信息。

  5. 当从 iPad 应用程序调用此 api 时,您将收到user_id(您state之前保存的)card_tokenamount. 检索access_token映射到的user_id(或状态)。access_token然后,您可以使用和代表用户进行card_token收费amount

您可以在服务器中使用 ruby​​ / php / python / node,因为 Stripe 为它们提供了 sdk。我假设可以使用其他语言以及 REST 接口。

请注意,这只是一个概念。它应该像它一样工作,但我还没有实现它。完成后,我将使用示例代码更新此答案。

于 2014-03-19T08:20:21.500 回答
1

您可以使用 UIWebView。您仍然需要使用重定向 URL 并使用委托“webView:shouldStartLoadWithRequest:navigationType:”监控重定向

于 2015-04-22T10:08:11.510 回答