Google Pay 谷歌支付(gateway = stripe)

本文介绍如何集成 Google Pay 国际版进行支付,包括接入流程、主要代码实现及配置步骤。文中提供了详细的示例代码,展示了如何通过 Stripe 完成支付验证。

Google pay 国际版开发


一、官网地址(科学上网)

官方对接文档 https://developers.google.com/pay/api/android/overview
Stripe对接Google Pay https://stripe.com/docs/google-pay
Stripe验证支付 https://stripe.com/docs/payments/accept-a-payment?integration=elements
Stripe管理后台 https://dashboard.stripe.com/dashboard

二、接入流程

Google Pay.jpg

三、主要流程

1、服务器请求orderId
2、调用Google Pay
3、通过Stripe完成支付
4、服务器完成验证

四、主要代码实现(1、4主要是服务器流程,以下主要是2、3流程)

项目配置

build.gradle 添加
    implementation 'com.google.android.gms:play-services-wallet:18.1.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.stripe:stripe-android:16.0.1'
AndroidManifest.xml 的 application添加
    <meta-data
          android:name="com.google.android.gms.wallet.api.enabled"
          android:value="true" />

调用Google Pay

    @RequiresApi(api = Build.VERSION_CODES.N)
    private void payWithGoogle( double price) {
        if (paymentsClient == null) {
            paymentsClient = createPaymentsClient(mActivity);
        }
        // 主要是Google Pay一些参数设置
        Optional<JSONObject> paymentDataRequestJson = createPaymentDataRequest(price);
        if (!paymentDataRequestJson.isPresent()) {
            return;
        }
        PaymentDataRequest request =
                PaymentDataRequest.fromJson(paymentDataRequestJson.get().toString());
        if (request != null) {
            if (mActivity!=null){
                mActivity.showCircle2Loading();
            }
          // 调起 Google Pay 
            AutoResolveHelper.resolveTask(
                    paymentsClient.loadPaymentData(request),
                    mActivity,
                    LOAD_PAYMENT_DATA_REQUEST_CODE
            );
        }
    }

Google Pay 基本设置

    @RequiresApi(api = Build.VERSION_CODES.N)
    private Optional<JSONObject> createPaymentDataRequest(double priceCents) {
        try {
            JSONObject paymentDataRequest = getBaseRequest();
            // 指定是否支持 Google Pay API 所支持的一种或多种付款方式。
            paymentDataRequest.put("allowedPaymentMethods", new JSONArray().put(getCardPaymentMethod()));
            // 有关根据用户是否同意交易来为交易授权的详细信息。包含总价和价格状态
            paymentDataRequest.put("transactionInfo", getTransactionInfo(priceCents));
            //商家信息
            paymentDataRequest.put("merchantInfo", getMerchantInfo());
            paymentDataRequest.put("shippingAddressRequired", false);
            paymentDataRequest.put("emailRequired", false);
            return Optional.of(paymentDataRequest);

        } catch (JSONException e) {
            return Optional.empty();
        }
    }
   private JSONObject getCardPaymentMethod() throws JSONException {
        JSONObject cardPaymentMethod = getBaseCardPaymentMethod();
        // 设置stripe为付款方式
        JSONObject tokenizationSpec = new GooglePayConfig(LIVE_API).getTokenizationSpecification();
        cardPaymentMethod.put("tokenizationSpecification", tokenizationSpec);
        return cardPaymentMethod;
    }

    /**
     * 金钱信息
     */
    private JSONObject getTransactionInfo(double price) throws JSONException {
        JSONObject transactionInfo = new JSONObject();
        transactionInfo.put("totalPrice", price+"");
        transactionInfo.put("totalPriceStatus", "FINAL");
        transactionInfo.put("countryCode", COUNTRY_CODE);
        transactionInfo.put("currencyCode", CURRENCY_CODE);
        transactionInfo.put("checkoutOption", "COMPLETE_IMMEDIATE_PURCHASE");

        return transactionInfo;
    }

    /**
     * 商家信息
     * merchantId 商家Id
     */
    private JSONObject getMerchantInfo() throws JSONException {
        return new JSONObject().put("merchantName", "Guruji").put("merchantId", "填写商家ID");
    }
    private JSONObject getBaseRequest() throws JSONException {
        return new JSONObject()
                .put("apiVersion", 2)
                .put("apiVersionMinor", 0);
    }

Google Pay返回数据

{
  "apiVersionMinor": 0,
  "apiVersion": 2,
  "paymentMethodData": {
    "description": "中国招商银行 (CMB) •••• 5019",
    "tokenizationData": {
      "type": "PAYMENT_GATEWAY",
      "token": "{\n  \"id\": \"tok_1HcQIMBcf7rsT369XhdHf1aI\",\n  \"object\": \"token\",\n  \"card\": {\n    \"id\": \"card_1HcQIMBcf7rsT369lDDy6PIM\",\n    \"object\": \"card\",\n    \"address_city\": null,\n    \"address_country\": null,\n    \"address_line1\": null,\n    \"address_line1_chec
### 如何在 Stripe 中集成 Google Pay 功能 为了实现 Stripe 平台上的 Google Pay 集成功能,开发者需要遵循特定的技术指南以及 API 文档中的说明。以下是关于如何配置和启用此功能的关键要点: #### 启用 Google Pay 的前提条件 Google Pay 支持通过 StripePayment Intents 和 Checkout APIs 实现支付流程自动化[^1]。要开始集成过程,需满足以下基本需求: - 商家账户已激活并支持 Google Pay。 - 客户端设备运行 Android 或 iOS 系统版本兼容的应用程序。 #### 技术实施步骤概述 尽管不建议使用分步描述,但技术上涉及的主要方面如下所示: 1. **前端初始化** 开发者应利用 Stripe 提供的 JavaScript SDK 来加载必要的组件,并检测用户的浏览器环境是否允许调用 Google Pay 接口。这一步骤通常会返回一个布尔值表示当前上下文中能否显示按钮控件。 2. **创建 Payment Method 对象** 当用户点击触发事件后,应用程序应当向服务器发起请求以获取临时密钥(Ephemeral Key),随后构建包含所需参数的对象实例传递给 `stripe.paymentMethods.create()` 方法执行实际操作。 3. **验证交易状态** 成功提交数据包之后,服务端负责监听回调通知来确认最终结果;如果一切正常,则更新订单记录并将反馈信息呈现给终端客户查看。 ```javascript // Example Code Snippet for Integrating Google Pay via Stripe.js Library const stripe = require('stripe')('your-secret-key'); async function createPaymentMethod() { const paymentIntentResponse = await fetch('/create-payment-intent', { method: 'POST' }); let clientSecret; if (!paymentIntentResponse.ok) throw new Error(`Failed to retrieve Client Secret`); try{ ({client_secret: clientSecret} = await paymentIntentResponse.json()); } catch(err){ console.error("Error parsing JSON response:", err.message); return null; } const elementsOptions = { mode: 'payment', amount: 1099, currency: 'usd' }; const googlePayConfig = Object.assign({},elementsOptions,{ allowed_payment_methods:[{type:'card'}], billing_address_required:true, shipping_address_parameters:{allowed_countries:["US"]} }); const elementInstance=await stripe.elements().create('googlePayButton',{configuration:googlePayConfig}); document.getElementById('container').appendChild(elementInstance.mount('#button')); } ``` 上述脚本片段展示了如何借助官方库文件完成基础框架搭建工作流的一部分逻辑代码样例。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值