Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 34 additions & 65 deletions server/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"@clerk/express": "^1.7.15",
"@clerk/clerk-sdk-node": "^4.13.23",
"@clerk/express": "^1.7.2",
"cloudinary": "^2.7.0",
Expand Down
52 changes: 52 additions & 0 deletions server/routes/payments.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import express from "express";
import Razorpay from "razorpay";
import dotenv from "dotenv";
import crypto from "crypto";
const router=express.Router();
router.post("/orders",async(req,res)=>{
try{
const instance=new Razorpay({
key_id:process.env.KEY_ID,
key_secret:process.env.KEY_SECRET
})
const options={
amount:req.body.amount*100,
currency:"INR",
receipt:crypto.randomBytes(10).toString("hex")
}
instance.orders.create(options,(error,order)=>{
if(error){
return res.status(500).json({message:"Something went wrong"})
}
else{
return res.status(200).json({order})
}
})

}catch(error){
return res.status(500).json({message:"Intenal server error"})
}
})
router.post("/verify",async(req,res)=>{
try{
const{
razorpay_orderID,
razorpay_paymentID,
razorpay_signature
}=req.body
const sign=razorpay_orderID+"|"+razorpay_paymentID
const resultSign=crypto.createHmac("sha256",process.env.KEY_SECRET).update(sign.toString()).digest("hex");
if(razorpay_signature==resultSign){
return res.status(200).json({message:"Payment verified successfully"})
}
else{
return res.status(500).json({message:"Payment failed"})
}

}
catch(error){
console.log(error);
res.status(400).json({message:"Internal Server Error"})
}
})
export default router;
8 changes: 5 additions & 3 deletions server/sample.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
MONGODB_URI = database_uri

PORT=5000

#Clerk Keys
CLERK_PUBLISHABLE_KEY=your_publishable_key
CLERK_SECRET_KEY=your_secret_key
CLERK_WEBHOOK_SECRET=your_webhook_key
CLERK_SECRET_KEY=your_clerk_secret
CLERK_WEBHOOK_SECRET=your_webhook_key
KEY_ID=your_key
KEY_SECRET=your_secret
11 changes: 11 additions & 0 deletions server/server.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
import express from "express";
import "dotenv/config";
import cors from "cors";
import connectDB from "./configs/db.js";
import { clerkMiddleware } from '@clerk/express'
import clerkWebhooks from "./controllers/clerkWebhooks.js";
import paymentRoute from "./routes/payments.js"
import express from 'express';
import cors from 'cors';
import dotenv from 'dotenv';
Expand Down Expand Up @@ -26,6 +33,10 @@ app.post('/api/webhooks/clerk', express.raw({type: 'application/json'}), clerkWe
// Regular JSON parsing
app.use(express.json());

app.use('/api/clerk', clerkWebhooks);
app.use("/api/payment",paymentRoute);
app.get('/', (req, res) => {
res.send("API is Up and running");
// Attach Clerk middleware (parses auth tokens)
app.use(clerkMiddleware());

Expand Down