我在iOS App上遇到Stripe Integration的问题 .
根据Stripe doc,
1)iOS应用程序需要首先生成令牌并将该令牌传递给自己服务器上的php lib
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像这样执行Stripe 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)工作正常,我可以在条纹仪表板上收到付款交易 .
4)但是当我切换到另一个条带帐户(如客户帐户)时,我需要更改 Publishable Key(From Mobile App) 和 Secret Key(From Server Side) 对吗?
5)更改新密钥后,在条带仪表板上无法再接收付款 . 这是来自Stripe的日志消息 .
{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."}
}
Error Status is 401
我的问题是,当来自另一个Stripe帐户的切换API(Publishable&Secret)密钥时,app无法正常工作?