المعرّفات لا تتطابق لأن Shopify و Stripe لا يصدّران الشيء نفسه.

ملفات CSV لطلبات Shopify تصف الطلبات. ملفات CSV لمعاملات Stripe تصف المدفوعات والالتقاطات والاستردادات وحركات الرصيد. إن حاولت مطابقة #1042 من Shopify مع ch_3P8x... من Stripe، فالملفان ليسا خاطئَين. أنت تقارن رقم طلب بسجل دفع.

لمطابقة أرقام طلبات Shopify مع معاملات Stripe في ملف CSV، العمل الحقيقي هو إيجاد المفتاح المشترك بين الملفَّين أولاً. بعد ذلك فقط تبدأ مطابقة الصفوف.

أي القيم تتطابق فعلاً

قبل تنظيف الأعمدة أو كتابة المعادلات، حدّد أي زوج من الحقول تقارنه.

ما تراه على الشاشةما يخزّنه Shopifyما يخزّنه Stripeنتيجة محاولة المطابقة
#1042Name في تصدير طلبات Shopifyid من نوع ch_3P8x...لا تطابق. الأول رقم طلب. والثاني معرّف تحصيل.
6721948832513Id في تصدير طلبات Shopify أو Order في سجل المعاملاتid من نوع ch_3P8x...لا تطابق. المعرّف الداخلي لطلب Shopify ليس الكيان نفسه لمعرّف معاملة Stripe.
c1027508764856.2إدخال واحد داخل Payment Referencesالمرجع نفسه لدى مزوّد الدفع في تصدير مرتبط بـ Stripe أو في حقل بيانات وصفيةتطابق مباشر، إن وُجد هذا المرجع بالضبط على الجانبَين.
1042رقم طلب Shopify المنظَّف من Name بعد حذف #metadata[order_number] أو حقل بيانات وصفية مشابه في Stripeالمطابقة تعمل إن كانت البيانات الوصفية مكتوبة ومُصدَّرة.
$84.20 في اليوم نفسهTotal وPaid atAmount وCreatedغير آمن. الطلبات المكررة والمحاولات المتعددة والاستردادات وفوارق التوقيت تولّد تطابقات كاذبة.

هذا الجدول يلخّص المشكلة بأكملها.

أغلب محاولات المطابقة تفشل لأن أحدهم يستخدم الصف الأول في الجدول متوقعاً منه أن يتصرف كالصف الثالث أو الرابع.

Shopify يتيح أكثر من مرجع لكل طلب

Shopify يُصدِّر عدة معرّفات، ولكل منها وظيفة مختلفة.

حقل Shopifyما يمثّلهمتى تستخدمه
Nameرقم الطلب الظاهر في Shopify، وغالباً يبدأ بـ #استخدمه حين تخزّن البيانات الوصفية لـ Stripe رقم الطلب، أو حين تحتاج مرجعاً مقروءاً
Idالمعرّف الداخلي للطلب في Shopifyاستخدمه فقط إن كان المعرّف الداخلي نفسه قد مُرِّر إلى البيانات الوصفية لـ Stripe أو حقل ربط آخر
Payment IDمعرّف الدفع المُرسَل من Shopify للمدفوعات الناجحة أو المعلّقةاستخدمه حين يتضمن تصدير Stripe المرجع نفسه من جانب الدفع
Payment Referencesجميع معرّفات الدفع المرتبطة بالطلب، بما فيها المدفوعات المرفوضة والاستردادات والالتقاطاتاستخدمه حين يضم الطلب أحداث دفع متعددة وتحتاج السجل الكامل لا آخر ناجح فحسب

هذا هو سبب حصول شخصَين يصدّران الطلب نفسه من Shopify على نتائج مطابقة مختلفة.

