43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
const http = require('http')
|
|
const https = require('https')
|
|
const crypto = require('crypto')
|
|
|
|
const PORT = process.env.PORT || 7201
|
|
const URL = `http://localhost:${PORT}/webhook/express/status`
|
|
const SECRET = process.env.WEBHOOK_SECRET || 'test_secret'
|
|
|
|
const payload = {
|
|
tracking_no: 'LOCALTEST123',
|
|
status_code: 'DELIVERED',
|
|
acceptTime: new Date().toISOString(),
|
|
remark: 'local test event'
|
|
}
|
|
|
|
const bodyText = JSON.stringify(payload)
|
|
const ts = Math.floor(Date.now() / 1000).toString()
|
|
const sig = crypto.createHmac('sha256', SECRET).update(bodyText + ts).digest('hex')
|
|
|
|
const options = {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Content-Length': Buffer.byteLength(bodyText),
|
|
'X-Timestamp': ts,
|
|
'X-Signature': sig
|
|
}
|
|
}
|
|
|
|
const req = http.request(URL, options, (res) => {
|
|
let data = ''
|
|
res.on('data', (chunk) => data += chunk)
|
|
res.on('end', () => {
|
|
console.log('STATUS', res.statusCode)
|
|
try { console.log('BODY', JSON.parse(data)) } catch (e) { console.log('BODY', data) }
|
|
process.exit(0)
|
|
})
|
|
})
|
|
|
|
req.on('error', (e) => { console.error('request error', e); process.exit(2) })
|
|
req.write(bodyText)
|
|
req.end()
|