使用说明:注意在微信生态的使用

1、不支持在微信小程序中使用(不支持微信小程序支付)

2、微信公众号中可以使用

一.获取client_id和sign_key

在曹操开放平台管理中心创建应用,分配client_id与sign_key

  1. 测试环境client_id通过在曹操开放平台管理中心创建沙箱应用后获取,地址:https://open.caocaokeji.cn/ocean/login
  2. 正式环境client_id通过在曹操开放平台管理中心创建正式应用,由曹操审核通过后获取,地址:https://open.caocaokeji.cn/ocean/login

二.使用client_id组装url跳转到h5页面

组装url如下

-正式环境请求域名:mobile.caocaokeji.cn

  • 业务参数需要进行签名,并通过跳转链接传递给WebApp。参数如下
参数名 是否必填 说明
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());
   }