如何使用 Stripe 为 Apple Pay 创建令牌

问题描述

所以我的最终目标是能够在 Stripe 上使用 Apple Pay 进行测试支付,无论是使用令牌还是其他方式。

**EDIT **我使用这个函数从钱包中存储的卡中收集卡信息:

 func applePayContext(_ context: STPApplePayContext,didCreatePaymentMethod paymentMethod: STPPaymentMethod,paymentInformation: PKPayment,completion: @escaping STPIntentClientSecretCompletionBlock) {
    guard let paymentIntentClientSecret = paymentIntentClientSecret else {
        return;
    }

    let backendUrlForToken = "https://us-central1-xxxxxx-41f12.cloudfunctions.net/createStripeToken"
    let url = URL(string: backendUrlForToken)
    let pkToken = String(data: paymentInformation.token.paymentData,encoding: .utf8)
    guard let name = paymentInformation.billingContact?.name else { return }
    let nameFormatter = PersonNameComponentsFormatter()
    nameFormatter.string(from: name)
    let json: [String: Any] = [
        "card": [
            
            "address_city": paymentInformation.billingContact?.postalAddress?.city,"address_country": paymentInformation.billingContact?.postalAddress?.country,"address_line1": paymentInformation.billingContact?.postalAddress?.street,"address_state": paymentInformation.billingContact?.postalAddress?.state,"address_zip": paymentInformation.billingContact?.postalAddress?.postalCode,"name": name
        ],"muid": UIDevice.current.identifierForVendor?.uuidString,"pk_token": pkToken,"pk_token_instrument_name": paymentInformation.token.paymentMethod.displayName,"pk_token_payment_network": paymentInformation.token.paymentMethod.network?.rawValue,"pk_token_transaction_id": paymentInformation.token.transactionIdentifier
    ]
    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    request.setValue("application/json",forHTTPHeaderField: "Content-Type")
    request.httpBody = try? JSONSerialization.data(withJSONObject: json)
    let task = URLSession.shared.dataTask(with: request) { (data,response,error) in
        guard let response = response as? HTTPURLResponse,response.statusCode == 200,let data = data,let json = try? JSONSerialization.jsonObject(with: data,options: []) as? [String: Any],let token = json["id"] as? String else {
                print("Error getting Stripe token")
                return
            }
        print("\(token)")
        self.stripeToken = token
        
    }
    
    task.resume()
    
    
    let error = NSError()
    completion(paymentIntentClientSecret,error)
    
}

我没有 API 调用的端点,所以我创建了这个令牌请求。这是我在 API 端点上的功能:

exports.createStripeToken = functions.https.onRequest(async (req,res) => {
var cardAddressCity = req.body.card.address_city;
var cardAddressCountry = req.body.card.address_country;
var cardAddressLine = req.body.card.address_line1;
var cardAddressProvince = req.body.card.address_state;
var cardAddressPostalCode = req.body.card.address_zip;
var cardHolderName = req.body.card.name;

var muid = req.body.muid;
var pkToken = req.body.pk_token;
var pkTokenInstrument = req.body.pk_token_instrument_name;
var pkTokenNetwork = req.body.pk_token_payment_network;
var pkTokenTransactionID =  req.body.pk_token_transaction_id;

const token = await stripe.tokens.create({
  card: {
    "address_city": cardAddressCity,"address_country": cardAddressCountry,"address_line1": cardAddressLine,"address_state": cardAddressProvince,"address_zip": cardAddressPostalCode,"name": cardHolderName
  },"muid": muid,"pk_token_instrument_name": pkTokenInstrument,"pk_token_payment_network": pkTokenNetwork,"pk_token_transaction_id": pkTokenTransactionID 
});

res.send({
  id: token.id,});

});

我不确定这是否是正确的方法,我在互联网上根本找不到关于此的太多信息。

我认为这是我在 api 日志中看到的参数,所以我使用了相同的参数,并且我还在 gist.github 上看到了一个罕见的帖子,其中有人进行了与此类似的 API 调用,但出于某种原因它仍然根本不起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)