تصدير واحد منظّم حول الطلبات. تصدير آخر منظّم حول المعاملات. تصدير سجل المعاملات يعطيك صفاً لكل حدث دفع مُلتقَط، لا صفاً لكل طلب. ولا يشمل كل حالات بوابة الدفع الممكنة. إن كنت تقارن تفويضات أو محاولات إعادة أو أحداث دفع أخرى غير موجودة في هذا التصدير، فملف Shopify الذي حمّلته قد لا يعمل على المستوى نفسه.

القرار الأول ليس «أي معادلة أستخدم؟» بل «هل أطابق صفوف طلبات مع صفوف طلبات، أم صفوف مدفوعات مع صفوف مدفوعات؟»

إن تجاهلت هذا السؤال، ستجد نفسك في الموقف نفسه الموصوف في سبب بطء مطابقة طلبات Shopify مع مدفوعات Stripe، حيث ملف منظّم حول الطلبات والآخر حول نشاط التسوية.

Stripe يُصدِّر كيان الدفع لا طلب Shopify

ملفات CSV لـ Stripe تُبنى في الغالب حول معرّفاتها الخاصة:

  • معرّفات التحصيل
  • معرّفات نية الدفع
  • معرّفات الاسترداد
  • معرّفات معاملات الرصيد
  • سجلات المدفوعات

هذه معرّفات صحيحة. لكنها ليست معرّفات طلبات Shopify.

هذا الفارق مهم لأن طلباً واحداً في Shopify قد ينشئ عدة سجلات في Stripe:

  • محاولة دفع فاشلة
  • تحصيل ناجح
  • التقاط
  • استرداد
  • نزاع أو تعديل

إن كان ملف Shopify يحمل صف طلب واحد وملف Stripe يحمل ثلاثة صفوف مدفوعات مرتبطة بذلك الطلب، فستفشل المطابقة صفاً بصف حتى حين تكون البيانات صحيحة.

هنا تصبح البيانات الوصفية ضرورية. إن كان Stripe يحمل حقل بيانات وصفية مثل shopify_order_id أو order_number، يمكن لذلك الحقل أن يكون الجسر نحو Shopify. لكن بعض تصديرات Stripe لا تُظهر البيانات الوصفية بشكل افتراضي. القيمة قد تكون موجودة في كيان Stripe ومع ذلك تكون مفقودة في ملف CSV الذي حمّلته.

هذا ما يقود إلى استنتاج خاطئ شائع:

«Stripe لا يحمل مرجع Shopify.»

أحياناً Stripe يحمله. تصديرك فحسب لا يتضمنه.

أنشئ جدول الربط قبل أي مطابقة

المطابقة الموثوقة تحتاج مفتاحاً مشتركاً ثابتاً. بدونه، لن تطابق سجلات. أنت تخمّن استناداً إلى المبالغ والتواريخ.

الطريقة الصحيحة: أنشئ أولاً جدول ربط صغيراً.

عمود العملمصدرهالغرض منه
shopify_order_number_cleanحقل Name في Shopify بعد حذف #يُتيح المقارنة مع بيانات Stripe الوصفية التي تخزّن 1042 لا #1042
shopify_internal_order_idحقل Id في Shopify أو Order في سجل المعاملاتمفيد فقط إن وُجد المعرّف الداخلي نفسه في جانب Stripe
shopify_payment_reference_singleقيمة واحدة مُستخرَجة من Payment Referencesيمنع خلية Shopify المحتوية على مراجع متعددة من إخفاء محاولات دفع متعددة
stripe_transaction_idحقل id في Stripeمعرّف سجل Stripe الأصيل
stripe_metadata_order_numberتصدير البيانات الوصفية لـ Stripe، إن وُجدفي الغالب أقصر طريق نحو حقل Name في Shopify
stripe_metadata_shopify_order_idتصدير البيانات الوصفية لـ Stripe، إن وُجدطريق مباشر نحو المعرّف الداخلي للطلب في Shopify
amount وtimestampكلا الملفَّينللمراجعة فقط، لا تجعلها مفتاح الربط الأساسي

