iOS App Stripe 在服务器端与 PHP 集成
Posted
技术标签:
【中文标题】iOS App Stripe 在服务器端与 PHP 集成【英文标题】:iOS App Stripe Integration With PHP On Server Side 【发布时间】:2016-12-17 10:08:24 【问题描述】:ios 应用上的 Stripe 集成存在问题。
根据 Stripe 文档,
1) iOS 应用需要先生成令牌,然后将该令牌传递给自己服务器上的 php lib
导入 UIKit 导入条纹 类视图控制器:UIViewController,STPPaymentCardTextFieldDelegate 让 paymentTextField = STPPaymentCardTextField() 覆盖 func viewDidLoad() super.viewDidLoad() Stripe.setDefaultPublishableKey("pk_test_xxxxxxxxxxxxxxxxxxxxx") // 在加载视图后做任何额外的设置,通常是从一个 nib。 paymentTextField.frame = CGRectMake(15, 15, CGRectGetWidth(self.view.frame) - 30, 44) paymentTextField.delegate = self view.addSubview(paymentTextField) 覆盖 func didReceiveMemoryWarning() super.didReceiveMemoryWarning() // 处理所有可以重新创建的资源。 @IBAction 函数保存(发件人:AnyObject) 如果让卡:STPCardParams = paymentTextField.cardParams STPAPIClient.sharedClient().createTokenWithCard(card) (token, error) -> Void in 如果让错误=错误 打印(错误) else if let token = token self.createBackendChargeWithToken(token) 状态 func createBackendChargeWithToken(token: STPToken, 完成: PKPaymentAuthorizationStatus -> ()) 让 url = NSURL(string: "http://localhost:7777/myproject/index.php/rest/stripe/submit")! 让请求 = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" 让 body = "stripeToken=\(token.tokenId)" 打印(正文) request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding) 让配置 = NSURLSessionConfiguration.ephemeralSessionConfiguration() 让会话 = NSURLSession(配置:配置) 打印(请求) let task = session.dataTaskWithRequest(request) (data, response, error) -> Void in 如果错误!= nil 完成(PKPaymentAuthorizationStatus.Failure) print("充电失败") 别的 完成(PKPaymentAuthorizationStatus.Success) print("成功转帐") 打印(PKPaymentAuthorizationStatus.Success) 任务.resume()2) php lib 像这样执行到 Stripe API
\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxxxxxx"); if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) $token = $_POST['stripeToken']; $charge = \Stripe\Charge::create(array( "amount" => 5000, // 以美分为单位的金额,所以需要乘以 100 .. $amount * 100 "货币" => "美元", “来源” => $token, “描述” => “来自 iOS 的测试订单” ));3) 它工作正常,我可以在 Stripe Dashboard 收到付款交易。
4) 但是当我切换到另一个条带帐户(如客户帐户)时,我需要更改 Publishable Key(From Mobile App) 和 Secret Key(From Server Side) 对吗?
5) 更改新密钥后,Stripe Dashboard 无法再收到付款。这是来自 Stripe 的日志消息。
错误: 类型:“invalid_request_error” 消息:“Stripe 不再支持使用 TLS 1.0 发出的 API 请求。请使用 TLS 1.2 或更高版本发起 HTTPS 连接。您可以在 https://stripe.com/blog/upgrading-tls 了解更多信息。”错误状态为 401
我的问题是为什么从另一个 Stripe 帐户切换 API(可发布和秘密)密钥时应用程序无法运行?
【问题讨论】:
【参考方案1】:错误对象提供的消息中给出了答案;您的 PHP(或堆栈中的其他层)未配置为使用足够高的协议版本通过 httpS 发出网络请求(它表示最低版本为 1.2,这已经很旧了-- 1.0 几年前被证明是易碎的)......这将是非常不安全的,所以当然是不允许的。
这可能与 Stripe 帐户完全无关,而是堆栈 (LAMP) 配置发生了变化。
或,如果您实际上只是来回更改完全相同文件上的文本,并且仅在一个帐户上出现此错误,那么帐户的状态可能会有所不同;我记得几周/几个月前,我必须通过仪表板启动一次重大更新。
很可能一个帐户执行了此更新,而另一个帐户没有执行;因此使用具有不同安全要求的不同 API 版本
【讨论】:
以上是关于iOS App Stripe 在服务器端与 PHP 集成的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IOS 中使用 STRIPE API 创建 STRIPE 客户?
CodeIgniter - 如何在项目中加载 stripe-php 库?