字节跳动小程序担保支付请求签名算法-Java实现

最近在做字节跳动小程序支付相关的功能,官方提供的支付接口,调用需要使用请求签名,但是官方给的加签示例没有Java的实现。这里记录一下Java实现的加签算法。

官方要求的请求签名算法:

1. sign, app_id , thirdparty_id 字段用于标识身份字段,不参与签名。将其他字段内容(不包含 key)与支付 SALT 一起进行字典序排序后,使用&符号链接 

2. 使用 md5 算法对该字符串计算摘要,作为结果

3. 参与加签的字段均以 POST 请求中的 body 内容为准, 不考虑参数默认值等规则. 对于对象类型与数组类型的参数, 使用 POST 中的字符串原串进行左右去除 空格后进行加签

4. 如有其他安全性需要, 可以在请求中添加 nonce 字段, 该字段无任何业务影响, 仅影响加签内容, 使统一请求的多次签名不同

5. 空字符串与省略参数不参与加签

以如下的分账请求典型值为例:

{
  "settle_params": "[{\"merchant_uid\":\"123345\",\"amount\":1}]",
  "thirdparty_id": "ttc72cb19158066a6b",
  "settle_desc": "开始结算与分账",
  "out_settle_no": "mock_settle_no",
  "out_order_no": "mock_settle_no",
  "notify_url": "https://callback.com",
  "app_id": "ttabcdefg123456",
  "sign": "3c9421d0268a974138f4b36e9cefa1f1"
}

假设支付秘钥值为 your_payment_salt,经过剔除参数排序,得到 MD5 前的字符串为

[{"merchant_uid":"123345","amount":1}]&https://callback.com&mock_settle_no&mock_settle_no&your_payment_salt&开始结算与分账

MD5 计算后得到最终签名 3c9421d0268a974138f4b36e9cefa1f1

原文链接:https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/api/open-interface/payment/secure/UR#%E8%AF%B7%E6%B1%82%E7%AD%BE%E5%90%8D%E7%AE%97%E6%B3%95

以下是Java示例加签

借助工具类Hutool

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.6.3</version>
</dependency>
	/**
	 * 
	 * @Title: getSign
	 * @Description: 字节跳动小程序请求签名算法
	 * @param paramsMap
	 * @return
	 * @author 
	 * @date 2021-04-27 17:19:08
	 */
	public static String getSign(Map<String,Object> paramsMap) {
		String [] skipArray= {"app_id", "sign", "thirdparty_id"};
		Map<String, Object> map = MapUtil.removeAny(paramsMap, skipArray);
		List<String> list = new ArrayList<String>();
		for (String key : map.keySet()) {
			list.add(MapUtil.getStr(map, key));
		}
		CollUtil.sort(list, null);
		String str=CollUtil.join(list, "&");
		return DigestUtil.md5Hex(str);
	}

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值