【问题标题】:Having trouble implementing Braintree payment for Android using Firebase as backend使用 Firebase 作为后端为 Android 实施 Braintree 支付时遇到问题
【发布时间】:2020-02-25 23:40:11
【问题描述】:

我在 firebase 上得到这个输出:“无法确定付款方式”

注意:我对 JavaScript 和 Firebase 函数了解不多,无法使其正常工作。

我一直按照 Braintree 的指南设置付款方式。这是事件的流程:

第 1 步 您的前端从您的服务器请求客户端令牌并初始化客户端 SDK。

第 2 步 您的服务器使用服务器 SDK 生成客户端令牌并将其发送回您的客户端。

第 3 步 客户提交支付信息,客户端 SDK 将该信息传达给 Braintree 并返回支付方式 nonce。

第 4 步 您的前端将付款方式随机数发送到您的服务器。

第 5 步 您的服务器代码接收付款方式 nonce,然后使用服务器 SDK 创建交易。

到目前为止,我一直停留在第 5 步。nonce 以以下格式发布到我的 Firebase 数据库:

-nonce
   -LsHNQLklFEX48oiSt1H:"tokencc_bc_vbmypn_dvn4gy_xy47fw_th6vv9_bq6"
   -LsHn2hilKlmVeT1g1Ow: tokencc_bf_8qrjsk_j7bg44_p8kk88_qz7vn2_vk6"

我将如何进行第 5 步?

功能代码:

'use strict';

const functions = require('firebase-functions');
const express = require('express');
const app = express(); 
const braintree = require('braintree');
const admin = require('firebase-admin');

admin.initializeApp();

var clientToken;
var nonceFromTheClient;
var transaction;

var gateway = braintree.connect({
                        environment: braintree.Environment.Sandbox,
                        merchantId:"",
                        publicKey: "",
                        privateKey: ""
});

exports.createToken = functions.https.onRequest((request, response) => {

gateway.clientToken.generate({}, function (err, response) {
    if (err){
        console.log('inside error',err);    
    } else {
        clientToken = response.clientToken;
    }
});
response.send(clientToken);
});

exports.createTransaction = functions.https.onRequest((req, res) => {

app.post("/nonce", function (req, res) {
    nonceFromTheClient = req.body.payment_method_nonce;
    console.log("nonce" + nonceFromTheClient)
});

gateway.transaction.sale({amount: '10.00', paymentMethodNonce: nonceFromTheClient, options: {submitForSettlement: true}}, function (err, result) {
    if (err) {
        console.error(err);
        return;
    }
    if (result.success) {
        console.log('Transaction status: ' + result.transaction.status);
    } else {
        console.error(result.message);
    }
});
res.send(transaction);
});

活动代码:

if (cardPayment.isChecked) {
            val client = AsyncHttpClient()
            client.get(
                "https://.../createToken",
                object : TextHttpResponseHandler() {
                    override fun onFailure(
                        statusCode: Int,
                        headers: Array<out Header>?,
                        responseString: String?,
                        throwable: Throwable?
                    ) {

                    }

                    override fun onSuccess(
                        statusCode: Int,
                        headers: Array<Header>,
                        clientToken: String
                    ) {
                        mClientToken = clientToken

                        onBraintreeSubmit(it)
                    }
                })
        }

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == REQUEST_CODE && data != null) {
        if (resultCode == Activity.RESULT_OK) {
            val result =
                data.getParcelableExtra<DropInResult>(DropInResult.EXTRA_DROP_IN_RESULT)
            val nonce = result.paymentMethodNonce?.nonce
            if (nonce != null) {
                FirebaseShoppingCartDatabase.postNonceToDatabase(nonce)
                val client = AsyncHttpClient()

                client.get(
                    "https://..../createTransaction",
                    object : TextHttpResponseHandler() {
                        override fun onFailure(
                            statusCode: Int,
                            headers: Array<out Header>?,
                            responseString: String?,
                            throwable: Throwable?
                        ) {

                        }

                        override fun onSuccess(
                            statusCode: Int,
                            headers: Array<Header>,
                            clientToken: String
                        ) {

                        }
                    })
            }

        } else if (resultCode == RESULT_CANCELED) {

        } else {
            // handle errors here, an exception may be available in
            val error = data.getSerializableExtra(DropInActivity.EXTRA_ERROR) as Exception
            System.out.println("eroare " + error)
        }
    }
}

fun onBraintreeSubmit(v: View) {
    val dropInRequest = DropInRequest()
        .clientToken(mClientToken)
    dropInRequest
        .disablePayPal()
    startActivityForResult(dropInRequest.getIntent(context), REQUEST_CODE)
}
}

【问题讨论】:

  • 全面披露:我在 Braintree 工作。请使用您的merchant ID 与我们的support team 联系,以便我们查看我们的服务器日志以了解此错误的原因。也就是说,只要您正确地将 nonce 传递给您的服务器,您就应该能够使用它创建一个事务。
  • 实际上我让它工作了。我错误地将随机数传递给服务器。谢谢:D

标签: android firebase braintree


【解决方案1】:

让它工作。我错误地将随机数传递给服务器。 (使用不同的网址)

【讨论】:

    猜你喜欢
    • 2019-02-18
    • 2020-08-07
    • 2015-12-11
    • 1970-01-01
    • 2017-03-21
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    相关资源
    最近更新 更多