服务端 Webhook
GO-LANG Webhook
对于使用 go 的 Opencard 应用, 开发者可以参考以下 go 示例代码,来实现 Webhook的加解密功能。
- /* jwt 库
* github地址:https://github.com/dvsekhvalnov/jose2go
* 使用go的扩展安装方式安装 go get https://github.com/dvsekhvalnov/jose2go
* 安装完成后即可使用
*/
如下文件是百度封装好的扩展,方便加密解密opencard数据操作
FILE: baidu/baidujwe.go
- package baidujwe
import (
"github.com/dvsekhvalnov/jose2go"
"fmt"
"encoding/json"
"encoding/base64"
"github.com/dvsekhvalnov/jose2go/compact"
)
func GetJweHeader(token_string string) (jwe_header map[string]interface{}, err error) {
jh,err := getJweHeader(token_string)
return jh, err
}
//通过jwe加密内容获取header 数据
func getJweHeader(token_string string) (jwe_header map[string]interface{}, err error) {
var jwtHeader map[string]interface{}
parts, err := compact.Parse(token_string)
if err != nil {
return nil , err
}
header := parts[0]
json.Unmarshal(header, &jwtHeader)
fmt.Println(jwtHeader)
return jwtHeader, nil
}
func GetReqParams(token_string string, psk string)(baidu_req map[string]interface{}, err error) {
req_map, err := getReqParams(token_string, psk)
return req_map, err
}
//通过psk 获取百度服务请求过来的参数内容
func getReqParams(token_string string, psk string)(baidu_req map[string]interface{}, err error) {
decodeBytes, _ := base64.RawURLEncoding.DecodeString(psk)
var req_map map[string]interface{}
req_parm, _, err := jose.Decode(token_string, decodeBytes)
if err != nil {
return nil, err
}
req_byte := []byte(req_parm)
json.Unmarshal(req_byte, &req_map)
return req_map, nil
}
func GetEncString(payload string, psk string, jwtHeader map[string]interface{}) (encString string, err error) {
token, err := getEncString(payload, psk, jwtHeader)
return token, err
}
// 加密要返回的数据
func getEncString(payload string, psk string, jwtHeader map[string]interface{}) (encString string, err error) {
psk_byte, err_1 := base64.RawURLEncoding.DecodeString(psk)
if err_1 != nil {
return "", err_1
}
token, err_2 := jose.Encrypt(payload, jose.A128KW, jose.A128CBC_HS256, psk_byte, jose.Headers(jwtHeader))
if err_2 != nil {
return "", err_2
}
return token, nil
}
通过go 搭建一个简单的webhook 服务,示例仅用于开发参考,具体业务逻辑请开发人员自己处理
FILE : service/webhook.go
|
|
完成上述开发后,运行服务
|
|