প্রদত্ত ক্রেডিট কার্ড বা ব্যাঙ্ক অ্যাকাউন্টের জন্য একটি শক্তিশালী গ্রাহক প্রমাণীকরণ (SCA) প্রক্রিয়ার অংশ হিসাবে ব্যবসায়ীরা সিকিউর পেমেন্ট কনফার্মেশন (SPC) ব্যবহার করতে পারে। WebAuthn প্রমাণীকরণ করে (প্রায়শই বায়োমেট্রিক্সের মাধ্যমে)। WebAuthn অবশ্যই আগে থেকে নিবন্ধিত হতে হবে, যা আপনি একটি নিরাপদ অর্থপ্রদান নিশ্চিতকরণ নিবন্ধন থেকে জানতে পারবেন।
কিভাবে একটি সাধারণ বাস্তবায়ন কাজ করে
SPC-এর সবচেয়ে সাধারণ ব্যবহার হল যখন একজন গ্রাহক একজন বণিকের সাইটে কেনাকাটা করে, এবং ক্রেডিট কার্ড প্রদানকারী বা ব্যাঙ্কের পেয়ারের প্রমাণীকরণের প্রয়োজন হয়।
আসুন প্রমাণীকরণ প্রবাহের মাধ্যমে চলুন:
- একজন গ্রাহক বণিককে তাদের অর্থপ্রদানের প্রমাণপত্র (যেমন ক্রেডিট কার্ডের তথ্য) প্রদান করে।
- বণিক পেমেন্টের শংসাপত্রের সংশ্লিষ্ট ইস্যুকারী বা ব্যাঙ্ককে (নির্ভরকারী পক্ষ বা RP) জিজ্ঞাসা করে যদি অর্থ প্রদানকারীর একটি পৃথক প্রমাণীকরণের প্রয়োজন হয়। এই বিনিময় ঘটতে পারে, উদাহরণস্বরূপ, EMV® 3-D Secure এর সাথে।
- যদি RP বণিককে SPC ব্যবহার করতে চায়, এবং ব্যবহারকারী যদি আগে নিবন্ধন করে থাকে, তাহলে RP প্রদানকারীর দ্বারা নিবন্ধিত শংসাপত্রের আইডিগুলির একটি তালিকা এবং একটি চ্যালেঞ্জের সাথে প্রতিক্রিয়া জানায়৷
- যদি একটি প্রমাণীকরণের প্রয়োজন না হয়, তবে বণিক লেনদেন সম্পূর্ণ করা চালিয়ে যেতে পারেন।
- যদি একটি প্রমাণীকরণের প্রয়োজন হয়, বণিক নির্ধারণ করে যে ব্রাউজারটি SPC সমর্থন করে কিনা ।
- যদি ব্রাউজারটি SPC সমর্থন না করে, বিদ্যমান প্রমাণীকরণ প্রবাহের সাথে এগিয়ে যান।
- বণিক SPC আহ্বান করে. ব্রাউজার একটি নিশ্চিতকরণ ডায়ালগ প্রদর্শন করে।
- যদি RP থেকে পাস করা কোনো শংসাপত্র আইডি না থাকে, তাহলে বিদ্যমান প্রমাণীকরণ প্রবাহে ফিরে যান। একটি সফল প্রমাণীকরণের পরে, ভবিষ্যতের প্রমাণীকরণগুলিকে স্ট্রীমলাইন করতে SPC রেজিস্ট্রেশন ব্যবহার করার কথা বিবেচনা করুন ৷
- ব্যবহারকারী ডিভাইসটি আনলক করে অর্থপ্রদানের পরিমাণ এবং গন্তব্য নিশ্চিত করে এবং প্রমাণীকরণ করে।
- বণিক প্রমাণীকরণ থেকে একটি শংসাপত্র পায়।
- RP বণিকের কাছ থেকে শংসাপত্র গ্রহণ করে এবং এর সত্যতা যাচাই করে।
- RP যাচাইকরণের ফলাফল বণিকের কাছে পাঠায়।
- পেমেন্ট সফল বা ব্যর্থ হয়েছে কিনা তা নির্দেশ করার জন্য বণিক ব্যবহারকারীকে একটি বার্তা দেখায়।
বৈশিষ্ট্য সনাক্তকরণ
ব্রাউজারে 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.
}
});
ব্যবহারকারীকে প্রমাণীকরণ করুন
ব্যবহারকারীকে প্রমাণীকরণ করতে, secure-payment-confirmation
এবং WebAuthn পরামিতি সহ PaymentRequest.show()
পদ্ধতি ব্যবহার করুন:
-
PublicKeyCredentialRequestOptions
- মার্চেন্টের প্ল্যাটফর্মে অন্যান্য পেমেন্ট নির্দিষ্ট প্যারামিটার ।
পেমেন্ট পদ্ধতির data
প্রপার্টি, SecurePaymentConfirmationRequest
এ আপনাকে যে প্যারামিটারগুলি প্রদান করা উচিত তা এখানে।
এই উদাহরণ কোড দেখুন:
// 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
এর সাথে একটি পাবলিক কী শংসাপত্র থাকে যাতে RP দ্বারা যাচাইকরণের জন্য লেনদেনের ডেটা ( payment
) থাকে।
ফলস্বরূপ শংসাপত্রটি অবশ্যই ক্রস-অরিজিন RP-এ স্থানান্তরিত করতে হবে এবং যাচাই করতে হবে।
RP কিভাবে লেনদেন যাচাই করে
RP সার্ভারে লেনদেনের ডেটা যাচাই করা পেমেন্ট প্রক্রিয়ার সবচেয়ে গুরুত্বপূর্ণ ধাপ।
লেনদেনের ডেটা যাচাই করার জন্য, RP 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
শীর্ষ-স্তরের উত্সের সাথে মেলে যা RP আশা করে (উপরের উদাহরণে ব্যবসায়ীর উত্স)। -
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.';
}
সমস্ত যাচাইকরণের মানদণ্ড পাস করার পরে, RP বণিককে বলতে পারে যে লেনদেন সফল হয়েছে৷
পরবর্তী পদক্ষেপ
- সিকিউর পেমেন্ট কনফার্মেশনের ওভারভিউ পড়ুন
- নিরাপদ পেমেন্ট নিশ্চিতকরণের সাথে নিবন্ধন সম্পর্কে জানুন