لتبسيط هذا الدرس (وجعله قصيرًا) فسنرسل ستة معاملات (وهو عدد كاف لواجهة Easy Post البرمجية لإعادة أجور الشحن):
عرض الطرد
ارتفاع الطرد
طول الطرد
وزن الطرد
كود Zip للمرسل
كود Zip للمستقبل
ضبط
نقطة نهاية JSON
أوّل خطوة هي ضبط المسار الذي ستُخدَّم منه بيانات JSON، وفي هذه الحالة هو:
/wp-json/easy-post/v1/rates/
الشيفرة:
/**
* Sets up a
json endpoint at /wp-json/easy-post/v1/rates/
*/
function easy_post_api_init() {
$namespace = 'easy-post/v1';
register_rest_route( $namespace, '/rates/', array(
'methods' => 'GET',
'callback' => 'easy_post_return_rates',
) );
}
add_action( 'rest_api_init', 'easy_post_api_init' );
عرض البيانات
تتوقع
نقطة النهاية إرسال ست قيم من البيانات كطلبية، وستستخدمها للحصول على البيانات من الواجهة البرمجية الخارجية، فلو لم تكن تلك القيم موجودةً فستستعمل القيم الافتراضية، وسنحرص أن تكون تلك القيم رقميةً فقط.
مثال عن رابط URL مع قيم لكل المعاملات:
/wp-json/easy-post/v1/rates/?zip=78701&width=10&length=10&height=10&weight=10& shipping_zip=78751
الشيفرة:
/**
* عرض مخرجات Easy Post عبر النهاية الطرفية
*
* نستخدم القيم المبدئية في حال عدم ذكر بيانات في الطلب، إلا أن إعادة خطأ ربما تكون فكرة أفضل.
* Valid URL: /wp-json/easy-post/v1/rates/?zip=78701&width=10&length=10&height=10&weight=10& shipping_zip=78751
*/
function easy_post_return_rates( WP_REST_Request $request ) {
// الإعدادات المبدئية للشحن
$defaults = array(
'zip' => 78701,
'width' => 10,
'length' => 10,
'height' => 10,
'weight' => 16,
'shipping_zip' => 94105
);
// الحصول على المعطيات من الطلب
$params = $request->get_query_params();
// التأكد من توفر جميع المعطيات
$params = array_replace( $defaults, $params );
// تنظيف المفاتيح
$params = array_map( "absint", $params );
// إنشاء قيم مفاتيح فريدة لتحديد قيم البيانات المؤقتة transient أو العثور عليها
$key = 'easy_post_' . implode( "_", $params );
/**
* نحتفظ بالإجابة في قيمة مؤقتة transient ضمن قاعدة بيانات ووردبريس
* لتجنب إرسال الكثير من الطلبات في وقت قصير
*
* تنتهي صلاحية هذه البيانات بعد عشر دقائق
*/
if ( false === ( $data = get_transient( $key ) ) ) {
$data = easy_post_make_request( $params );
$response = new WP_REST_Response( $data );
// التخبئة لمدة عشر دقائق
set_transient( $key, $response, 60 * 10 );
} else {
// إرجاع القيمة المخبّأة
return get_transient( $key );
}
return $response;
}
الحصول على البيانات
الدالة easy_post_make_request() هي الدالة التي تطلب البيانات من الواجهة البرمجية الخارجية، والغرض من أغلبية الشيفرات التي هنا هي تجهيز الطلبية ضمن مصفوفة يمكن لواجهة Easy Post البرمجية أن تعالجها:
/**
*العثور على البيانات من الواجهة البرمجية لـ Easy Post باستخدام الدالة wp_remote_post
*/
function easy_post_make_request( $params ) {
$to_address = array(
'zip' => $params['shipping_zip'],
'country' => 'US'
);
$from_address = array(
'zip' => $params['zip'],
'country' => 'US'
);
$parcel = array(
'length' => $params['length'],
'width' => $params['width'],
'height' => $params['height'],
'weight' => $params['weight']
);
$request = array(
'shipment' => array(
'to_address' => $to_address,
'from_address' => $from_address,
'parcel' => $parcel
)
);
$args = array(
'method' => 'POST',
'blocking' => true,
'headers' => array(
'Content-Type' => 'application/json'
),
'timeout' => 15,
'sslverify' => false,
'body' => json_encode( $request )
);
// ضع مفتاح API الخاص بك مكان EASYPOST_TEST_API_KEY
$api_url = 'https://' . EASYPOST_TEST_API_KEY . ':@api.easypost.com/v2/shipments';
$response = wp_remote_post( $api_url, $args );
if ( ! is_wp_error( $response ) ) {
$response = json_decode( $response['body'] );
}
return $response;
}
استخدام البيانات
عندما نحاول الوصول إلى
نقطة النهاية التي أنشأناها، فإن بيانات
json التي جلبناها من Easy Post ستظهر لنا:
1-json.gif
يمكنك الآن الحصول على أجور الشحن ديناميكيًا في موقعك باستخدام
نقطة النهاية التي أنشأناها في هذا الدرس.