欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > 【团购核销】抖音生活服务商家应用快速接入②——商家授权

【团购核销】抖音生活服务商家应用快速接入②——商家授权

2024/11/30 8:50:49 来源:https://blog.csdn.net/kangweijian/article/details/143839241  浏览:    关键词:【团购核销】抖音生活服务商家应用快速接入②——商家授权

文章目录

  • 一、前言
  • 二、授权流程
  • 三、授权Url
    • 3.1 Url参数表
    • 3.2 授权能力表
    • 3.3 源码示例
  • 四、授权回调
    • 4.1 添加授权回调接口
    • 4.2 授权回调接口源码示例
  • 五、实际操作演示
  • 六、参考

一、前言

目的:将抖音团购核销的功能集成到我们自己开发的App和小程序中

  • 【团购核销】抖音生活服务商家应用快速接入①——基础工作
  • 【团购核销】抖音生活服务商家应用快速接入②——商家授权
  • 【团购核销】抖音生活服务商家应用快速接入③——团购核销验券

二、授权流程

  • 杆知乐(24小时自助台球棋牌)为例。
商家 杆知乐商家版 抖音 点击抖音团购授权 添加out_shop_id再生成授权url 通过授权url登录抖音 选择门店进行绑定授权 将商家在抖音上的account_id和授权信息推送给技术服务商 商家 杆知乐商家版 抖音

三、授权Url

  • 业务授权URL:https://auth.dylk.com/auth-isv/
https://auth.dylk.com/auth-isv/?client_key=awxxxxxxxx&timestamp=1677686399&sign=xxxxxxxxxxxxxx&solution_key=1&permission_keys=1,16&out_shop_id=shop_id&charset=UTF-8&extra=aaaaaaaaaa

3.1 Url参数表

字段含义必填
client_key服务商应用标示
timestampurl开始生效的秒时间戳 ​,24小时内有效
solution_key到店餐饮1,到店团购2,随心团5
permission_keys​授权能力如2.2表
charset交互数据的编码 固定值:UTF-8​
sign根据参数内容生成的签名
client_key服务商应用标示
out_shop_id绑定抖音门店的外部门店ID

3.2 授权能力表

​能力枚举permission_keys​语义​
​1 ​​门店管理​
2​订单查询​
3​门店基础信息更新​
4 ​​门店任务查询​
​5 ​​同步门店户​
​6 ​​门店匹配​
​7 ​​门店装修​
​8 ​​门店亮照​
​9 ​​会员管理​
​10 ​​商品查询​
​11 ​​商品发布​
​12 ​​团购核销​
​13 ​​cps佣金设置与查询​
​14 ​​KA核销对账​
​15 ​​团购核销对账​
​16 ​​商户授权​
​17 ​​三方码发布​
18 ​​同步品牌户​
​19​​客资查询​

3.3 源码示例

  • 快速生成商家授权链接
private final static String AuthUrl = "https://auth.dylk.com/auth-isv/";public static String genAuthWithBindValidUrlFast(String outShopId) {Map<String, String> query = new HashMap<>();query.put("client_key", APPID);query.put("timestamp", String.valueOf(System.currentTimeMillis() / 1000));query.put("charset", "UTF-8");query.put("solution_key", "4");query.put("out_shop_id", outShopId);query.put("permission_keys", "1,2,10,12,14,15,16");String signResult = SignUtil.signV2(AppSecret, "", query);query.put("sign", signResult);String queryStr = query.entrySet().stream().map(entry -> new StringBuilder().append(entry.getKey()).append("=").append(entry.getValue())).collect(Collectors.joining("&"));StringBuilder resultSb = new StringBuilder(AuthUrl).append("?").append(queryStr);return resultSb.toString();
}
  • 签名加密SignUtil.java
