Để sử dụng trình mô phỏng mạng PPXTERM000XPP với máy cục bộ, để phơi bày bộ quản lý cục bộ qua đường hầm PPXTERM01XPP, hãy tạo một địa chỉ thông báo hộp cát chỉ tới địa chỉ Mạng công cộng, rồi chạy một chương trình mô phỏng xe đạp hay mô phỏng sự sống duy nhất chống lại đích đó. Paddle gửi một yêu cầu thực tế với một Paddle-Signature Đầu trang, vì vậy cùng một đường dẫn xác sống có thể chạy tại địa phương và trong sản xuất.
Tại sao trình mô phỏng Paddle không chỉ là một mẫu tải
Một bản sao của JSON kiểm tra bản tuyên bố chuyển đổi của bạn. Trình mô phỏng Paddle kiểm tra đích đến mạng, người dẫn đầu nhà cung cấp, ký kết bí mật, vị trí trả lời, và sự kiện kế hoạch cùng nhau. Viên chức Trình mô phỏng kết nối mạng Hỗ trợ tái sử dụng các sự kiện và kịch bản riêng lẻ. Các sự kiện đơn mục tiêu kiểu sự kiện và có thể tùy chỉnh sau khi chạy. Trường hợp cho thấy trước một vòng đời như sự sáng tạo hoặc sự đổi mới dài hạn.
Cấu hình trường hợp có thể chứa các quả bom Paddle và thay đổi dòng chảy. Mỗi cuộc chạy sản xuất hồ sơ mô phỏng sự kiện chạy mà bạn có thể kiểm tra hàng hóa, yêu cầu bị hạn chế, và đáp ứng điểm cuối. Điều này làm cho việc mô phỏng có ích cho việc gỡ lỗi chuyển đổi trạng thái, chứ không chỉ chứng minh rằng một tuyến đường là trực tuyến.
Kết nối một điểm kết thúc cục bộ tới hộp cát Paddle
- Ví dụ, chạy ứng dụng của bạn
http://localhost:3000. - Thêm đường POST như
/api/webhooks/paddle. - Chạy
npx portpreview 3000và sao chép địa chỉ HTTPS. - Trong hộp cát Paddle, tạo một đích thông báo dùng
https://your-subdomain.portpreview.dev/api/webhooks/paddle. - Hiển thị và sao chép điểm cuối đó bí mật vào
PADDLE_WEBHOOK_SECRETNó không phải chìa khóa API của bạn. - Công cụ nhà phát triển mở đã mô phỏng, chọn một sự kiện hay một kịch bản riêng lẻ, chọn đích, cấu hình và chạy nó.
- So sánh câu trả lời mô phỏng của Paddle với bản ghi của bạn và biên nhận webk bền bỉ.
Sử dụng tài nguyên và giấy ủy quyền trong suốt. Pha trộn một bí mật đích đến trực tiếp với một yêu cầu mô phỏng hộp cát đảm bảo một thất bại chữ ký mặc dù cả hai chuỗi trông có vẻ hợp lý.
Kiểm tra Paddle-Signature đầu trang
Paddle ký hiệu mỗi webok với bí mật thuộc điểm đến thông báo. Đầu đề chứa các thành phần bao gồm nhãn giờ Unix được nhận diện bởi ts và một hay nhiều chữ ký được xác định bởi h1. Paddle có thể thêm các phiên bản chữ ký, do đó, phân tích đầu trang thay vì giả sử nó chứa một hash trần.
Hàng đã được ký là dấu hiệu thời gian, ruột kết, và cơ thể yêu cầu chưa được chạm vào. Paddle áp dụng HMAC-SHA256 với bí mật điểm kết thúc. Nó Tài liệu hướng dẫn xác thực chữ ký Đề nghị một chương trình SDK chính thức có sẵn và tài liệu về thuật toán thủ công. Luôn luôn áp đặt độ chịu đựng thời gian của SDK hoặc một sự khoan dung rõ ràng trong bảng điều chỉnh của bạn để hạn chế các cuộc tấn công trở lại.
Phố
import express from 'express';
import { Environment, Paddle } from '@paddle/paddle-node-sdk';
const app = express();
const paddle = new Paddle(process.env.PADDLE_API_KEY, {
environment: Environment.sandbox,
});
app.post(
'/api/webhooks/paddle',
express.raw({ type: 'application/json' }),
async (req, res) => {
const signature = req.header('paddle-signature') ?? '';
const rawBody = req.body.toString('utf8');
try {
const event = await paddle.webhooks.unmarshal(
rawBody,
process.env.PADDLE_WEBHOOK_SECRET,
signature,
);
await acceptOnce(event.eventId, event);
return res.status(200).send('accepted');
} catch (error) {
return res.status(400).send('invalid webhook');
}
},
);
app.listen(3000);
Gắn kết express.raw() trước toàn cục express.json() Phần giữa cho đường này. Trong một khung thu thập như Next.js App Router, sử dụng await request.text() Một lần và chuyển chuỗi chính xác đó đến SDK. Viên chức Trình khởi chạy nhanh webk Cho thấy yêu cầu cơ thể thô này.
Xác minh thủ công phải làm gì?
- Đọc cơ thể sống mà không có JSON bình thường hóa.
- Phân tích tất cả các thành phần đầu trang và thu được
h1giá trị. - Từ chối sự mất tích, sai trái, hoặc không hợp lý cũ
ts. - Tính
HMAC_SHA256(secret, ts + ':' + rawBody). - So sánh tiêu hóa mong đợi với ký hiệu ứng cử viên sử dụng một so sánh thời gian an toàn.
- Chỉ sau một trận đấu, phân tích JSON và gửi
event_type.
Chấp nhận bất cứ sự hỗ trợ hợp lệ nào về các vấn đề chữ ký trong lúc xoay bí mật, khi có thể có hơn một chữ ký. Đừng chia cái đầu ra và mù quáng lấy cái thứ hai. Đừng ghi lại bí mật điểm kết thúc hoặc hoàn tất tải khách hàng trong khi tính toán sai đối thủ.
Thiết kế mô phỏng xung quanh hóa đơn
Tạo phục tùng
Chạy một kịch bản đăng ký và xác nhận rằng cơ sở dữ liệu của bạn có thể nhận được giao dịch liên quan và các sự kiện đăng ký mà không giả sử một lệnh đến mạng. Lưu giữ ID thực thể Paddle và cập nhật hồ sơ là vô hạn. Ứng dụng nên cung cấp chính xác một quyền lợi cho dù một yêu cầu là không hài lòng.
Renewal và việc thanh toán thất bại
Tập thể dục thành công thay đổi, quá khứ và phục hồi các đường dẫn trong cấu hình kịch bản của bạn. Phân biệt trạng thái hoá đơn từ chính sách truy cập sản phẩm: chu kỳ ân sủng của bạn có thể cố ý giữ cho truy cập hoạt động trong khi Paddle báo cáo về vấn đề tập hợp.
Hủy bỏ và thay đổi lịch
Hãy phân biệt việc đặt mua dài hạn để hủy bỏ tờ báo đã đạt hiệu quả. Bảo tồn next_billed_at, thay đổi lịch trình dữ liệu, và trạng thái cung cấp thay vì phá hủy xe đạp cứu hộ vào is_active.
Trạng thái cập nhật
Mô phỏng sản phẩm, giá cả, khách hàng và cập nhật dài hạn mà bộ nhớ tạm của bạn tiêu thụ. Một người quản lý nên bỏ qua các kiểu sự kiện lạ một cách an toàn và thừa nhận chúng nếu chữ ký là hợp lệ; các bổ sung Paddle tương lai không nên trở thành một vòng lặp thất bại vô tận.
Bất lực và ra lệnh mỗi lần chạy
Dùng mã nhận diện ổn định của web làm chìa khóa duy nhất trong bảng hóa đơn. Trong một giao dịch, đưa biên nhận, áp dụng thay đổi quốc gia và gây ra tác dụng phụ. Nếu xung đột dữ dội, hãy trả lại thành công mà không cần phải làm việc lại. Đừng làm mất khả năng nhận diện thực thể chỉ vì có nhiều cập nhật hợp lệ có thể nhắm mục tiêu đăng ký.
Những sự kiện có thể không được sắp đặt. So sánh thời gian sự kiện xảy ra hoặc lấy lại thực thể Paddle mới nhất trước khi áp dụng một sự chuyển tiếp phá hủy. Lưu trạng thái và nhãn thời gian của nhà cung cấp, và từ chối một cập nhật cũ sẽ ghi đè lên một bản mới hơn. Những kịch bản mô phỏng là lý tưởng để kiểm tra những giả định này bởi vì chúng tạo ra những chuỗi kết nối hơn là sự cố định lẻ loi.
Trình giả lập bắn lỗi
Đích trở về 404 hoặc 405
Kiểm tra xem địa chỉ URL công cộng bao gồm đường đi đầy đủ và tuyến đường xuất khẩu POST. Một trình duyệt GET không phải là một thử nghiệm hợp lệ của một trình duyệt mạng POST. Dùng curl -X POST chống lại các URL công cộng để phân biệt đường hầm định tuyến từ cấu hình Paddle.
Đích trở về 400
Kiểm tra xem Paddle-Signature đến và xác nhận bí mật điểm kết thúc thuộc về đích thông báo đã chọn. Đảm bảo không có phân tích cơ thể, yêu cầu ghi chép, hoặc bộ phận trung gian tiêu thụ hoặc biến đổi cơ thể. Trình mô phỏng gửi các chữ ký có thể kiểm chứng, như đã ghi chép trong Hướng dẫn mô phỏng Paddle.
Địa điểm trở về 500 lần
Kiên trì và di chuyển thư điện tử, cung cấp, và bị hạn chế API gọi đến hàng đợi. Trở về 2xx sau khi được chấp nhận bền bỉ. Ném vào một sự kiện lạ thường là nguyên nhân thường gây ra những thất bại không cần thiết; hãy dùng một chi nhánh mặc định mà ghi lại và công nhận.
Tình huống sử dụng dữ liệu bất ngờ
Xem xét lại việc mô phỏng sử dụng tự động các giá trị tạo ra hoặc có thực thể hộp cát thật. Xem xét các tùy chọn kịch bản đã cấu hình và chạy tải sự kiện hơn là giả sử nó là gương một lần chạy trước.
Kiểm tra an ninh trước khi sản xuất
- Giữ các phím API và các bí mật đích và chỉ máy chủ.
- Kiểm tra cơ thể sống, chữ ký đầu và nhãn thời gian trước khi xử lý.
- Sử dụng một so sánh thời gian an toàn hoặc chính thức SDK verifier.
- Chứng minh thư và cập nhật không rõ ràng.
- Áp dụng giới hạn cơ thể, định tuyến POST, kiểm soát tốc độ và đăng nhập lại.
- Sử dụng hộp cát riêng biệt và đích đến trực tiếp, sau đó lặp lại mô phỏng và hộp cát thật chảy trước khi chuyển URL sản xuất.
Trình mô phỏng chứng minh sự tích hợp của bạn theo trình tự vòng đời được kiểm soát; một hộp cát thực sự được kiểm tra thêm chứng minh các mối quan hệ với nhau. Sử dụng cả hai, sau đó xem xét tướng quân Hướng dẫn dùng móc câu và Hướng dẫn toàn năng trước khi phóng.
