@unchainedshop/ticketing
v2.17.0
Published
## Prepare Apple Certificate
Downloads
656
Readme
Unchained Ticketing Extension
Prepare Apple Certificate
Add a new Pass Type ID on developer.apple.com, then gernerate fresh production certificate. Download the Certificate and import it into your Keychain.
Export with Keychain: Select the "Certificates" Tab, then the Pass Type ID, then select both the ID and the key, export in p12 format.
Convert to PEM It's important you set a PEM passphrase as it is required for Unchained Ticketing
openssl pkcs12 -in Zertifikate.p12 -legacy -clcerts -out cert_and_key.pem
- Configure the path and your Team ID by Env:
PASS_CERTIFICATE_PATH=./cert_and_key.pem
PASS_CERTIFICATE_SECRET=YOUR_PEM_PASSPHRASE
PASS_TEAM_ID=SSCB95CV6U
Setup Example
boot.js:
import { modules, setupTicketing } from "@unchainedshop/ticketing";
...
const app = express();
const httpServer = http.createServer(app);
const engine = await startPlatform({
modules,
options: {},
});
await engine.apolloGraphQLServer.start();
connectPlatformToExpress4(app, engine, { corsOrigins: [] });
// Unchained Ticketing Extension
setupTicketing(app, engine.unchainedAPI as TicketingAPI, {
renderOrderPDF,
createAppleWalletPass,
createGoogleWalletPass,
});
...
renderOrderPDF.ts:
import React from "react";
import ReactPDF, { Document } from "@react-pdf/renderer";
const TicketTemplate = ({ tickets }: { tickets: Array<any> }) => {
return (
<Document>
Hello World
</Document>
);
};
export default async (
{ orderId, variant }: { orderId: string },
{ modules },
) => {
const order = await modules.orders.findOrder({ orderId });
...
const pdfStream = await ReactPDF.renderToStream(
<TicketTemplate tickets={tickets} />,
);
return pdfStream;
};
createAppleWalletPass.ts:
import { UnchainedCore } from "@unchainedshop/types/core.js";
import { Template, constants } from "@walletpass/pass-js";
export default async (token, unchainedAPI: UnchainedCore) => {
const template = new Template(
"eventTicket",
...
);
const pass = await template.createPass(...);
return pass;
};
createGoogleWalletPass.ts:
import { UnchainedCore } from "@unchainedshop/types/core.js";
import { google } from "googleapis";
import jwt from "jsonwebtoken";
export default async (token, unchainedAPI: UnchainedCore) => {
const product = ...;
// upsert class
// upsert object
const asURL = async () =>
createJwtNewObjects(issuerId, product._id, token.chainTokenId);
return { asURL };
};
Magic Key Order Access
Sometimes it's handy for users to allow them to access their orders and their tickets without actually logging in. For this you can generate a "magic key" that allows access to a single order and it's tickets via a request http header called x-magic-key
.
For example: To retrieve the magic-key when sending an order-confirmation e-mail, just call await modules.passes.buildMagicKey(orderId);
and append it to an URL like https://my-shop/:orderId?otp=:magicKey and then in the storefront, use the magic key and send it along via x-magic-key http header when using queries that are guarded by the actions viewOrder
, updateToken
and viewToken