使用说明:注意在微信生态的使用
1、不支持在微信小程序中使用(不支持微信小程序支付)
2、微信公众号中可以使用
在曹操开放平台管理中心创建应用,分配client_id与sign_key
组装url如下
-正式环境请求域名:mobile.caocaokeji.cn
参数名 | 是否必填 | 说明 |
---|---|---|
client_id | Y | 联系曹操产品技术人员获取(参与签名) |
timestamp | Y | 时间戳(毫秒)(参与签名) |
ext_user_id | Y | 第三方用户ID,第三方唯一标识(参与签名)对应4.1发券接口内的externalCustomerId |
ext_user_phone | N | 实际用车人用户手机号(如果url中传递,则参与签名) |
ext_user_name | N | 实际用车人用户名(如果url中传递,则参与签名) |
route | N | 控制打开用户的页面,用户标识以第三方用户ID为准。journey:打开用户的订单列表;orderDetail:打开用户对应订单号的订单详情页(需要配合orderNo一起使用) |
orderNo | N | 当route=orderDetail时必传,orderNo为曹操订单号,订单号可通过5.3订单状态变更回调获取,或通过3.3订单列表查询接口获取 |
sign | Y | 免登签名(签名方式参考下方示例) |
签名方式:对上表标注了“参与签名”的参数组成参数对(未标注的不参与签名),并进行升序排序,组装成字符串,然后进行sha1签名得到结果。
1.生成签名时将sign_key加入传递的参数,参与签名;
2.将所有的参数按照key值按字符升序排列(key1value1key2value2),生成小写的签名作为sign;
3.生成sign后,sign与其他的参数一同传递;
4.sign_key不参与传递;
5.timestamp时间戳为毫秒,例如 timestamp=1508240915308
public String sign(Map<String, Object> params, String signKey) throws Exception {
params.put('sign_key', signKey);
Map<String, String> needVerify = new HashMap<>();
for (Map.Entry<String, Object> entry : params.entrySet()) {
needVerify.put(entry.getKey(), String.valueOf(entry.getValue()));
}
List<Map.Entry<String, String>> entryList = new ArrayList<>(needVerify.entrySet());
//排序
Collections.sort(entryList, (o1, o2) -> o1.getKey().compareTo(o2.getKey()));
StringBuilder buffer = new StringBuilder();
for (Map.Entry<String, String> entry : entryList) {
buffer.append(entry.getKey()).append(entry.getValue());
}
logger.info("sha1 签名参数:{}", buffer.toString());
return SHA.encodeBySHA(buffer.toString());
}