أدلة التكامل
انقل صوتًا لمرشح حقيقي إلى الدفع المركزي
تبقى الأهلية والكميات والسجلات تحت سلطة SparkGlim Server.
قبل البدء
- حملة عامة وفئة نشطة ومرشح حالتا status وapplication_status له معتمدتان.
- التواريخ والكميات والأسعار والعملة وظهور الأصوات من الإعدادات الفعلية.
- عميل Web المحمي القائم وتصريح لاختبار مضبوط.
احترم قواعد البرنامج
استخدم campaign_id وparticipant_id المختارين فعليًا وvote_count صحيحًا مسموحًا وبيانات التواصل المطلوبة. التحقق المحلي ليس تفويضًا.
احترم التواريخ ونشاط الفئة والموافقة. لا تعرض أعدادًا مخفية.
حافظ على الحد المحمي
يستدعي العميل fetchPublicFlow("/vote", ...) للوصول إلى POST /api/public/vote. تجهز Storm سياق المتصفح المطلوب من Server.
هذا الاستيراد خاص بالمستودع وليس SDK عامًا. يستخدم الموقع الخارجي غير المتكامل صفحة الحملة أو تكامل منظمة معتمدًا، دون معرفات جهاز مختلقة.
انقل الطلب دون تسجيل أصوات في المتصفح
تستقبل الدالة غير النشطة طلبًا ثابتًا وclient_attempt_id نفسه. عرض الشيفرة لا يرسل أصواتًا ولا يمنح تصريح اختبار.
افتح رابط الدفع المركزي المعاد. يؤكد Server الدفع والأصوات؛ لا تزيد المعلمات أو العودة أو الجلسة الأولية الأعداد. لا تضف تحققًا أو استطلاعًا دوريًا في المتصفح.
'use client';
import { fetchPublicFlow } from '@/lib/server-backend/public-api';
type Input = { campaign_id: string; participant_id: string; vote_count: number; phone_number: string; email?: string; client_attempt_id: string; return_path: string };
let requestStarted = false;
export async function initializeApprovedTest(input: Input, approvedTest: boolean) {
if (!approvedTest || requestStarted) return null;
requestStarted = true;
const response = await fetchPublicFlow('/vote', {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(input)
});
const result = await response.json();
if (!response.ok || result.success !== true) throw new Error(result.error || 'Checkout unavailable');
if (typeof result.data?.authorization_url !== 'string') throw new Error('No paid checkout URL returned');
const target = new URL(result.data.authorization_url);
if (target.origin !== 'https://checkout.sparkglim.net' || target.username || target.password) throw new Error('Invalid checkout URL');
window.location.assign(target.href);
return target.href;
}تحقق من تكاملك
- تحقق من الأهلية والتواريخ والكميات بسجلات مضبوطة.
- احفظ سرية الأعداد والمحاولة غير الواضحة دون دفعة ثانية أو صوت معلن.