تخطَّ إلى المحتوى

تكامل Odoo

هذا الدليل يرشدك لربط متجرك في دُرج مع Odoo 16+.

المتطلبات

  • Odoo 16.0+ (Community أو Enterprise)
  • متجر دُرج على خطة مدفوعة
  • مفتاح API من لوحة التحكم
  • خادم Odoo قابل للوصول العام

الخطوة 1: إنشاء بيانات الاعتماد

  1. لوحة التحكمالتكاملات ← أنشئ مفتاح API
  2. أنشئ نقطة Webhook: https://your-odoo.com/tajir/webhook
  3. احفظ مفتاح التوقيع

الخطوة 2: ربط البيانات

المنتجات

دُرجنموذج Odooحقل Odoo
productsproduct.templatename, list_price, default_code, barcode
product_variantsproduct.productproduct_tmpl_id, attribute_value_ids

الطلبات

دُرجنموذج Odooحقل Odoo
orderssale.orderpartner_id, date_order, state
order_itemssale.order.lineproduct_id, product_uom_qty, price_unit

ربط الحالات: pendingdraft, processingsale, completeddone, cancelledcancel

الخطوة 3: متحكم Webhook

import hmac, hashlib, json
from odoo import http
from odoo.http import request
class TajirWebhookController(http.Controller):
@http.route('/tajir/webhook', type='json', auth='none', methods=['POST'], csrf=False)
def handle_webhook(self):
payload = request.httprequest.get_data()
signature = request.httprequest.headers.get('X-Tajir-Signature', '')
secret = request.env['ir.config_parameter'].sudo().get_param('tajir.webhook_secret')
expected = hmac.new(secret.encode(), payload, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected, signature):
return {'error': 'Invalid signature'}
data = json.loads(payload)
event_type = request.httprequest.headers.get('X-Tajir-Event', '')
if event_type == 'order.created':
self._create_order(data['data'])
return {'status': 'ok'}
def _create_order(self, order_data):
Partner = request.env['res.partner'].sudo()
phone = order_data.get('customer_phone', '')
partner = Partner.search([('phone', '=', phone)], limit=1)
if not partner:
partner = Partner.create({'name': order_data.get('customer_name', 'عميل'), 'phone': phone})
so = request.env['sale.order'].sudo().create({
'partner_id': partner.id,
'client_order_ref': order_data['id'][:8].upper(),
})
for item in order_data.get('items', []):
product = request.env['product.product'].sudo().search(
[('default_code', '=', item.get('product_id'))], limit=1)
if product:
request.env['sale.order.line'].sudo().create({
'order_id': so.id, 'product_id': product.id,
'product_uom_qty': item['quantity'], 'price_unit': item['unit_price'],
})
so.action_confirm()

الخطوة 4: المزامنة الأولية

import requests, json
API_URL = 'https://api.durj.ly/api/v1'
HEADERS = {'Authorization': 'Bearer tjr_your_token'}
def sync_products():
cursor = None
while True:
params = {'cursor': cursor} if cursor else {}
resp = requests.get(f'{API_URL}/products/export', headers=HEADERS, params=params)
if resp.status_code == 429:
import time; time.sleep(int(resp.headers.get('Retry-After', 60))); continue
for line in resp.text.strip().split('\n'):
if line: create_odoo_product(json.loads(line))
cursor = resp.headers.get('X-Next-Cursor')
if resp.headers.get('X-Has-More') != 'true': break

استكشاف الأخطاء

المشكلةالحل
Webhooks لا تصلتأكد أن النقطة قابلة للوصول العام
فشل التحقق من التوقيعتحقق من البايتات الخام
تجاوز حد الاستخداماحترم رأس Retry-After
طلبات مكررةاستخدم client_order_ref للتحقق