ثلاث قواعد تجعل هذا يعمل.

1. قسّم `Payment References` إلى مرجع واحد لكل صف.

إن أعطاك Shopify c1027508764856.1 + c1027508764856.2، فهذان ليسا مرجعاً واحداً. هما مرجعان. أحدهما قد يمثّل محاولة فاشلة والآخر الدفع الناجح. إن تركتهما في خلية واحدة، فقدت القدرة على مطابقة كل حدث بشكل صحيح.

2. احتفظ برقم الطلب المقروء منفصلاً عن معرّفات الدفع.

#1042 مفيد للمراجعة. ليس من الفئة نفسها لـ ch_3P8x.... لا تُلغِ أحدهما بالآخر في عمود «منظَّف». احتفظ بكليهما.

3. نظِّم التنسيق دون فقدان المعنى.

احذف # من أرقام طلبات Shopify إن كانت بيانات Stripe الوصفية تخزّن أرقاماً خالصة. احذف المسافات الزائدة. احتفظ بالأحرف الأولى في مراجع الدفع. قيمة تبدأ بـ c أو ch_ تخبرك بالنظام الذي أنشأها. لا تبتره.

ترتيب المطابقة الذي يعمل في الواقع

بعد بناء جدول الربط، طابق بهذا الترتيب.

1. طابق مرجع الدفع بمرجع الدفع

إن ظهر حقل Payment ID في Shopify أو قيمة منفردة من Payment References في جانب Stripe، فاستخدمها أولاً. هذا أقرب شيء لمفتاح معاملة حقيقي بين النظامَين.

هذا أفضل الحالات لأنه يصل حدث الدفع مباشرةً دون الحاجة للتخمين من الإجماليات.

2. طابق المعرّف الداخلي للطلب في Shopify مع البيانات الوصفية لـ Stripe

إن كانت البيانات الوصفية لـ Stripe تحمل المعرّف الداخلي لطلب Shopify، طابق حقل Id في Shopify أو Order في سجل المعاملات مع ذلك الحقل.

هذا خيار متين لأن المعرّفات الداخلية ثابتة. القيد: يجب أن يكون الحقل قد كُتب في Stripe وأن يكون مُدرَجاً في التصدير.

3. طابق رقم طلب Shopify مع البيانات الوصفية لـ Stripe

إن كانت البيانات الوصفية لـ Stripe تخزّن رقم الطلب لا المعرّف الداخلي، نظّف حقل Name في Shopify لئلا يفشل #1042 و1042 بسبب التنسيق وحده.

هذا المسار جيد للمراجعة والتقارير الموجّهة للعملاء لأن رقم الطلب مقروء. لكنه أضعف من المعرّف الداخلي حين تنسّق أنظمة مختلفة أسماء الطلبات بطرق مختلفة.

4. استخدم المبالغ والطوابع الزمنية فقط لمراجعة ما تبقى

هنا تنحرف أغلب جداول البيانات عن المسار.

المبالغ والتواريخ ليست مفاتيح مطابقة آمنة في ملفات Shopify و Stripe لأن:

  • المبلغ نفسه قد يظهر أكثر من مرة في اليوم الواحد
  • طلب واحد قد يحمل محاولات دفع متعددة
  • تحدث الاستردادات في أحيان كثيرة بعد البيع الأصلي بفترة طويلة
  • الطابع الزمني للطلب والطابع الزمني للدفع غالباً لا يمثّلان الحدث نفسه
  • فوارق التوقيت بين المناطق قد تزحزح التاريخ دون تغيير الدفع

إن كانت التواريخ جزءاً من مراجعتك، فعاملها كأدلة داعمة. لا تجعلها مفتاح الربط الأساسي، خاصة إن كنت ترى الأنماط الموصوفة في التفاوت بين طوابع وقت Stripe بتوقيت UTC وتواريخ كشف الحساب البنكي CSV.

