簡體   English   中英

如何使用 Stripe 為 Apple Pay 創建令牌

[英]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 會:

  1. 從 Apple Pay 加密卡詳細信息創建令牌。

  2. 使用 Token,創建 PaymentMethod object。

  3. 然后觸發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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM