【问题标题】:Firebase Trigger Razorpay Intergration for Android适用于 Android 的 Firebase 触发器 Razorpay 集成
【发布时间】:2020-07-14 15:31:12
【问题描述】:

我正在创建一个用户可以购买硬币的应用程序,为此我一直在尝试将 Razorpay 集成到我的 Android 应用程序中很长时间以来。 Razorpay 可以直接在 Android 中使用。它发送付款成功或失败结果,我可以采取相应的行动(在这种情况下向数据库添加积分)。但是这种方法的问题是我必须从应用程序向数据库写入点(成功后)。这意味着我必须将点节点的写入权限授予用户应用程序,这不是一个好主意。所以我想将 Razorpay 与 Firebase Cloud Functions 一起使用,并且搜索了很长时间,我发现了这个用于网络的 tutorial。我对 Cloud Functions 很陌生,因此希望对 Android 有所帮助。

这是 Index.js 代码,但适用于 Web

const functions = require("firebase-functions");
var express = require("express");
var cors = require("cors");
var request = require("request");
const crypto = require("crypto");
const key = "----insert yout key here----";
const key_secret = "----- insert key secret here ----";

var app = express();

app.use(cors({ origin: true }));

app.post("/", (req, res) => {
  const amount = req.body.amount;

  //Allow Api Calls from local server
  const allowedOrigins = [
    "http://127.0.0.1:8080",
    "http://localhost:8080",
    "https://-------YourFirebaseApp-----.firebaseapp.com/"
  ];
  const origin = req.headers.origin;
  if (allowedOrigins.indexOf(origin) > -1) {
    res.setHeader("Access-Control-Allow-Origin", origin);
  }

  var options = {
    method: "POST",
    url: "https://api.razorpay.com/v1/orders",
    headers: {
      //There should be space after Basic else you get a BAD REQUEST error
      Authorization:
        "Basic " + new Buffer(key + ":" + key_secret).toString("base64")
    },
    form: {
      amount: amount,
      currency: "INR",
      receipt:
        "----- create a order in firestore and pass order_unique id here ---",
      payment_capture: 1
    }
  };

  request(options, function(error, response, body) {
    if (error) throw new Error(error);

    res.send(body);
  });
});

app.post("/confirmPayment", (req, res) => {
  const order = req.body;
  const text = order.razorpay_order_id + "|" + order.razorpay_payment_id;
  var signature = crypto
    .createHmac("sha256", key_secret)
    .update(text)
    .digest("hex");

  if (signature === order.razorpay_signature) {
    console.log("PAYMENT SUCCESSFULL");

    res.send("PAYMENT SUCCESSFULL");
  } else {
    res.send("something went wrong!");
    res.end();
  }
});

exports.paymentApi = functions.https.onRequest(app);

【问题讨论】:

  • 你解决了吗,也请帮帮我!!

标签: android firebase google-cloud-functions payment-gateway razorpay


【解决方案1】:

我想这会对你有所帮助。

在我的例子中,我从用户的购物车访问项目(产品 ID 数组)并读取项目的当前价格,然后将其作为参数传递给 SendOrderId 函数,该函数将返回一个 OrderId 以继续。

要记住的重要一点是,您必须在 package.json 中的依赖项中添加 razorpay。你可以通过简单地运行来做到这一点

npm i razorpay 

在您的函数文件夹中(包括 index.js),它将自动将依赖项添加到您的项目中

const functions = require("firebase-functions");
const admin = require('firebase-admin');
const Razorpay = require('razorpay')
const razorpay = new Razorpay({
    key_id: 'Your_razorpay_key_id',
    key_secret: 'your_secret'
})
admin.initializeApp();

function SendOrderId(amountData, response) {
  var options = {
      amount: amountData,  // amount in the smallest currency unit
      currency: "INR",
    };
    razorpay.orders.create(options, function(err, order) {
      console.log(order);
      response.send(order);
    });
}

exports.getOrderId = functions.https.onRequest((req, res) => {
  return admin.firestore().collection('Users').doc(req.query.uid).get().then(queryResult => {
    console.log(queryResult.data().Cart);
    admin.firestore().collectionGroup("Products").where('ProductId', 'in', queryResult.data().Cart).get().then(result => {
      var amount = 0;
      result.forEach(element => {
        amount += element.data().price;
      });
      SendOrderId(amount * 100, res);
    })
  })
});

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 2018-05-12
    • 2018-12-03
    • 2018-06-17
    • 2023-02-09
    • 1970-01-01
    • 2021-06-02
    • 2020-08-18
    • 2018-09-02
    相关资源
    最近更新 更多