init
This commit is contained in:
161
.opencode/skills/payment-integration/references/creem/sdk.md
Normal file
161
.opencode/skills/payment-integration/references/creem/sdk.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# Creem.io SDKs
|
||||
|
||||
## Official SDKs
|
||||
|
||||
### Core SDK (`creem`)
|
||||
|
||||
Full API access with maximum flexibility:
|
||||
|
||||
```bash
|
||||
npm install creem
|
||||
# or
|
||||
pip install creem
|
||||
```
|
||||
|
||||
```javascript
|
||||
// Node.js
|
||||
import Creem from 'creem';
|
||||
|
||||
const creem = new Creem({
|
||||
apiKey: process.env.CREEM_API_KEY
|
||||
});
|
||||
|
||||
// Create checkout
|
||||
const session = await creem.checkout.sessions.create({
|
||||
product_id: 'prod_xxx',
|
||||
success_url: 'https://example.com/success'
|
||||
});
|
||||
```
|
||||
|
||||
```python
|
||||
# Python
|
||||
from creem import Creem
|
||||
|
||||
creem = Creem(api_key=os.environ['CREEM_API_KEY'])
|
||||
|
||||
session = creem.checkout.sessions.create(
|
||||
product_id='prod_xxx',
|
||||
success_url='https://example.com/success'
|
||||
)
|
||||
```
|
||||
|
||||
### Wrapper SDK (`creem_io`)
|
||||
|
||||
Helper functions for common operations:
|
||||
|
||||
```bash
|
||||
npm install creem_io
|
||||
```
|
||||
|
||||
```javascript
|
||||
import { CreemClient, verifyWebhook } from 'creem_io';
|
||||
|
||||
const client = new CreemClient({
|
||||
apiKey: process.env.CREEM_API_KEY,
|
||||
webhookSecret: process.env.CREEM_WEBHOOK_SECRET
|
||||
});
|
||||
|
||||
// Simplified webhook verification
|
||||
app.post('/webhook', async (req, res) => {
|
||||
const event = client.verifyWebhook(req.body, req.headers['x-creem-signature']);
|
||||
// Handle event...
|
||||
});
|
||||
|
||||
// Access management helpers
|
||||
const hasAccess = await client.checkAccess(customerId, productId);
|
||||
```
|
||||
|
||||
## Framework Adapters
|
||||
|
||||
### Next.js Adapter
|
||||
|
||||
End-to-end billing integration:
|
||||
|
||||
```bash
|
||||
npm install @creem/nextjs
|
||||
```
|
||||
|
||||
```typescript
|
||||
// app/api/checkout/route.ts
|
||||
import { createCheckout } from '@creem/nextjs';
|
||||
|
||||
export const POST = createCheckout({
|
||||
productId: 'prod_xxx',
|
||||
successUrl: '/success',
|
||||
cancelUrl: '/pricing'
|
||||
});
|
||||
|
||||
// app/api/webhooks/creem/route.ts
|
||||
import { handleWebhook } from '@creem/nextjs';
|
||||
|
||||
export const POST = handleWebhook({
|
||||
onCheckoutCompleted: async (session) => {
|
||||
await grantAccess(session.customer_id);
|
||||
},
|
||||
onSubscriptionCancelled: async (subscription) => {
|
||||
await revokeAccess(subscription.customer_id);
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### Better Auth Integration
|
||||
|
||||
Combined auth + payments:
|
||||
|
||||
```bash
|
||||
npm install @creem/better-auth
|
||||
```
|
||||
|
||||
```typescript
|
||||
import { betterAuth } from 'better-auth';
|
||||
import { creemPlugin } from '@creem/better-auth';
|
||||
|
||||
export const auth = betterAuth({
|
||||
plugins: [
|
||||
creemPlugin({
|
||||
apiKey: process.env.CREEM_API_KEY,
|
||||
webhookSecret: process.env.CREEM_WEBHOOK_SECRET,
|
||||
products: {
|
||||
pro: 'prod_xxx',
|
||||
enterprise: 'prod_yyy'
|
||||
}
|
||||
})
|
||||
]
|
||||
});
|
||||
|
||||
// Check subscription in auth session
|
||||
const session = await auth.getSession();
|
||||
if (session.user.subscription?.status === 'active') {
|
||||
// User has active subscription
|
||||
}
|
||||
```
|
||||
|
||||
### Next.js Template
|
||||
|
||||
Pre-built starter with Prisma, shadcn/ui, Tailwind:
|
||||
|
||||
```bash
|
||||
npx create-creem-app my-saas
|
||||
# or
|
||||
git clone https://github.com/creem-io/nextjs-template
|
||||
```
|
||||
|
||||
Includes:
|
||||
- Auth (Better Auth)
|
||||
- Database (Prisma)
|
||||
- UI (shadcn/ui, Tailwind)
|
||||
- Pricing page
|
||||
- Customer portal
|
||||
- Webhook handling
|
||||
|
||||
## Environment Variables
|
||||
|
||||
```bash
|
||||
# .env
|
||||
CREEM_API_KEY=sk_live_xxx # or sk_test_xxx for test mode
|
||||
CREEM_WEBHOOK_SECRET=whsec_xxx
|
||||
```
|
||||
|
||||
## AI Tool Integration
|
||||
|
||||
Creem supports Claude Code, Cursor, Windsurf via official skill - this document is part of that integration.
|
||||
Reference in New Issue
Block a user