---
sourceType: api-reference
sourceTypeMatchedRule: openApis
slug: MA/openApis/open/webhook/verifysignature
title: Hướng dẫn verify signature
---
### Sử dụng Open API SDK

Để xác thực Signature của sự kiện, bạn có thể gọi hàm `generateSignature` như code mẫu bên dưới:

### Code sample — Java

```js
import com.vng.zalo.miniapp.sdk.utils.VerifySignature;

// assuming data received from webhook is the below JSON object
JsonObject data = new JsonObject();
data.addProperty("event", "versions.review.done");
data.addProperty("appId", "2646373759294038927");
data.addProperty("versionId", 101);
data.addProperty("status", 0);
data.addProperty("description", "");
data.addProperty("timestamp", 1670553442564L);

// generate signature
String signature = VerifySignature.generateSignature(data, "Your API Key");
```

### Code sample — Javascript

```js
import { VerifySignature } from "zmp-openapi-nodejs";

// assuming data received from webhook is the below JSON object
const data = {
  event: "versions.review.done",
  appId: "2646373759294038927",
  versionId: 101,
  status: 0,
  description: "",
  timestamp: "1670553442564"
};

// generate signature
const signature = VerifySignature.generateSignature(data, "Your API Key");
```

:::info
Xem hướng dẫn lấy API key [tại đây](/docs/MA/openApis/open/intergration-process)

Nếu bạn là đối tác giải pháp, API key là Partner API Key mà chúng tôi đã cung cấp khi bạn đăng ký đối giác giải pháp.
:::

Sau đó so sánh signature được build ra với signature trong header:

### Code sample — Java

```js
signature.equals(req.getHeader("x-zevent-signature"));
```

### Code sample — Javascript

```js
signature === req.headers["x-zevent-signature"];
```

### Không sử dụng Open API SDK

Trong trường hợp server tích hơp Webhook không có sẵn SDK, bạn có thể tự build signature từ data theo hướng dẫn sau:

- Lấy tất cả danh sách fields dữ liệu trong data bạn nhận được sắp theo thứ tự Alphabet (A - Z)
- Build chuỗi content các giá trị theo thứ tự fields vừa sắp xếp được
- Signature được tính theo hàm hash **sha256(content + API Key).** Vui lòng tham khảo code mẫu bên dưới.

Code mẫu:

```js
function generateSignature(data, apiKey) {
  const keys = Object.keys(data).sort();
  let content = "";
  for (let k of keys) {
    let value = data[k];
    if (typeof value == "object") {
      value = JSON.stringify(value);
    }
    content += value;
  }
  const signature = crypto
    .createHash("sha256")
    .update(`${content}${apiKey}`)
    .digest("hex");
  return signature;
}
```
