Apple Pay 和 Google Pay
您可以使用 Apple Pay 和 Google Pay 来收集付款详情,作为代表付款人已添加到其 Apple 或 Google Pay 钱包的支付卡的令牌。
Apple Pay
要从付款人的钱包中获取 Apple Pay 令牌:
- 要使用 Apple Pay 接受付款,请为 Apple Pay 配置您的应用。 有关说明,请参见 Apple 开发人员文档中的配置环境。
- 当付款人的订单流程到达您的结账页面时,使用
PKPaymentAuthorizationController上的canMakePayments()函数确定设备是否支持 Apple Pay。 如果支持 Apple Pay,则显示 Apple Pay 按钮作为付款选项,使用 Apple 提供的PKPaymentButton。 - 构造并使用
PKPaymentRequest。 有关说明,请参阅 Apple 开发者文档中的 创建付款请求 。 - 用户向 Apple Pay 授权后,使用付款令牌
PKPAYMENTTOKEN更新网关会话:- 获取支付令牌作为字符串发送到网关。
请求示例
let tokenString = String(data: payment.token.paymentData, encoding.utf8) - 将令牌字符串作为
devicePayment填充到GatewayMap中,并通过设置walletProvider指定令牌来自 Apple Pay。请求示例var request = GatewayMap() request.sourceOfFunds.provided.card.devicePayment.paymentToken = tokenString request.order.walletProvider = "APPLE_PAY" - 使用
GatewayAPI对象上的updateSession()函数将请求的GatewayMap发送到网关。请求示例GatewayAPI.shared.updateSession("< session id#>", apiVersion: "< Gateway API Version#<", payload: request) { (result) in switch result { case .success(let response): print(response.description) case .error(let error): print(error) } }
- 获取支付令牌作为字符串发送到网关。
- 使用 PAY 或 AUTHORIZE 交易像任何其他付款一样从您的服务器完成 Apple Pay 交易。 在使用 Apple Pay 的会话中完成付款时,将
order.walletProvider字段设置为APPLE_PAY并在请求中包含会话 ID。
创建 Apple Pay 付款处理证书时,使用网关向您提供的证书签名请求 (CSR)。 有关如何生成 CSR 的说明,请参见配置环境。
Google Pay
Mobile SDK 附带一个名为 GooglePayHandler 的助手实用程序,用于从付款人的 Google Pay 电子钱包收集令牌:
- 在您的应用中启用 Google Pay 支持。 有关说明,请参阅 Google Pay 文档。 本说明将指导您:
- 设置 Google Pay API。
- 从 Google 电子钱包请求付款信息。
- 在您的结账布局中加入 Google Pay 按钮。
- 管理来自 Google Pay API 的响应。
- 由于 Google Pay 集成对于 Mobile SDK 是可选的,因此请提供适当的 Play 服务依赖项:
请求示例
implementation 'com.google.android.gms:play-services-wallet:X.X.X'网关作为
PAYMENT_GATEWAY类型与 Google Pay 集成。 - 要从 Google Pay 请求加密的卡信息:
- 在您的请求中使用有效的名称
mpgs。 - 将
MERCHANT_ID替换为您在网关上使用的商家 ID。请求示例val tokenizationSpecification = JSONObject() .put("type", "PAYMENT_GATEWAY") .put("parameters", JSONObject() .put("gateway", "mpgs") .put("gatewayMerchantId", "MERCHANT_ID"))
- 在您的请求中使用有效的名称
- 使用
GooglePayHandler在您构建的支付客户端上启动 Google Pay 电子钱包,然后请求数据。请求示例// YourActivity.kt fun googlePayButtonClicked() { try { val request = PaymentDataRequest.fromJson(paymentDataRequest.toString()) // use the Gateway convenience handler for launching the Google Pay flow GooglePayHandler.requestData(this, paymentsClient, request) } catch (e: JSONException) { Toast.makeText(this, "Could not request payment data", Toast.LENGTH_SHORT).show() } } - 为了管理电子钱包响应,Mobile SDK 提供 Google Pay 生命周期处理程序。 您可以实现提供的 Google Pay 回调并在您的活动中使用结果处理程序。 这样就无需手动管理 Google Pay 活动结果,并将重要的交易步骤委托给回调方法。
请求示例
// YourActivity.kt override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { // handle the Google Pay response if (GooglePayHandler.handleActivityResult(requestCode, resultCode, data, callback)) { return } super.onActivityResult(requestCode, resultCode, data) } val googlePayCallback = object : GooglePayCallback { override fun onReceivedPaymentData(paymentData: JSONObject) { try { val description = paymentData.getJSONObject("paymentMethodData") .getString("description") Log.d(MyGooglePayCallback::class.java.simpleName,"ReceivedPaymentData: $description") } catch (e: Exception) { // handle exception } handleGooglePayData(paymentData) } override fun onGooglePayCancelled() { // handle cancelled } override fun onGooglePayError(status: Status) { // handle error } } - 当您收到来自 Google Pay 的付款数据时,请使用付款令牌更新网关会话。
请求示例
fun handleGooglePayData(paymentData: JSONObject) { val token = paymentData.getJSONObject("paymentMethodData") .getJSONObject("tokenizationData") .getString("token") val request = GatewayMap() .set("sourceOfFunds.provided.card.devicePayment.paymentToken", token) GatewayAPI.updateSession(session, request, callback) } - 使用 PAY 或 AUTHORIZE 交易像任何其他付款一样从您的服务器完成 Google Pay 交易。 在使用 Google Pay 的会话中完成付款时,将
order.walletProvider字段设置为GOOGLE_PAY并在请求中包含会话 ID。