توفر مكتبة Stripe PHP وصولاً سهلاً إلى Stripe API من التطبيقات المكتوبة بلغة PHP. يتضمن مجموعة محددة مسبقًا من الفئات لموارد واجهة برمجة التطبيقات (API) التي تقوم بتهيئة نفسها ديناميكيًا من استجابات واجهة برمجة التطبيقات (API) مما يجعلها متوافقة مع مجموعة واسعة من إصدارات Stripe API.
PHP 5.6.0 والإصدارات الأحدث.
يمكنك تثبيت الارتباطات عبر الملحن. قم بتشغيل الأمر التالي:
composer require stripe/stripe-php
لاستخدام الروابط، استخدم التحميل التلقائي للملحن:
require_once ' vendor/autoload.php ' ;
إذا كنت لا ترغب في استخدام Composer، فيمكنك تنزيل أحدث إصدار. وبعد ذلك، لاستخدام الارتباطات، قم بتضمين ملف init.php
.
require_once ' /path/to/stripe-php/init.php ' ;
تتطلب الارتباطات الامتدادات التالية لكي تعمل بشكل صحيح:
curl
، على الرغم من أنه يمكنك استخدام عميلك غير التابع لـ cURL إذا كنت تفضل ذلكjson
mbstring
(سلسلة متعددة البايت)إذا كنت تستخدم Composer، فيجب التعامل مع هذه التبعيات تلقائيًا. إذا قمت بالتثبيت يدويًا، فستحتاج إلى التأكد من توفر هذه الملحقات.
الاستخدام البسيط يبدو كالتالي:
$ stripe = new Stripe StripeClient ( ' sk_test_BQokikJOvBiI2HlWgH4olfQ2 ' );
$ customer = $ stripe -> customers -> create ([
' description ' => ' example customer ' ,
' email ' => ' [email protected] ' ,
' payment_method ' => ' pm_card_visa ' ,
]);
echo $ customer ;
يمكنك الاستمرار في استخدام أنماط التكامل القديمة المستخدمة قبل الإصدار 7.33.0. قم بمراجعة دليل الترحيل لمعرفة تغييرات نمط العميل/الخدمات المتوافقة مع الإصدارات السابقة.
راجع مستندات PHP API.
شاهد عروض الفيديو التي تغطي كيفية استخدام المكتبة.
إذا كنت تستخدم PHP 5.4 أو 5.5، فيجب أن تفكر في ترقية بيئتك لأن هذه الإصدارات قد تجاوزت نهاية عمرها منذ سبتمبر 2015 ويوليو 2016 على التوالي. بخلاف ذلك، لا يزال بإمكانك استخدام Stripe عن طريق تنزيل stripe-php v6.43.1 (zip, tar.gz) من صفحة الإصدارات الخاصة بنا. سيعمل هذا الإصدار ولكنه قد لا يدعم الميزات الحديثة التي أضفناها منذ إصدار الإصدار وترقية PHP هي أفضل مسار للعمل.
إذا كنت تستخدم PHP 5.3، فيجب عليك ترقية بيئتك لأن هذا الإصدار قد انتهى صلاحيته منذ أغسطس 2014. بخلاف ذلك، يمكنك تنزيل الإصدار 5.9.2 (zip, tar.gz) من صفحة الإصدارات الخاصة بنا. سيستمر هذا الإصدار في العمل مع الإصدارات الجديدة من Stripe API لجميع الاستخدامات الشائعة.
ملاحظة: لا نوصي بتقليل المهلة للمكالمات غير المخصصة للقراءة فقط (على سبيل المثال، إنشاء الرسوم)، لأنه حتى لو انتهت المهلة محليًا، فلا يزال من الممكن إكمال الطلب من جانب Stripe. إذا كنت تقوم بتقليل المهلات على هذه الاستدعاءات، فتأكد من استخدام الرموز المميزة لتجنب تنفيذ نفس المعاملة مرتين كنتيجة لمنطق إعادة محاولة المهلة.
لتعديل مهلة الطلب (الاتصال أو الإجمالي، بالثواني)، ستحتاج إلى إخبار عميل واجهة برمجة التطبيقات (API) باستخدام CurlClient بخلاف الافتراضي. ستقوم بتعيين المهلات في ملف CurlClient.
// set up your tweaked Curl client
$ curl = new Stripe HttpClient CurlClient ();
$ curl -> setTimeout ( 10 ); // default is StripeHttpClientCurlClient::DEFAULT_TIMEOUT
$ curl -> setConnectTimeout ( 5 ); // default is StripeHttpClientCurlClient::DEFAULT_CONNECT_TIMEOUT
echo $ curl -> getTimeout (); // 10
echo $ curl -> getConnectTimeout (); // 5
// tell Stripe to use the tweaked client
Stripe ApiRequestor :: setHttpClient ( $ curl );
// use the Stripe API client as you normally would
هل تحتاج إلى تعيين وكيل لطلباتك؟ قم بتمرير مصفوفة CURLOPT_*
المطلوبة إلى مُنشئ CurlClient، باستخدام نفس بناء الجملة الخاص بـ curl_stopt_array()
. سيؤدي هذا إلى تعيين خيارات cURL الافتراضية لكل طلب HTTP يتم إجراؤه بواسطة SDK، على الرغم من أن العديد من الخيارات الأكثر شيوعًا (مثل المهلات؛ انظر أعلاه حول كيفية تعيينها) سيتم تجاوزها من قبل العميل حتى إذا تم تعيينها هنا.
// set up your tweaked Curl client
$ curl = new Stripe HttpClient CurlClient ([ CURLOPT_PROXY => ' proxy.local:80 ' ]);
// tell Stripe to use the tweaked client
Stripe ApiRequestor :: setHttpClient ( $ curl );
بدلاً من ذلك، يمكن تمرير كائن قابل للاستدعاء إلى مُنشئ CurlClient الذي يُرجع المصفوفة أعلاه بناءً على مدخلات الطلب. راجع testDefaultOptions()
في tests/CurlClientTest.php
للحصول على مثال لهذا السلوك. لاحظ أنه يتم استدعاء العنصر القابل للاستدعاء في بداية كل طلب لواجهة برمجة التطبيقات (API)، قبل إرسال الطلب.
تقوم المكتبة بالحد الأدنى من التسجيل، ولكن يمكن تهيئتها باستخدام مسجل متوافق مع PSR-3
بحيث تنتهي الرسائل هناك بدلاً من error_log
:
Stripe Stripe :: setLogger ( $ logger );
يمكنك الوصول إلى البيانات من آخر استجابة لواجهة برمجة التطبيقات (API) على أي كائن عبر getLastResponse()
.
$ customer = $ stripe -> customers -> create ([
' description ' => ' example customer ' ,
]);
echo $ customer -> getLastResponse ()-> headers [ ' Request-Id ' ];
تتطلب واجهة برمجة تطبيقات Stripe الآن أن تستخدم جميع الاتصالات TLS 1.2. بعض الأنظمة (أبرزها بعض إصدارات CentOS وRHEL الأقدم) قادرة على استخدام TLS 1.2 ولكنها ستستخدم TLS 1.0 أو 1.1 افتراضيًا. في هذه الحالة، سوف تحصل على invalid_request_error
مع رسالة الخطأ التالية: "لم يعد Stripe يدعم طلبات واجهة برمجة التطبيقات التي تم إجراؤها باستخدام TLS 1.0. يرجى بدء اتصالات HTTPS مع TLS 1.2 أو إصدار أحدث. يمكنك معرفة المزيد حول هذا على https://stripe .com/blog/upgrading-tls."
مسار العمل الموصى به هو ترقية حزمتي cURL وOpenSSL بحيث يتم استخدام TLS 1.2 بشكل افتراضي، ولكن إذا لم يكن ذلك ممكنًا، فقد تتمكن من حل المشكلة عن طريق تعيين خيار CURLOPT_SSLVERSION
إما على CURL_SSLVERSION_TLSv1
أو CURL_SSLVERSION_TLSv1_2
:
$ curl = new Stripe HttpClient CurlClient ([ CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1 ]);
Stripe ApiRequestor :: setHttpClient ( $ curl );
بالنسبة للتطبيقات التي تحتاج إلى استخدام مفاتيح متعددة خلال مدة العملية، مثل التطبيق الذي يستخدم Stripe Connect، فمن الممكن أيضًا تعيين مفتاح و/أو حساب لكل طلب:
$ customers = $ stripe -> customers -> all ([],[
' api_key ' => ' sk_test_... ' ,
' stripe_account ' => ' acct_... '
]);
$ stripe -> customers -> retrieve ( ' cus_123456789 ' , [], [
' api_key ' => ' sk_test_... ' ,
' stripe_account ' => ' acct_... '
]);
افتراضيًا، ستستخدم المكتبة الحزمة الداخلية الخاصة بها من شهادات CA المعروفة، ولكن من الممكن تكوين الحزمة الخاصة بك:
Stripe Stripe :: setCABundlePath ( " path/to/ca/bundle " );
يمكن تكوين المكتبة لإعادة محاولة الطلبات التي تفشل بسبب مشكلة متقطعة في الشبكة تلقائيًا:
Stripe Stripe :: setMaxNetworkRetries ( 2 );
تتم إضافة مفاتيح Idempotency إلى الطلبات لضمان أن تكون عمليات إعادة المحاولة آمنة.
افتراضيًا، ترسل المكتبة بيانات القياس عن بعد إلى Stripe فيما يتعلق بوقت استجابة الطلب واستخدام الميزة. تساعد هذه الأرقام Stripe على تحسين زمن الاستجابة الإجمالي لواجهة برمجة التطبيقات (API) الخاصة به لجميع المستخدمين، وتحسين الميزات الشائعة.
يمكنك تعطيل هذا السلوك إذا كنت تفضل:
Stripe Stripe :: setEnableTelemetry ( false );
يحتوي Stripe على ميزات في المرحلة التجريبية يمكن الوصول إليها عبر الإصدار التجريبي من هذه الحزمة. نود أن تجرب هذه الميزات وتشاركنا تعليقاتك قبل أن تصل هذه الميزات إلى مرحلة الاستقرار. استخدم الأمر composer require
إصدارًا محددًا لتثبيت الإصدار التجريبي من stripe-php pacakge.
composer require stripe/stripe-php:v9.2.0-beta.1
ملاحظة: قد تكون هناك تغييرات جذرية بين إصدارات بيتا. لذلك نوصي بتثبيت إصدار الحزمة على إصدار تجريبي محدد في ملف Composer.json الخاص بك. بهذه الطريقة يمكنك تثبيت نفس الإصدار في كل مرة دون كسر التغييرات إلا إذا كنت تبحث عن أحدث إصدار تجريبي.
نوصي بشدة بمراقبة متى تنتقل الميزة التجريبية التي تهتم بها من الإصدار التجريبي إلى الإصدار الثابت حتى تتمكن من الانتقال من استخدام إصدار تجريبي من SDK إلى الإصدار الثابت.
إذا كانت الميزة التجريبية الخاصة بك تتطلب إرسال رأس Stripe-Version
، فقم بتعيين خاصية apiVersion
لكائن config
باستخدام الوظيفة addBetaVersion
:
Stripe :: addBetaVersion ( " feature_beta " , " v3 " );
إذا كنت ترغب في إرسال طلب إلى واجهة برمجة التطبيقات (API) غير موثقة (على سبيل المثال، أنت في إصدار تجريبي خاص)، أو إذا كنت تفضل تجاوز تعريفات الطريقة في المكتبة وتحديد تفاصيل طلبك مباشرة، فيمكنك استخدام طريقة rawRequest
في StripeClient.
$ stripe = new Stripe StripeClient ( ' sk_test_xyz ' );
$ response = $ stripe -> rawRequest ( ' post ' , ' /v1/beta_endpoint ' , [
" caveat " : " emptor "
], [
" stripe_version " => " 2022-11_15 " ,
]);
// $response->body is a string, you can call $stripe->deserialize to get a StripeStripeObject.
$ obj = $ stripe -> deserialize ( $ response -> body );
// For GET requests, the params argument must be null, and you should write the query string explicitly.
$ get_response = $ stripe -> rawRequest ( ' get ' , ' /v1/beta_endpoint?caveat=emptor ' , null , [
" stripe_version " => " 2022-11_15 " ,
]);
تم إصدار ميزات جديدة وإصلاحات للأخطاء في أحدث إصدار رئيسي من مكتبة Stripe PHP. إذا كنت تستخدم إصدارًا رئيسيًا أقدم، فنوصيك بالترقية إلى الإصدار الأحدث حتى تتمكن من استخدام الميزات الجديدة وإصلاحات الأخطاء بما في ذلك تلك الخاصة بالثغرات الأمنية. ستظل الإصدارات الرئيسية الأقدم من الحزمة متاحة للاستخدام، ولكنها لن تتلقى أي تحديثات.
احصل على الملحن. على سبيل المثال، في نظام التشغيل Mac OS:
brew install composer
تثبيت التبعيات:
composer install
تعتمد مجموعة الاختبار على Stripe-mock، لذا تأكد من جلبها وتشغيلها من محطة خلفية (يحتوي ملف README الخاص بـ stripe-mock أيضًا على تعليمات التثبيت عبر Homebrew وطرق أخرى):
go install github.com/stripe/stripe-mock@latest
stripe-mock
قم بتثبيت التبعيات كما هو مذكور أعلاه (والتي ستحل مشكلة PHPUnit)، ثم يمكنك تشغيل مجموعة الاختبار:
./vendor/bin/phpunit
أو لتشغيل ملف اختبار فردي:
./vendor/bin/phpunit tests/Stripe/UtilTest.php
قم بتحديث شهادات CA المجمعة من إصدار Mozilla cURL:
./update_certs.php
تستخدم المكتبة PHP CS Fixer لتنسيق التعليمات البرمجية. يجب تنسيق الرمز قبل إرسال طلبات المشاركة، وإلا فسوف يفشل CI. قم بتشغيل المنسق باستخدام:
./vendor/bin/php-cs-fixer fix -v .
هل تكتب مكونًا إضافيًا يدمج Stripe ويدمج مكتبتنا؟ ثم الرجاء استخدام وظيفة setAppInfo
لتحديد البرنامج المساعد الخاص بك. على سبيل المثال:
Stripe Stripe :: setAppInfo ( " MyAwesomePlugin " , " 1.2.34 " , " https://myawesomeplugin.info " );
يجب استدعاء الطريقة مرة واحدة، قبل إرسال أي طلب إلى واجهة برمجة التطبيقات. المعلمتان الثانية والثالثة اختيارية.
راجع فقرة "مشكلات توافق SSL/TLS" أعلاه للحصول على السياق الكامل. إذا كنت تريد التأكد من إمكانية استخدام المكون الإضافي الخاص بك على جميع الأنظمة، فيجب عليك إضافة خيار تكوين للسماح للمستخدمين بالاختيار بين قيم مختلفة لـ CURLOPT_SSLVERSION
: لا شيء (افتراضي)، CURL_SSLVERSION_TLSv1
و CURL_SSLVERSION_TLSv1_2
.