البدء السريع: قبول دفعة

ستحصل في النهاية على مكوّن React يعرض رمز QR الخاص بـ سولانا Pay لدفعة بعملة USDC، وينتظر وصول الدفعة، ويتحقق من أنها تطابق ما طلبته. تحتاج إلى Node.js 20 أو أحدث، وتطبيق React أو Next.js (يكفي إنشاء create-next-app جديد)، ومحفظة جوال مضبوطة على devnet. موّلها بعملة USDC على devnet من faucet.circle.com وبعملة SOL على devnet من faucet.solana.com لتغطية رسوم المعاملات.

@solana/pay قيد التجربة التجريبية حاليًا. قد تتغير واجهات برمجة التطبيقات قبل الإصدار المستقر.

1. تثبيت سولانا Pay

pnpm add @solana/pay@beta @solana/kit

2. إضافة رمز QR للدفع

ينشئ المكوّن مرجعًا فريدًا للطلب، ويضمّنه في رابط طلب التحويل، ثم يعرض الرابط على هيئة رمز QR. بعد ذلك يراقب وجود معاملة تتضمن المرجع، ويتحقق من المستلم والمبلغ والرمز المميز قبل تعليم الطلب على أنه مدفوع. اضبط MERCHANT_WALLET على عنوان تتحكم فيه:

"use client";
import { useEffect, useRef, useState } from "react";
import {
address,
createSolanaRpc,
createSolanaRpcSubscriptions,
generateKeyPair,
getAddressFromPublicKey
} from "@solana/kit";
import {
createQR,
encodeURL,
validateTransfer,
watchReference
} from "@solana/pay";
const MERCHANT_WALLET = address("your-wallet-address");
const USDC_DEVNET = address("4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU");
const AMOUNT = 1;
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.devnet.solana.com"
);
export function Checkout() {
const qrRef = useRef<HTMLDivElement>(null);
const [signature, setSignature] = useState<string | null>(null);
useEffect(() => {
const abortController = new AbortController();
async function startPayment() {
const keyPair = await generateKeyPair();
const reference = await getAddressFromPublicKey(keyPair.publicKey);
const url = encodeURL({
recipient: MERCHANT_WALLET,
amount: AMOUNT,
splToken: USDC_DEVNET,
reference,
label: "My Store",
message: "Order #1001"
});
if (abortController.signal.aborted) return;
if (qrRef.current) {
qrRef.current.innerHTML = "";
createQR(url, 300).append(qrRef.current);
}
const result = await watchReference(rpcSubscriptions, reference, {
abortSignal: abortController.signal
});
if (result.err) throw new Error("Payment transaction failed");
await validateTransfer(rpc, result.signature, {
recipient: MERCHANT_WALLET,
amount: AMOUNT,
splToken: USDC_DEVNET,
reference
});
setSignature(result.signature);
}
startPayment().catch((error) => {
if (!abortController.signal.aborted) console.error(error);
});
return () => abortController.abort();
}, []);
if (signature) return <p>Payment confirmed: {signature}</p>;
return <div ref={qrRef} />;
}

تُحدَّد amount بوحدات الرمز المميز، لذا تطلب القيمة 1 مبلغ 1 USDC. احذف splToken لطلب SOL بدلًا من ذلك.

3. استلام دفعة

شغّل تطبيقك، وامسح رمز QR بمحفظتك، ووافق على الدفعة. بمجرد تأكيد المعاملة واجتيازها التحقق، يعرض المكوّن توقيع المعاملة. هذا التوقيع هو إيصالك: ابحث عنه باستخدام getTransaction أو في أي مستكشف.

التحقق في المتصفح مناسب للعرض التجريبي. قبل تنفيذ الطلبات الحقيقية، تحقق من الدفعات على خادمك. راجع التحقق من المدفوعات.

إلى أين تذهب بعد ذلك

Is this page helpful?

جدول المحتويات

تعديل الصفحة