คุณสามารถใช้ Payment Request API เพื่อเปิดแอปการชำระเงิน Android จากเว็บไซต์ที่ทำงานภายใน WebView ซึ่งทำงานโดยใช้ JavaScript API เดียวกันที่มีอยู่แล้วใน Chrome
ฟีเจอร์นี้ใช้ได้ใน WebView เวอร์ชัน 136 เป็นต้นไป ซึ่งมักจะมาพร้อมกับ Chrome เวอร์ชัน 136
ตั้งค่าคำขอการชำระเงินในแอปโฮสต์ WebView
หากต้องการเปิดแอปการชำระเงิน Android จาก WebView ทาง Payment Request API จะค้นหาระบบโดยใช้ Intent ของ Android
หากต้องการรองรับการดำเนินการนี้ แอปโฮสต์ WebView จะต้องประกาศ Intent เหล่านั้นในไฟล์ AndroidManifest.xml
ระบบจะปิดใช้คำขอการชำระเงินใน WebView โดยค่าเริ่มต้น
ทําตามขั้นตอนต่อไปนี้เพื่อเปิดใช้โดยใช้ WebSettingsCompat
จาก AndroidX WebKit
เวอร์ชัน 1.14.0
ขึ้นไป
ขั้นตอนที่ 1: เพิ่มการพึ่งพา AndroidX WebKit
Kotlin (build.gradle.kts)
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
}
Groovy (build.gradle)
dependencies {
implementation 'androidx.webkit:webkit:1.14.0'
}
แคตตาล็อกเวอร์ชัน
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
ขั้นตอนที่ 2: นําเข้าคลาสที่จําเป็น
คลาสเหล่านี้ช่วยให้คุณเข้าถึงและกําหนดค่า WebView รวมถึงตรวจสอบการรองรับฟีเจอร์ขณะรันไทม์ได้
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
ขั้นตอนที่ 3: เปิดใช้คำขอการชำระเงินในโค้ด WebView
ขั้นตอนนี้จะเปิดใช้ฟีเจอร์คำขอการชำระเงินใน WebView และตรวจสอบว่าเว็บไซต์สามารถเรียกใช้ฟีเจอร์ดังกล่าวได้โดยใช้ JavaScript
ขั้นตอนนี้จะเปิดใช้ฟีเจอร์คำขอการชำระเงินใน WebView และตรวจสอบว่าเว็บไซต์สามารถเรียกใช้ฟีเจอร์ดังกล่าวได้โดยใช้ JavaScript
Kotlin (Compose)
AndroidView(
factory = {
WebView(it).apply {
settings.javaScriptEnabled = true
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(settings, true);
}
}
},
update = {it.loadUrl(url)
}
)
Java
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavascriptEnabled(true);
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(webSettings, true);
}
ขั้นตอนที่ 4: เพิ่มตัวกรอง Intent ใน AndroidManifest.xml
ตัวกรองเหล่านี้ช่วยให้ WebView ค้นพบและเรียกใช้แอปการชำระเงิน Android โดยใช้ Intent ของระบบ
<queries>
<intent>
<action android:name="org.chromium.intent.action.PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.IS_READY_TO_PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
</intent>
</queries>
ใช้ Intent ต่อไปนี้ใน AndroidManifest.xml
เพื่อรองรับฟีเจอร์ Payment Request หลัก
org.chromium.intent.action.PAY
: ช่วยให้ WebView เรียกใช้แอปการชำระเงิน Android และรับการตอบกลับการชำระเงิน ดูข้อมูลเพิ่มเติมในคู่มือนักพัฒนาแอปการชำระเงิน Androidorg.chromium.intent.action.IS_READY_TO_PAY
: อนุญาตให้เว็บไซต์ตรวจสอบว่าผู้ใช้ตั้งค่าวิธีการชำระเงินที่รองรับไว้หรือไม่ ดูข้อมูลเพิ่มเติมในคู่มือนักพัฒนาแอปการชำระเงิน Androidorg.chromium.intent.action.UPDATE_PAYMENT_DETAILS
: รองรับการอัปเดตแบบไดนามิก เช่น เมื่อผู้ใช้เปลี่ยนที่อยู่หรือตัวเลือกการจัดส่งในแอปการชำระเงิน ดูข้อมูลเพิ่มเติมได้ที่การให้ข้อมูลการจัดส่งและข้อมูลติดต่อจากแอปการชำระเงิน Android
ขั้นตอนที่ 5: บิลด์และเผยแพร่แอปอีกครั้ง
หลังจากทำการเปลี่ยนแปลงเหล่านี้แล้ว ให้สร้างแอปขึ้นมาใหม่และเผยแพร่เวอร์ชันที่อัปเดตแล้วใน Play Store
ไม่บังคับ: ปรับแต่งการตรวจสอบความพร้อม
นอกจากการเปิดตัวแอปการชำระเงิน Android แล้ว Payment Request API ยังช่วยให้เว็บไซต์ตรวจสอบได้ว่าผู้ใช้พร้อมชำระเงินหรือไม่ เช่น เว็บไซต์สามารถตรวจได้ว่าผู้ใช้ตั้งค่าวิธีการชำระเงินที่รองรับไว้หรือไม่
Chrome มีการตั้งค่าที่อนุญาตให้ผู้ใช้เปิดหรือปิดใช้การตรวจสอบนี้ แอปที่โฮสต์ WebView สามารถเสนอปุ่มสลับที่คล้ายกันโดยใช้สิ่งต่อไปนี้
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
การตั้งค่านี้จะเปิดใช้โดยค่าเริ่มต้น (true
) เมื่อเปิดใช้งาน การตั้งค่านี้จะอนุญาตให้เว็บไซต์ที่ทํางานใน WebView ตรวจจับว่าผู้ใช้มีเครื่องมือการชําระเงินที่ลงทะเบียนไว้หรือไม่
ตรวจสอบการรองรับคำขอการชำระเงินใน JavaScript
หลังจากเรียก WebSettingsCompat.setPaymentRequestEnabled(webSettings, true)
ใน Java หรือ Kotlin แล้ว อินเทอร์เฟซ window.PaymentRequest
จะพร้อมใช้งานใน JavaScript สามารถใช้เพื่อตรวจหาองค์ประกอบในหน้าเว็บได้
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
เมื่อ window.PaymentRequest
พร้อมใช้งาน หน้าเว็บจะเริ่มธุรกรรมการชำระเงินต่อไปได้
ผสานรวมแอปการชำระเงิน Android กับคำขอการชำระเงิน
หากต้องการรองรับคำขอการชำระเงิน แอปการชำระเงิน Android จะต้องตอบสนองต่อ Intent ของระบบที่เฉพาะเจาะจงและจัดการข้อมูลการชำระเงินอย่างปลอดภัย คู่มือเหล่านี้อธิบายวิธีลงทะเบียนวิธีการชำระเงิน ใช้บริการการชำระเงิน และปกป้องแอป
- คู่มือนักพัฒนาแอปการชำระเงิน Android: สร้างและกำหนดค่าแอปการชำระเงิน รวมถึงวิธีจัดการ Intent และยืนยันแอปที่เรียกใช้
- ตั้งค่าวิธีการชำระเงิน ลงทะเบียนวิธีการชำระเงินและกำหนดความสามารถ
ปกป้องแอปของคุณจากการใช้งานในทางที่ผิด
แอปใดก็ได้เรียกใช้ Intent การชำระเงิน Android org.chromium.intent.action.PAY
,
IS_READY_TO_PAY
และ UPDATE_PAYMENT_DETAILS
แอปโฮสต์ WebView ยังสังเกตการณ์ เริ่ม และขัดจังหวะการเรียกใช้คำขอการชำระเงินได้ด้วย เนื่องจาก WebView ทำงานภายในกระบวนการของแอปโฮสต์ จึงไม่สามารถจํากัดวิธีใช้ Intent เหล่านี้ได้
แอปที่เป็นอันตรายอาจใช้ประโยชน์จากช่องโหว่นี้เพื่อเริ่มการโจมตี Oracle
ในการโจมตีแบบออราเคิล แอปการชำระเงินจะเปิดเผยข้อมูลโดยไม่ตั้งใจ ตัวอย่างเช่น ผู้โจมตีอาจใช้ IS_READY_TO_PAY
เพื่อค้นหาว่าผู้ใช้มีเครื่องมือการชำระเงินใดบ้าง
คุณต้องสร้างการป้องกันไว้ในแอปการชำระเงินเพื่อป้องกันการใช้ในทางที่ผิดประเภทนี้
ใช้กลยุทธ์ต่อไปนี้เพื่อลดการละเมิด
- จำกัดคำขอ: จำกัดความถี่ที่แอปตอบสนองต่อ
IS_READY_TO_PAY
เช่น ตอบกลับเพียงครั้งเดียวทุก 30 นาที - ใช้การเข้ารหัส: เข้ารหัสการตอบกลับที่มีความละเอียดอ่อนเพื่อให้มีเพียงเซิร์ฟเวอร์ของผู้ขายที่เชื่อถือเท่านั้นที่ถอดรหัสได้ ดำเนินการเข้ารหัสและถอดรหัสในฝั่งเซิร์ฟเวอร์เสมอ
- จํากัดการเข้าถึง: ดูแลรักษารายการที่อนุญาตของแอปโฮสต์ WebView ที่เชื่อถือได้โดยใช้ชื่อแพ็กเกจและใบรับรองการรับรอง SHA256 ดูข้อมูลเพิ่มเติมในคู่มือนักพัฒนาแอปการชำระเงิน Android