/*** SignV2 用于生活服务应用计算header中的签名(sha256) 新申请应用请使用该方法计算* @param clientSecret 应用secret* @param body post请求/spi请求中的body参数json字符串* @param query url参数* @return 签名*/
public static String signV2(String clientSecret, String body, Map<String, String> query) {StringBuilder str = new StringBuilder(clientSecret);query.keySet().stream().filter(a -> !"sign".equals(a)).sorted().forEach(k -> {String val = query.get(k);str.append("&");str.append(k).append("=").append(val);});if (body != null && !"".equals(body)) {str.append("&");str.append("body").append("=").append(body);}System.out.printf("[Sign] v2 str:%s\n", str.toString());String result = SHA256(str.toString());System.out.printf("[Sign] v2 str:%s, result:%s\n", str.toString(), result);return result;
}/*** SHA-256加密* @param input 明文* @return 密文*/
public static String SHA256(String input) {String result = "";try {MessageDigest md = MessageDigest.getInstance("SHA-256");md.update(input.getBytes(StandardCharsets.UTF_8));byte[] digest = md.digest();result = bytes2Hex(digest);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return result;
}

四、授权回调

4.1 添加授权回调接口

  • 抖音开放平台(服务商平台)
  • 第三方生活服务商家应用
  • 开发设置
  • Webhooks
  • 添加你写好的接口,如果你的接口没写好,则会提示参数不合法

在这里插入图片描述

  • 如果接口是ok的,则会提示添加成功。
    在这里插入图片描述

4.2 授权回调接口源码示例

  1. 校验签名,加密请求体与请求体的签名进行对比
  2. 判断是key和event无误
  3. 则保存商户授权信息
/*** 抖音推送接口*/
@PostMapping("/douyin/messages")
public String douyinMessage(@RequestBody String body, @RequestHeader Map<String, String> headers)
{log.info(body);log.info(headers.toString());// 获取请求头中的加签信息String douyinSign = headers.get("X-Douyin-Signature");if(douyinSign==null || douyinSign.length()==0){douyinSign = headers.get("x-douyin-signature");}String data = DouYinUtils.AppSecret + body;String sign = DigestUtils.sha1Hex(data);if(!sign.equals(douyinSign)){log.error("验签失败, data="+data);log.error("验签失败, sign1="+sign);log.error("验签失败, sign2="+douyinSign);return AjaxResult.error().toString();}JSONObject douyinData = JSONObject.parseObject(body);if(douyinData.getString("client_key").equals(DouYinUtils.APPID)){if(douyinData.getString("event").equals("life_saas_cooperate_auth_with_bind")){String content = douyinData.getString("content");JSONObject jsonObject = JSONObject.parseObject(content);Long shopId = Long.valueOf(jsonObject.getString("out_shop_id"));String accountId = jsonObject.getString("account_id");String solutionKey = jsonObject.getString("solution_key");String permissionKey = jsonObject.getJSONArray("permission_keys").toJSONString();BilliardsDouyin billiardsDouyin = new BilliardsDouyin();billiardsDouyin.setAccountId(accountId);billiardsDouyin.setPermissionKeys(permissionKey);billiardsDouyin.setSolutionKey(solutionKey);billiardsDouyin.setShopId(shopId);log.info(billiardsDouyin.toString());billiardsDouyinService.insertBilliardsDouyin(billiardsDouyin);BilliardsShop billiardsShop = billiardsShopService.selectBilliardsShopById(shopId);if (ObjectUtil.isNull(billiardsShop)) {log.error("抖音商家授权回调接口,查无此球厅");return AjaxResult.error().toString();}billiardsShop.setDouyinId(accountId);billiardsShopService.updateBilliardsShop(billiardsShop);}}return douyinData.getJSONObject("content").toJSONString();
}

五、实际操作演示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

六、参考

  • 能力授权&门店绑定SDK_生活服务商家应用_抖音开放平台
  • 生活服务消息推送_生活服务商家应用_抖音开放平台

觉得好,就一键三连呗(点赞+收藏+关注)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com