在这篇文章中,我们来谈谈Stripe的集成。Stripe提供了程序库来接受在线及移动应用支付行为,是功能最为强大的程序库之一。如果你计划在iOS应用中出售产品,或者在寻找一种支付解决方案,那么Stri
顺晟科技
2021-06-16 10:31:47
548
在本文中,我们将讨论Stripe的集成。Stripe是最强大的库之一,它提供了一个接受在线和移动应用支付行为的库。如果你打算在iOS应用中销售产品,或者正在寻找支付解决方案,Stripe应该是你的。
很多iOS开发者问我为什么选择Stripe而不是App内购买?根据苹果的规定,销售数字内容需要进行应用内购买,比如视频游戏附带的游戏级别,以及应用给用户的虚拟商品。对于衣服之类的实物,允许使用Stripe之类的其他支付方案。所以在本文中,我会简单介绍一下Stripe,解释一下它的工作原理,告诉你如何利用Stripe的API搭建一个接受信用卡支付行为的例子。
条带集成教程
什么是Stripe?
Stripe是为开发者搭建的,提供了友好的API,让商家能够即时接受和管理移动支付行为。而不必费心去开一个商业账户,设立一个信用卡网关。使用Stripe,可以轻松实现应用的信用卡支付功能,甚至重复支付。
Stripe旨在使在线/移动交易触手可及。您很快就会看到Stripe甚至在易于使用的API顶部简化了注册过程,集成过程就这么简单!这也是为什么公司能如此迅速扩张,跻身2015年十大创业公司之列的原因。
我们的申请
为了避免浪费时间从头开始构建应用程序,并专注于学习Stripe,我创建了一个项目模板。首先,下载项目并运行。
在本文中,我们将创建一个名为“捐赠”的例子来演示如何使用Stripe接受信用卡支付。
iOS-模拟器-屏幕截图-2015年6月9日-5.35.27-PM-576x1024
编者按:这个应用程序是一个示例程序。根据苹果的App Store Review Guidelines,如果应用有捐赠功能,应用本身应该是免费的,公益基金必须通过Safari页面或者网站的短信服务筹集。
应用的业务周期和Stripe的工作原理
在深化实现之前,让我们看看应用程序如何与Stripe通信以及如何处理事务。简而言之,当用户发送支付请求时,应用程序是如何工作的:
1.应用程序首先收集支付信息,包括电子邮件、信用卡号、到期日、卡验证码和支付表上的支付金额。然后通过调用Stripe的API将这些信息发送到您的服务器。
2.如果支付信息有效,Stripe将返回一个令牌。这个时候信用卡还没有扣。然后,您将使用令牌来执行实际的事务。
3.现在应用程序已经获得了令牌。下一步是将其发送到本地服务器,完成扣款过程。出于安全原因,Stripe需要通过服务器扣除费用,而不是移动设备本身。但不用担心,Stripe给我们提供了服务代码,可以轻松完成扣款流程。我们将在后面的章节中讨论它。
4.您的本地服务器向Stripe发送一个令牌,以执行实际的扣减操作。无论交易成功与否,Stripe都会返回结果。
5.最后,本地服务器向应用程序返回关于事务结果的响应。
条纹流
注意:返回的响应是JSON格式的,如果不熟悉JSON解析,可以查看本教程。
创建条带测试帐户
创建条带测试帐户非常简单,可以在几秒钟内完成。Stripe可以简化整个注册流程,注册账户不需要填写任何信息。我真的很喜欢这个精简的流程。如果您正在为客户开发应用程序,或者只是想探索Stripe的API,这个过程是完美的。
步是进入Stripe的网站,点击注册按钮:
条带注册
您将被引导到注册页面创建一个新帐户,您可以在其中填写您的个人信息。但是正如我之前提到的,Stripe简化了注册过程,所以您可以简单地单击这里的“跳过这一步”继续。出于测试目的,您可以通过临时帐户访问条带的仪表板页面。
屏幕截图-2015-06-09-at-9 . 05 . 20-PM-e 1433890510184
此过程完成后,将向您显示条带的控制面板页面:
条纹仪表板
然后在菜单中点击“你的账号”,点击“账号设置”,再点击“API Keys”标签,就会显示应用开发的按键。
屏幕截图-2015-06-10-at-12.05.31-AM
这是Stripe的配置过程。从现在开始,您可以使用Stripe的API来测试事务。您还可以返回仪表板页面,检查事务是否已成功处理。
使用CocoaPods添加条带库
在Xcode项目使用Stripe之前,我们必须引入库作为依赖项。有几种方法可以做到这一点。在例子中,我们将使用CocoaPods,这是一个的Swift项目依赖管理工具。像这个例子一样,许多项目依赖第三方库来工作。CocoaPods是一个工具,帮助开发人员管理所需的依赖库,并确保它们是最新的。
如果CocoaPods尚未安装,您可以通过在终端执行以下命令来安装它:
sudo gem安装cocoapods
只要有耐心,等几分钟就可以完成安装。安装后可以看到“宝石已安装”字样。
屏幕截图-2015-06-10-4 . 09 . 48-PM
接下来,在Xcode项目的根目录下创建一个名为“Podfile”的文件,用自己喜欢的文本编辑器打开,复制下面两行:
pod 'Stripe ',' ~ 4.0 '
pod 'AFNetworking ',' ~ 2.5.4 '
Podfile告诉CocoaPods我们要用哪个库。这里我们需要的是Stripe 4.0和AFNetworking 2.5.4。
现在,退出Xcode,打开Terminal,更改Xcode的根目录。根目录是“Podfile”所在的目录。接下来,在终端中,键入:
pod安装
CocoaPods会寻找“Podfile”并尝试安装我们设置的依赖项。下载和安装过程可能需要几分钟。完成后,结果应该是这样的:
屏幕截图-2015-06-10-at-4.28.31-PM
下载了CocoaPods,在Xcode项目中引入了Stripe和AFNetworking。但是,从现在开始,我们将不再使用原来的应用项目。cocapods生成了另一个名为Donate.xcworkspace的工作区。该工作区包含原始项目和由cocapods管理的项目。
现在在Xcode中打开新的工作空间(即Revent . xcworkspace),你应该注意到有两个项目:Pods和Revent。
cocapod-项目
在Swift项目中使用目标C
Stripe的库是用Objective-C写的,而我们的项目用的是Swift。如果没有适当的配置,这两种语言就不能一起工作。通过创建绑定头,任何Objective-C库、项目和类都可以在Swift项目中使用。技术上,这个关联会把头文件从Objective-C转换成Swift。
您可以按照以下步骤创建桥头文件:
在捐赠路径中添加新的头文件。右键单击项目导航器中的“捐赠”,然后单击“新建文件.”。
选择iOS-Source分类,选择“头文件”模板,然后点击“下一步”。
将类别命名为“捐赠-桥接-标题”。单击“继续”,继续下一步并保存文件。
然后,转到“建筑设置”,找到“Objective-C桥接表头”,设置值为“捐/捐-桥接-表头. h”。
屏幕截图-2015-06-10-at-4 . 37 . 23-PM-1024 x312
完成后,打开文件“捐赠-桥接-标题”并编写以下代码:
#导入条纹/条纹. h
#导入AFNetworking/AFNetworking.h
干得好!最后,完成项目的配置。我们现在准备进入示例程序的实施阶段。
设置应用编程接口密钥
首先需要做的是配置Stripe的API键。在Stripe的Dashboard页面,可以点击“账户设置”-“API密钥”找到自己的密钥。现在,我们将使用密钥进行测试,这样您就可以在不使用真正信用卡的情况下测试交易过程。
打开AppDelegate.swift文件,插入一行代码(第3行):
func application(application : ui application,did-finishelhaungwitoptions launch options 3360[NSOb-object : any object]?)- Bool {
//条带配置
stripe . setdefaultpublishablekey(" PK _ test _ ier8 dmaktt 6 gi 5 wvvyysocio ")
返回真
}
这里使用了我们用于测试的测试可发布密钥。别忘了换成自己的。
注意:将来,您可以在实际应用中用实时可发布密钥替换测试可发布密钥。
收集信用卡信息
要进行交易,应用程序应该有一个收集用户信息的链接。Stripe建议通过三种方式收集支付信息:
通过Apple Pay访问用户存储的支付信息
通过内置于条纹支付工具包中的支付表单组件
通过建立自己的支付形式
本文选择第三种方式来构建自己的支付形式。Stripe需要至少收集信用卡号及其到期日期。但我也建议保护CVC的安全,防止欺诈交易,获得用户的信任。你可能想得到的另一个信息是电子邮件地址,这样你就可以保留捐赠者的记录,以便以后交流。
如果你用的是项目模板,我在里面建立了支付接口,收集用户的支付明细。所有文本字段都与视图控制器. swift文件中相应的出口相关联。
捐赠-应用-故事板
现在,打开ViewController.swift并更新捐赠方法:
@ IBAction func捐(sender: AnyObject) {
//初始化卡片
var stripCard=STPCard()
//拆分到期日期以提取年月
if self . ExpiredateTextField . text . iSempty==false {
让expirationndate=self . expiratedatetextfield . text.componentsParatedbystring("/")
让ex pmonth=UInt(expirationndate[0]。toInt()!)
让expYear=UInt(expirationDate[1]。toInt()!)
//将卡信息发送到Strip获取令牌
strip card . number=self . CardNumberTextField . text
strip card . CVC=self . cvctextfield . text
stripCard.expMonth=expMonth
stripCard.expYear=expYear
}
}
当用户点击捐赠按钮时,动作方法将被触发。我们首先初始化一个STPCard对象并赋值。
接下来,用相同的方法添加以下代码:
var underlyingError:错误?
剥离卡。验证卡返回错误(基础错误)
if underlyingError!=零{
self . spinner . stop动画()
self . handleerror(undering error!)
返回
}
STPCard类有一个非常方便的方法validateCardReturningError,所以我们不必实现自己的验证逻辑。类将收集的信用卡信息发送到服务器,如果卡信息无效,它将返回一个错误。
如上所述,将以下代码添加到统一方法中:
stpapcli-ent . shared client()。createtokenwitchcard(strip card,completion: { (token,error) -在中无效
if错误!=零{
self.handleError(错误!)
返回
}
self.postStripeToken(令牌!)
})
一旦信用卡被确认有效,我们就调用STPAPIClient类的createTokenWithCard方法,通过安全的HTTPS请求发送信用卡数据。如果请求成功,条带将返回一个令牌。
此时,用户的信用卡尚未收费。Stripe只给了你一次性令牌。稍后,您将此令牌发送到本地服务器以执行实际的扣除。
如果无法获得令牌,应用程序将简单地向用户显示一条错误消息。在同一个文件中,需要将以下代码插入视图控制器类:
func handle error(error : nSerror){
UIAlertView(标题:“请重试”,
消息:错误。本地化描述,
delegate: nil
取消按钮标题:“确定”)。显示()
}
建立本地服务器
如本文开头所述,用户的信用卡扣款实际上发生在我们自己的服务器上。出于安全原因,Stripe不直接从应用程序中向信用卡收费。Stripe只是生成一个令牌。应用程序将这个令牌传递给本地服务器,然后进行实际的推导。
因此,在实现应用程序之前,让我们在stop中设置自己的本地服务器一分钟来处理支付。为了创建自己的服务器,我们将使用PHP作为主要的编程语言,并使用Stripe提供的库。别担心,你不必是Web开发专家。您可以按照描述的步骤配置处理条带支付所需的服务器。
首先,下载XAMPP(OS X)5 . 6 . 8(或更高版本)并将其安装在苹果电脑上。接下来,下载压缩文件并解压缩。找到XAMPP的安装目录,通常安装在“应用程序”文件夹中。打开“应用程序/XAMPP/htdocs”并复制压缩文件夹。
xampp-捐赠-htdoc
完成后,返回XAMPP文件夹并打开“管理器-osx”。单击“管理服务器”选项卡下的“全部启动”,服务将启动:
xampp-经理
下一步是进入“应用程序/XAMPP/HTDOCS/捐赠”,用你喜欢的任何文本编辑器打开文件“支付”。
用测试密钥替换方法中的参数,本文中已经介绍过:
\ Stripe \ Stripe :3360 setapekey(' sk _ test _ qcta2pcfz 9 wg6 jevpgy7tlok ');
搞定!你刚刚配置完服务器,简单吗?
将令牌发送到服务器进行支付处理
现在,我们的本地服务器准备处理付款。我们回到Xcode,通过发起一个HTTP POST请求,开始向本地服务器发送令牌。打开ViewController.swift,在文件中插入代码:
func postStripeToken(令牌: STPToken) {
let URL=" http://localhost/export/payment . PHP "
让params=[" stripe token " : token . tokenid,
" amount " : self . amounttextfield . text . Toint()!
“货币”:“美元”,
" description " : self . EmailXtfield . text]
let manager=AFHttprequestoperationmanager()
经理。开机自检(网址,参数:参数,成功: {(操作,响应对象)-无效于
如果让response=responseObject as?[字符串:字符串] {
UIAlertView(title:响应["status"],
message:响应["message"],
delegate: nil
取消按钮标题:“确定”)。显示()
}
}) {(操作,错误)-无效于
self.handleError(错误!)
}
}
由于我们在本地设置了一个服务器,所以我们将URL设置为http://localhost/revit/payment . PHP,如果服务器建立在远程主机上,请做相应的修改。
Stripe要求我们提交代币来执行实际扣除。转出金额、币种及相关说明。您可以使用描述字段作为付款说明。在这个例子中,我们只是使用这个字段来存储用户的电子邮件。
参数配置完成后,将使用AFHTTPRequestOperationManager提交异步开机自检请求。这是一个由AFNetworking提供的API。如果请求成功,我们将向用户显示付款响应。
那太好了!现在您可以运行应用程序并测试交易功能。出于测试目的,您可以使用信用卡号4242 4242 4242 4242和任何未来日期(例如07/2019)作为有效期,包括CVC(例如222),它可以模拟交易过程。
捐赠-条纹-成功-300
要进一步验证支付是否成功,您可以查看Stripe的仪表板:
屏幕截图-2015-06-11-5 . 09 . 01-下午
摘要
在这篇文章中,我带您学习了Stripe的基础知识。你应该学习如何将Stripe集成到你的应用中,以接受信用卡的支付行为。为了进一步学习,我鼓励你看看官方文件。Stripe通过其API提供多种方式完成支付,可以通过官方文档了解更多信息。
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06
16
2021-06