pinme-uniwebpay
Use when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout sessions, payment status reads, refunds, subscriptions, or handling UniwebPay webhooks with @uniwebpay/sdk in a PinMe project.
npx skills add glitternetwork/pinme --skill pinme-uniwebpay --agent claude-code
Same command for any agent — swap --agent for codex, cursor, copilot.
Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.
What it does
Guides writing PinMe Worker code that talks to UniwebPay directly using the @uniwebpay/sdk to handle payments, webhooks, and wallet configuration for a PinMe user.
How it works
- Establishes a server-side Uniweb client in the Worker using the environment bindings (UNIWEB_SECRET, UNIWEB_API_URL, UNIWEB_PAY_URL, UNIWEB_WEBHOOK_SECRET).
- Injects environment bindings at deploy time; warns that existing projects must redeploy to pick up new UNIWEB bindings.
- Recommends creating and reusing stable product/price links and checkout sessions through UniwebPay SDK calls (products.create, prices.create, checkout.create, etc.) and using the provided return values (e.g., session.url, priceId).
- Emphasizes that the SDK should be instantiated on the server side, not in the browser, and notes retry behavior (GET/DELETE retried on 429/5xx; POST/PATCH not retried).
- Describes webhook integration: set webhookUrl on per-link or per-product resources; wallet-level webhook URL is a fallback. Webhook verification uses verifyWebhook with the wallet-level secret and enforces HTTPS webhooks. Details matching event types and handling rules are provided, including idempotency and delivery timing.
- Outlines security rules and forbidden practices (no secrets in responses/logs/code; do not call legacy proxies; avoid browser imports of the SDK).
- Provides a persistence note for D1 usage only if the project already uses D1 or the user requests persistence.
When to use it
Use when you are generating, modifying, or reviewing PinMe Worker code that accepts UniwebPay payments (links, products/prices, checkout sessions, status reads, refunds, subscriptions) or handles UniwebPay webhooks with the SDK in a PinMe project. It is intended for Cloudflare Worker TypeScript environments.
What it can touch
- Environment bindings: UNIWEB_SECRET, UNIWEB_WEBHOOK_SECRET, UNIWEB_API_URL, UNIWEB_PAY_URL, UNIWEB_WALLET_ID, WORKER_URL, PROJECT_NAME, DB (D1) as described in Env interface.
- UniwebPay SDK surface via types and methods shown (products, prices, checkout, payments, refunds, customers, subscriptions, links, wallet, webhooks).
- Webhook endpoints and verification logic as described (verifyWebhook and related event shapes).
Caveats
- Existing projects must redeploy after enabling UniwebPay or rotating keys to pick up new bindings.
- PinMe never exposes the full wallet secret to a Worker or frontend; this secret must be kept server-side.
- The wallet-level webhook secret is optional in TypeScript; if missing at runtime, return 501 with a hint.
- Webhook URLs must be HTTPS and use a project-specific webhook path constant; testing locally requires tunneling to expose the Worker.
- The skill emphasizes not using legacy VibeCash APIs or PinMe payment proxy routes; direct UniwebPay SDK calls are required.
# PinMe UniwebPay Payment Integration Guides writing payment services in a PinMe Worker (Cloudflare Worker TypeScript) that call UniwebPay directly through `@uniwebpay/sdk`. Core model: PinMe provisions the UniwebPay wallet and keys per **PinMe user** (not per project) and injects `UNIWEB_*` environment bindings at Worker deploy time; Worker code calls UniwebPay **directly with the SDK** — it does not go through PinMe payment proxy routes, and it must not call the legacy VibeCash APIs. ## Environment Binding Contract ```typescript export interface Env { UNIWEB_SECRET: string; // PinMe-provisioned sk_server_ key (server-side only) UNIWEB_WEBHOOK_SECRET?: string; // wallet-level whsec_, used to verify webhook signatures UNIWEB_API_URL?: string; // UniwebPay API endpoint override (default https://apiskill.uniwebpay.com) UNIWEB_PAY_URL?: string; // UniwebPay checkout host override (default https://skill.uniwebpay.com) UNIWEB_WALLET_ID?: string; // user-level wallet id (wal_), diagnostics/reconciliation only WORKER_URL?: string; // this project's public URL: https://{projectName}.{platform api domain} PROJECT_NAME?: string; // PinMe project name DB?: D1Database; // project D1 (if enable
- Environment Binding Contract
- SDK Client
- Choosing an Integration Path
- Payment Methods and Currency Rules
- SDK Surface Quick Reference
- Webhook Integration
- Callback URL: set it on the link/product, pointing at this Worker
- Verification and Handling
- Security Rules
- Persistence Guidance (D1)
- Worker Reference Implementation
- Common Mistakes
- Finish Checklist
What does the pinme-uniwebpay skill do?
Use when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout sessions, payment status reads, refunds, subscriptions, or handling UniwebPay webhooks with @uniwebpay/sdk in a PinMe project.
How do I install it?
Run `npx skills add glitternetwork/pinme --skill pinme-uniwebpay --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.
Where does this skill come from?
From glitternetwork/pinme, a repository with 3,731 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.
Is a popular skill a good skill?
Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.