لماذا تبدو سجلات صحيحة غير متطابقة

حين يُظهر المصنّف أن الصفوف لا تتوافق، في الغالب يكون أحد هذه الأسباب وراء ذلك.

طابقت بيانات على مستوى الطلب مع بيانات على مستوى الدفع.

طلب واحد في Shopify قد يقابل عدة سجلات في Stripe. الملف ليس مخطئاً. مستوى التفصيل هو المشكلة.

تصدير Stripe لا يتضمن حقل الربط.

البيانات الوصفية قد تكون موجودة في Stripe، لكن ملف CSV الذي صدّرته قد يحذفها. إن كان مفتاح الربط مفقوداً من الملف، ستفشل المطابقة حتى إن كان كيان الدفع الأصلي يحمله.

`Payment References` يحتوي أكثر من قيمة.

طلب واحد في Shopify قد يحمل عدة معرّفات دفع. إن عاملت الخلية كاملةً مفتاحاً واحداً، لن يتطابق أي من أحداث الدفع الفردية بشكل صحيح.

تستخدم `Name` لأنه مألوف لديك.

هذا الفخ الأكثر شيوعاً. #1042 سهل القراءة، فيحاول الجميع إرجاع كل شيء إليه. ملفات معاملات Stripe لم تُبنَ حول ما هو أسهل في القراءة. بُنيت حول كيانات الدفع.

الاستردادات تُطابَق مع صف البيع الأصلي.

الاستردادات تحتاج منطق صف خاصاً بها. ليست نسخاً سلبية من سطر تصدير الطلب الأصلي.

الطوابع الزمنية تختلف حتى حين يكون الدفع نفسه.

إنشاء الطلب في Shopify والتقاط الدفع وإنشاء المعاملة في Stripe يمكن أن تقع في أوقات مختلفة. إن فرضت تطابقاً دقيقاً للتاريخ، ستبدو سجلات صحيحة مكسورة.

كيف يبدو الناتج النهائي الموثوق

حين تكون المطابقة صحيحة، يجب أن يستطيع ملف عملك الإجابة على هذه الأسئلة دون بحث يدوي:

السؤاليجب أن يجيب الملف بـ
إلى أي طلب في Shopify تنتمي هذه المعاملة في Stripe؟رقم الطلب والمعرّف الداخلي له
أي حدث دفع في Stripe ينتمي لهذا الطلب في Shopify؟معرّف المعاملة أو مرجع الدفع
هل هذا الصف بيع أم محاولة معادة أم استرداد أم التقاط؟نوع الحدث موضّح بوضوح
هل جرت المطابقة بمفتاح مباشر أم بمنطق مراجعة؟عمود يبيّن طريقة المطابقة
ما الصفوف التي لم تُحسَم بعد؟قائمة مختصرة بالصفوف غير المتطابقة مع السبب

إن لم تستطع ورقتك الإجابة على هذه الأسئلة الخمسة، فهي لم تكتمل. ربما معظم الصفوف متوافقة، لكنها لم تصل بعد إلى المستوى الذي يمكن الاعتماد عليه الشهر القادم.

مع الحجم الصغير، يمكن إدارة جدول الربط يدوياً.

مع الحجم المتكرر، يتوقف العمل الحقيقي عن كونه حكماً في المطابقة ليصبح صيانة ملفات:

  • تقسيم مراجع الدفع متعددة القيم
  • تنظيم أرقام الطلبات
  • إعادة تصدير Stripe بالحقول الصحيحة
  • إعادة بناء عمليات الربط نفسها
  • مراجعة حالات الاستثناء غير المحسومة نفسها مرة أخرى

عند تلك النقطة، تتحوّل المشكلة من «ماذا يعني هذا المعرّف؟» إلى «لماذا ما زلت أُجري هذا التعيين اليدوي في جدول بيانات كل شهر؟»