对外开放接口开发

需求是这样的:
有个外部app给我们小程序做推广,在他们那领取优惠券码。然后到我们小程序领取优惠券,使用优惠券下单。同时,需要我们推送订单。还要接受他们那变更优惠券的状态。

思路图如下:
思路图

那么,根据上面的思路。我这需要开发三个接口

1.优惠券列表

第三方调用接口,获取优惠券信息

2.优惠券状态变更

第三方调用变更优惠券状态

3.优惠券订单推送

第三方提供url,我这边根据使用优惠券产生的订单来推送订单信息

首先,设计一个开放应用表,主要存储应用id、应用秘钥,如图

应用表设计

要给数据做个签名以及重要数据做加密处理

签名就用常规的格式(也可以自己改动格式):时间戳+应用秘钥+传输数据
按照上面的格式md5一下,然后再转码成base64。时间戳和签名要放在请求头传输。如图

签名代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func CouponSigin(appId, jsonData string, sid int, def ...string) (*string, *string, *string, error) {
openApp, err := GetStoreApp(appId, sid, 0)
if err != nil {
logs.Error("获取应用失败", err)
return nil, nil, nil, err
}
apiKey := openApp.ApiOne
getTime := Util.Int64ToString(time.Now().UnixNano())
if len(def) > 0 && len(def[0]) > 0 {
getTime = def[0]
}
strData := getTime + apiKey + jsonData + getTime
md := md5.New()
md.Write([]byte(strData))
md5Str := hex.EncodeToString(md.Sum(nil))
SystemSign := base64.StdEncoding.EncodeToString([]byte(md5Str))
logs.Error("==签名==", SystemSign)
logs.Error("==时间戳==", getTime)
return &SystemSign, &getTime, &apiKey, nil
}

加解密就用常规的aes加密,自己用应用秘钥加密,这里不多讲了,很常见的。

到这里基础弄好了。

我们开发优惠券列表、变更优惠券状态、推送优惠券订单就可以通过签名校验数据,同时敏感数据就加密