يمكن للتجّار استخدام ميزة "تأكيد الدفع الآمن" (SPC) كجزء من عملية المصادقة القوية للعملاء (SCA) على بطاقة ائتمان أو حساب مصرفي معيّن. يُجري WebAuthn المصادقة (غالبًا من خلال المقاييس الحيوية). يجب تسجيل WebAuthn مسبقًا، ويمكنك الاطّلاع على مزيد من المعلومات في مقالة تسجيل تأكيد الدفع الآمن.
آلية عمل التنفيذ النموذجي
إنّ الاستخدام الأكثر شيوعًا لهذه البيانات هو عندما يُجري العميل عملية شراء على الموقع، وتطلب جهة إصدار بطاقة الائتمان أو المصرف مصادقة الجهة المسدِّدة.
لنطّلِع على مسار المصادقة:
- يقدِّم العميل بيانات اعتماد الدفع (مثل بطاقة الائتمان). المعلومات) للتاجر.
- يطلب التاجر من جهة الإصدار أو المصرف الحصول على بيانات اعتماد الدفع.
(الجهة الموثوقة أو الجهة المحظورة) في حال احتاجت الجهة المسدِّدة إلى مصادقة منفصلة. هذا النمط
قد يحدث التبادل، على سبيل المثال، مع
EMV® 3-D Secure:
- إذا كان الطرف المعني يرغب في استخدام SPC للتاجر، وإذا كان المستخدم قد سبق تسجيله، يتجاوب الجهة المحظورة مع عرض قائمة بمعرّفات بيانات الاعتماد المسجَّلة بواسطة الدافع والتحدي.
- وفي حال لم تكن هناك حاجة إلى المصادقة، يمكن للتاجر مواصلة إكمال المعاملة.
- إذا كانت المصادقة مطلوبة، يحدد التاجر ما إذا كان المتصفِّح متوافقًا مع SPC.
- إذا كان المتصفّح لا يتيح استخدام SPC، تابع مسار المصادقة
- يستدعي التاجر بطاقة SPC. يعرض المتصفّح مربّع حوار التأكيد.
- في حالة عدم وجود أي معرفات بيانات اعتماد تم تمريرها من الجهة المحظورة، ارجع إلى مسار المصادقة الحالي بعد إجراء مصادقة ناجحة، يمكنك استخدام تسجيل SPC لتبسيط عمليات المصادقة المستقبلية
- يؤكد المستخدم ويصادق على المبلغ ووجهة الدفع من خلال فتح قفل الجهاز.
- يتلقّى التاجر بيانات اعتماد من عملية المصادقة.
- يتلقّى الجهة المحظورة بيانات الاعتماد من التاجر وتتحقّق من والأصالة.
- يرسل الجهة المحظورة نتائج إثبات الهوية إلى التاجر.
- يعرض التاجر رسالة إلى المستخدم تشير إلى أنّه تم تسديد الدفعة. كانت ناجحة أو لم تنجح.
رصد الميزات
لمعرفة ما إذا كانت وحدة التحكّم في الخدمة (SPC) متوافقة مع المتصفّح، يمكنك إرسال مكالمة وهمية إلى
canMakePayment()
انسخ الرمز التالي وألصِقه لإتاحة الميزة لكشف وحدة التحكّم بسياسة الجهاز (SPC) على الموقع الإلكتروني للتاجر.
const isSecurePaymentConfirmationSupported = async () => {
if (!'PaymentRequest' in window) {
return [false, 'Payment Request API is not supported'];
}
try {
// The data below is the minimum required to create the request and
// check if a payment can be made.
const supportedInstruments = [
{
supportedMethods: "secure-payment-confirmation",
data: {
// RP's hostname as its ID
rpId: 'rp.example',
// A dummy credential ID
credentialIds: [new Uint8Array(1)],
// A dummy challenge
challenge: new Uint8Array(1),
instrument: {
// Non-empty display name string
displayName: ' ',
// Transparent-black pixel.
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==',
},
// A dummy merchant origin
payeeOrigin: 'https://non-existent.example',
}
}
];
const details = {
// Dummy shopping details
total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
};
const request = new PaymentRequest(supportedInstruments, details);
const canMakePayment = await request.canMakePayment();
return [canMakePayment, canMakePayment ? '' : 'SPC is not available'];
} catch (error) {
console.error(error);
return [false, error.message];
}
};
isSecurePaymentConfirmationSupported().then(result => {
const [isSecurePaymentConfirmationSupported, reason] = result;
if (isSecurePaymentConfirmationSupported) {
// Display the payment button that invokes SPC.
} else {
// Fallback to the legacy authentication method.
}
});
مصادقة المستخدم
لمصادقة المستخدم، يمكنك استدعاء طريقة PaymentRequest.show()
مع
مَعلمتا secure-payment-confirmation
وWebAuthn:
PublicKeyCredentialRequestOptions
- مَعلمات أخرى خاصة بالدفع على المنصّة الخاصة بالتاجر
في ما يلي المَعلمات التي يجب تقديمها للموقع SecurePaymentConfirmationRequest
الخاص بطريقة الدفع على data
.
تحقق من مثال التعليمة البرمجية هذا:
// After confirming SPC is available on this browser via a feature detection,
// fetch the request options cross-origin from the RP server.
const options = fetchFromServer('https://rp.example/spc-auth-request');
const { credentialIds, challenge } = options;
const request = new PaymentRequest([{
// Specify `secure-payment-confirmation` as payment method.
supportedMethods: "secure-payment-confirmation",
data: {
// The RP ID
rpId: 'rp.example',
// List of credential IDs obtained from the RP server.
credentialIds,
// The challenge is also obtained from the RP server.
challenge,
// A display name and an icon that represent the payment instrument.
instrument: {
displayName: "Fancy Card ****1234",
icon: "https://rp.example/card-art.png",
iconMustBeShown: false
},
// The origin of the payee (merchant)
payeeOrigin: "https://merchant.example",
// The number of milliseconds to timeout.
timeout: 360000, // 6 minutes
}
}], {
// Payment details.
total: {
label: "Total",
amount: {
currency: "USD",
value: "5.00",
},
},
});
try {
const response = await request.show();
// response.details is a PublicKeyCredential, with a clientDataJSON that
// contains the transaction data for verification by the issuing bank.
// Make sure to serialize the binary part of the credential before
// transferring to the server.
const result = fetchFromServer('https://rp.example/spc-auth-response', response.details);
if (result.success) {
await response.complete('success');
} else {
await response.complete('fail');
}
} catch (err) {
// SPC cannot be used; merchant should fallback to traditional flows
console.error(err);
}
ينتج عن الدالة .show()
PaymentResponse
باستثناء details
يحتوي على بيانات اعتماد مفتاح عام مع
clientDataJSON
الذي يحتوي على بيانات المعاملات
(payment
)
على الجهة المحظورة
يجب نقل بيانات الاعتماد الناتجة من مصادر متعددة إلى الجهة المحظورة التحقق منه.
كيف يتحقق الجهة المحظورة من المعاملة؟
إنّ التحقّق من بيانات المعاملات على خادم الجهة المحظورة هو الخطوة الأهم في عملية الدفع.
للتحقّق من بيانات المعاملات، يمكن للجهة المحظورة اتّباع عملية التحقّق من تأكيد المصادقة في WebAuthn.
بالإضافة إلى ذلك،
إثبات ملكية payment
مثال على حمولة البيانات في السمة clientDataJSON
:
{
"type":"payment.get",
"challenge":"SAxYy64IvwWpoqpr8JV1CVLHDNLKXlxbtPv4Xg3cnoc",
"origin":"https://spc-merchant.glitch.me",
"crossOrigin":false,
"payment":{
"rp":"spc-rp.glitch.me",
"topOrigin":"https://spc-merchant.glitch.me",
"payeeOrigin":"https://spc-merchant.glitch.me",
"total":{
"value":"15.00",
"currency":"USD"
},
"instrument":{
"icon":"https://cdn.glitch.me/94838ffe-241b-4a67-a9e0-290bfe34c351%2Fbank.png?v=1639111444422",
"displayName":"Fancy Card 825809751248"
}
}
}
- يتطابق
rp
مع مصدر الجهة المحظورة. - يتطابق
topOrigin
مع مصدر المستوى الأعلى الذي يتوقّعه الجهة المحظورة ( مصدر التاجر في المثال أعلاه). - يتطابق
payeeOrigin
مع أصل المدفوع لأمره الذي كان من المفترض أن يكون يتم عرضه للمستخدم. - يتطابق
total
مع مبلغ المعاملة الذي كان يجب عرضه. للمستخدم. - يتطابق
instrument
مع تفاصيل وسيلة الدفع التي يجب أن تتضمّن التي تم عرضها للمستخدم.
const clientData = base64url.decode(response.clientDataJSON);
const clientDataJSON = JSON.parse(clientData);
if (!clientDataJSON.payment) {
throw 'The credential does not contain payment payload.';
}
const payment = clientDataJSON.payment;
if (payment.rp !== expectedRPID ||
payment.topOrigin !== expectedOrigin ||
payment.payeeOrigin !== expectedOrigin ||
payment.total.value !== '15.00' ||
payment.total.currency !== 'USD') {
throw 'Malformed payment information.';
}
بعد اجتياز جميع معايير إثبات الملكية، يمكن للجهة المحظورة إعلام للتاجر يفيد بنجاح المعاملة.
الخطوات التالية
- قراءة نظرة عامة حول تأكيد الدفع الآمن
- مزيد من المعلومات حول التسجيل باستخدام تأكيد الدفع الآمن