需求是这样的:
有个外部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加密,自己用应用秘钥加密,这里不多讲了,很常见的。
到这里基础弄好了。
我们开发优惠券列表、变更优惠券状态、推送优惠券订单就可以通过签名校验数据,同时敏感数据就加密