![](/img/trans.png)
[英]Can I use Apple Pay to create a Stripe Token without charging the user?
[英]how can I create a token for Apple Pay with Stripe
所以我的最終目標是能夠在 Stripe 上使用 Apple Pay 進行測試支付,無論是使用代幣還是其他方式。
**編輯**我有這個 function 我用來從錢包中存儲的卡中收集卡信息:
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 端點上的 function:
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": pkToken,
"pk_token_instrument_name": pkTokenInstrument,
"pk_token_payment_network": pkTokenNetwork,
"pk_token_transaction_id": pkTokenTransactionID
});
res.send({
id: token.id,
});
});
我不確定這是否是正確的方法,我在互聯網上根本找不到太多關於此的信息。
我認為這是我在 api 日志中看到的參數,所以我使用了相同的參數,並且我還在 gist.github 上看到了一個罕見的帖子,該帖子是一個制作ZDB974238714CA8DE634A7CE1D083A14Z的人的帖子,但由於某種原因它仍然與此類似,工作。
您的語句/日志沒有受到影響,因為 STPApplePayContext 內部的令牌創建失敗。 對於背景,STPApplePayContext 會:
從 Apple Pay 加密卡詳細信息創建令牌。
使用 Token,創建 PaymentMethod object。
然后觸發didCreatePaymentMethod()
委托實現。
第 1 步失敗了。
通常,當我看到令牌創建請求 500 時,這通常意味着 XCode 上使用的商家 ID 與 Stripe 帳戶上設置的證書可能不匹配。 或者可能是 Stripe 帳戶國家/地區不支持 PKPaymentNetwork 的某種組合。
我會重新設置商家 ID 和 Apple Pay 證書的步驟,最好是在一個新項目上消除任何混亂或沖突等。
由於這是 500,Stripe Support 將是處理該問題的合適人選,因為錯誤可能在於他們的最后。 我會為您的 /v1/tokens 創建請求提供他們的請求 ID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.