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

iOS应用程序条带与服务器端的PHP集成

楚岳
2023-03-14

我在iOS应用程序上遇到了条带集成问题。

据美国国防部称,

1) iOS应用程序需要首先生成令牌,并将该令牌传递给自己服务器上的php库

import UIKit
import Stripe

class ViewController: UIViewController, STPPaymentCardTextFieldDelegate {

    let paymentTextField = STPPaymentCardTextField()

    override func viewDidLoad() {
        super.viewDidLoad()

        Stripe.setDefaultPublishableKey("pk_test_xxxxxxxxxxxxxxxxxxxxx")

        // Do any additional setup after loading the view, typically from a nib.

        paymentTextField.frame = CGRectMake(15, 15, CGRectGetWidth(self.view.frame) - 30, 44)
        paymentTextField.delegate = self
        view.addSubview(paymentTextField)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func save(sender: AnyObject) {
        if let card:STPCardParams = paymentTextField.cardParams {
            STPAPIClient.sharedClient().createTokenWithCard(card) { (token, error) -> Void in
                if let error = error  {
                    print(error)
                } else if let token = token {
                        self.createBackendChargeWithToken(token) { status in
                    }
                }
            }
        }
    }

    func createBackendChargeWithToken(token: STPToken, completion: PKPaymentAuthorizationStatus -> ()) {
        let url = NSURL(string: "http://localhost:7777/myproject/index.php/rest/stripe/submit")!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"

        let body = "stripeToken=\(token.tokenId)"

        print(body)

        request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)
        let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
        let session = NSURLSession(configuration: configuration)

        print(request)
        let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in
            if error != nil {
                completion(PKPaymentAuthorizationStatus.Failure)
                print("Fail to charge")
            }
            else {
                completion(PKPaymentAuthorizationStatus.Success)
                print("Successfully Charegd")
                print(PKPaymentAuthorizationStatus.Success)
            }
        }
        task.resume()
    }
}

2) php lib按如下方式执行以剥离API


\Stripe\Stripe::setApiKey("sk_test_xxxxxxxxxxxxxxxxxxxxxxx");

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {

$token = $_POST['stripeToken'];

$charge = \Stripe\Charge::create(array(
                    "amount" => 5000, // amount in cents, so need to multiply with 100 .. $amount * 100
                    "currency" => "usd",
                    "source" => $token,
                    "description" => "Test Order From iOS"
                )); 
}

3) 工作正常,我可以在Stripe Dashboard上收到付款交易。

4) 但当我切换到另一个条带帐户(如客户端帐户)时,我需要更改可发布密钥(来自移动应用)密钥(来自服务器端)对吗?

5)更改新密钥后,付款无法在条纹仪表板接收任何更多。这里是日志消息从条纹。

{error: {
type: "invalid_request_error"
message: "Stripe no longer supports API requests made with TLS 1.0. Please initiate HTTPS connections with TLS 1.2 or later. You can learn more about this  at https://stripe.com/blog/upgrading-tls."}
}

错误状态为401

我的问题是,当切换API(可发布)时,为什么应用程序不工作

共有1个答案

东郭元魁
2023-03-14

答案在错误对象提供的消息中给出;您的PHP(或堆栈中的其他层)没有配置为通过具有足够高版本的协议(它指示最低版本为1.2,这已经是非常古老——1.0几年前就被证明是易碎的)...这将是非常不安全的,所以当然是不允许的。

这可能与Stripe帐户无关,但堆栈(LAMP)配置发生了变化。

或者,如果您实际上只是在完全相同的文件上来回更改文本,并且仅在一个帐户上出现此错误,那么帐户的状态可能会有所不同;我记得几周/几个月前,我必须通过仪表板启动一个突破性的更新。

很可能一个帐户执行了此更新,而另一个没有;因此使用不同的API版本具有不同的安全要求

 类似资料:
  • 针对 J2EE 体系,Hibernate 有如下几个集成的方面: 容器管理的数据源(Container-managed datasources): Hibernate 能使用通过容器管理,并由 JNDI 提供的 JDBC 连接。通常,特别是当处理多个数据源的分布式事务的时候,由一个 JTA 兼容的 TransactionManager 和一个 ResourceManager 来处理事务管理(CMT

  • 我正在试用一个简单的示例。我能够运行服务器应用程序和客户端应用程序来彼此通信。我现在需要了解一个教程,说明两个客户机如何通过服务器相互通信。 我怎么能这么做?有人能给我指出一个好的教程或者解释如何在Java中实现这一点吗

  • 问题内容: 我正在编写一个Java包,该包将由另一种语言(matlab)调用。如果我的matlab进程结束,我希望Java进程继续运行。每当MATLAB重新启动时,它都应该能够与现有的运行过程进行通信。因此,我认为我需要让Java应用程序通过客户端/服务器模型中的套接字进行通信。我设想具有一组简单的功能: startServer(主机,端口) runCommand(服务器,命令…) stopSer

  • 我使用ESAPI jar进行验证。当我调用isValidInput(Context,input.trim(),ValidateConstant时。APLHA_NUMERIC_TYPE,最大长度,真);或isValidInput(上下文,输入,ValidateConstant.NUMERIC_TYPE,maxLength,true);并且输入错误,带有单独的字符。然后它抛出一些像 当我单独执行程序时

  • 10.9. 与特定应用服务器集成 一般来说,Spring的事务抽象与应用服务器是无关的。另外,使用Spring的JtaTransactionManager 类时,一种可选的方式是通过JNDI查询获得JTA UserTransaction 和 TransactionManager 对象,其中后者可以被设置为自动探测,这时针对不同的应用服务器有不同的方式。能够直接访问 TransactionManag

  • 我正在Android平板电脑上创建一个应用程序,需要扫描条形码并获得结果。我使用的平板电脑有内置扫描仪和摄像头。 我曾尝试使用Zstar Lib,但这使用平板电脑上的摄像头,而不是调用扫描仪。 如何从我的应用程序中找到直接调用扫描仪所需的实际意图? 平板电脑上预装了一个条形码实用程序应用程序,有一个用于捕获条形码数据的基本屏幕,我想我可能应该在我的应用程序中通过Intent来调用它。但是,我如何知