SvelteKit을 사용한 웹 네이티브 결제 API
19570 단어 webdevsveltekitsveltejavascript
자원
소개
이 기사는 우리가 모든 제3자 결제 통합을 사용할 때 얼마나 많은 고통을 처리해야 하는지 알고 있고 때때로 그것을 추가하는 것을 좋아하지 않을 수 있기 때문에 프로젝트에 번거로움 없이 결제 통합을 수행하는 방법에 대해 설명합니다. 옵션이 없습니다. 여기에서 웹 기본 결제 API가 제공됩니다. 해당 결제를 처리하기 위한 최소한의 작업만 있으면 됩니다. 여기에서는 SvelteKit에서 이를 수행하는 예를 보여드리겠습니다. Google 결제 샘플의 예입니다.
여기서는
use
svelte 동작을 사용하여 더 쉽게 만들 것입니다.항상 그렇듯이 먼저 SvelteKit 프로젝트를 설정합니다. 방법을 배우고 싶다면 그냥 .
프로젝트 설정 후 다음 설정을 따르십시오.
결제 시작 설정
따라서 여기서는
use
작업을 사용하고 lib/pay.js
파일에 추가할 Javascript 코드를 호출하는 버튼을 추가하기만 하면 됩니다.// index.svelte
<script>
import { payTest } from '../lib/pay.js';
</script>
<div><button id="buyButton" use:payTest>Buy</button></div>
<div><pre id="result" /></div>
알 수 있듯이 여기서는
use
작업을 사용하여 작업을 수행하고 있습니다.이제
lib
라는 이름으로 pay.js
폴더에 파일을 생성합니다. 이제 번거로운 작업을 수행할 몇 줄의 코드를 추가할 것입니다./**
* Builds PaymentRequest that also gathers user's shipping address, but does not
* show any UI yet.
*
* @return {PaymentRequest} The PaymentRequest object.
*/
function initPaymentRequest() {
let supportedInstruments = [{
supportedMethods: 'https://bobbucks.dev/pay',
}];
let details = {
total: {label: 'Donation', amount: {currency: 'USD', value: '55.00'}},
displayItems: [
{
label: 'Original donation amount',
amount: {currency: 'USD', value: '65.00'},
},
{
label: 'Friends and family discount',
amount: {currency: 'USD', value: '-10.00'},
},
{
label: 'Free shipping worldwide',
amount: {currency: 'USD', value: '0.00'},
},
],
shippingOptions: [{
id: 'freeWorldwideShipping',
label: 'Free shipping worldwide',
amount: {currency: 'USD', value: '0.00'},
selected: true,
}],
};
let options = {requestShipping: true};
let request = new PaymentRequest(supportedInstruments, details, options);
request.addEventListener('shippingaddresschange', function(evt) {
evt.updateWith(Promise.resolve(details));
});
return request;
}
/**
* Invokes PaymentRequest that also gathers user's shipping address.
*
* @param {PaymentRequest} request The PaymentRequest object.
*/
function onBuyClicked(request) {
request.show().then(function(instrumentResponse) {
sendPaymentToServer(instrumentResponse);
})
.catch(function(err) {
ChromeSamples.setStatus(err);
});
}
/**
* Simulates processing the payment data on the server.
*
* @private
* @param {PaymentResponse} instrumentResponse The payment information to
* process.
*/
function sendPaymentToServer(instrumentResponse) {
// There's no server-side component of these samples. No transactions are
// processed and no money exchanged hands. Instantaneous transactions are not
// realistic. Add a 2 second delay to make it seem more real.
window.setTimeout(function() {
instrumentResponse.complete('success')
.then(function() {
document.getElementById('result').innerHTML =
instrumentToJsonString(instrumentResponse);
})
.catch(function(err) {
ChromeSamples.setStatus(err);
});
}, 2000);
}
/**
* Converts the payment instrument into a JSON string.
*
* @private
* @param {PaymentResponse} instrument The instrument to convert.
* @return {string} The JSON string representation of the instrument.
*/
function instrumentToJsonString(instrument) {
let details = instrument.details;
return JSON.stringify({
methodName: instrument.methodName,
details: details,
shippingAddress: addressToDictionary(instrument.shippingAddress),
shippingOption: instrument.shippingOption,
}, undefined, 2);
}
/**
* Converts the shipping address into a dictionary.
*
* @private
* @param {PaymentAddress} address The address to convert.
* @return {object} The dictionary representation of the shipping address.
*/
function addressToDictionary(address) {
if (address.toJSON) {
return address.toJSON();
}
return {
recipient: address.recipient,
organization: address.organization,
addressLine: address.addressLine,
dependentLocality: address.dependentLocality,
city: address.city,
region: address.region,
postalCode: address.postalCode,
sortingCode: address.sortingCode,
country: address.country,
languageCode: address.languageCode,
phone: address.phone,
};
}
const payButton = document.getElementById('buyButton');
payButton.setAttribute('style', 'display: none;');
if (window.PaymentRequest) {
let request = initPaymentRequest();
payButton.setAttribute('style', 'display: inline;');
payButton.addEventListener('click', function() {
onBuyClicked(request);
request = initPaymentRequest();
});
} else {
ChromeSamples.setStatus('This browser does not support web payments');
}
new PaymentRequest(supportedInstruments, details, options);
그게 우리가 해야 할 전부입니다. 이것은 Google 지불 예제의 예이며
google-pay-button
를 사용하여 삶을 더 쉽게 만들어 줄 무언가가 있습니다. 제공된 리소스에서 확인할 수 있습니다.이것은 내가 당신을 위해 쓰는 것입니다. 묻고 싶은 것이나 제안하고 싶은 것이 있다면 댓글에 적어주세요.
Reference
이 문제에 관하여(SvelteKit을 사용한 웹 네이티브 결제 API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theether0/web-native-payment-api-with-sveltekit-57oh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)