对接方式权益免验证码token,此接口只用于跳转e代驾下单页面url拼接的token,免除用户在e代驾再次授权
合作方服务端调用此接口获取用户权益token,按照https://h5.d.edaijia.cn/app/index.html?strategyToken=xxx&from=xxx,拼接url跳转edaijiaH5页面
测试环境用appkey=61000159,secret=3739a29c-dc35-41c0-a4b6-a6226b2c17b7,生产邮件发送合作方
方法名
uri | 请求方式 |
---|---|
/customer/authorizeToken | GET/POST |
参数说明
参数名称 | 是否必须 | 参数类型 | 备注 |
---|---|---|---|
phone | 是 | String | 用户手机号 (如果接入的加密方式 这里应该传入AESUtil加密之后的串) |
from | 是 | String | e代驾分配,测试和线上用一个值 |
thirdOrderId | 否 | String | 合作方订单号,如果传值,可在订单状态消息回调此值 |
strategyId | 否 | String | e代驾分配的权益id,无权益不传 |
strategyServiceSign | 否 | String | e代驾分配的权益签名,无权益不传 |
encryptFlag | 否 | Boolean | 手机号加密标识 缺省值为false(有手机号加密需求传true,并按照文档上的AESUtil进行对称加密手机号,然后与e代驾进行交互,详情参照以下AESUtil的main方法) |
AESUtil 工具类
import org.apache.commons.codec.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
public class AESUtil {
public static Logger logger = LoggerFactory.getLogger(AESUtil.class);
private static final String key = "MHkEIIZcMwhzvvhN";
private static final String iv = "wv0HZBRF4Ay!Sg$y";
/**
* 对称加密
*
* @param input 需加密的内容
* @param key 加密key from + appkey 16位
* @return
*/
public static String encrypt(String input, String key) {
byte[] crypted = null;
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
} catch (Exception e) {
logger.info("AES encrypt error", e);
}
return new String(Base64.encodeBase64(crypted));
}
/**
* 对称解密
*
* @param input 需解密的内容
* @param key 加密key from + appkey 16位
* @return
*/
public static String decrypt(String input, String key) {
byte[] output = null;
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(Base64.decodeBase64(input));
} catch (Exception e) {
logger.info("AES decrypt error", e);
}
return new String(output);
}
public static void main(String[] args) {
//以本次加密的手机号为18800000000 举例
String encryptContent = "18800000000";
//取本次对接为合作方分配的系统级参数from值和appkey
//这里以 from 01051111 appkey 61000158 举例
String from = "01051111";
String appkey = "61000158";
String encryptKey = from + appkey;
//加密
String encrypt = encrypt(encryptContent, encryptKey);
System.out.println("加密后的串" + encrypt);
//解密
System.out.println(decrypt(encrypt, encryptKey));
}
}
注意:
1.合作方可给指定用户获取不同的优惠权益,无权益不传即可
2.权益线下提供,带权益下单司机报单501状态会回调合作方订单状态和带的权益id,e代驾会扣除合作方账户余额,订单取消会释放权益并回调对应订单状态
3.权益下单后,都会回调合作方订单状态,每家可根据不同状态做自己的业务逻辑
4.带权益的token 2小时有效,无权益token 24小时有效(在用户权益不变情况下,合作方可缓存此token),需要e代驾在配置中心进行from配置
5.获取的权益token,拼接url参数无须进行url编码
6.url如果加上sn=xxxxx,这样用户只能用此优惠券下单,不拼的话,用户可以选择其他的优惠券进行选择使用
返回值说明
名称 | 类型 | 备注 |
---|---|---|
code | int | 返回状态码:0成功非0失败 |
message | string | message |
data | String | 成功时返回的strategyToken |
调用示例(sn=xxx看自己业务是否允许选择其他优惠券)
http://open.d.api.edaijia.cn/customer/authorizeToken?appkey=xxx&from=xxx&phone=xxx&sig=xxx&strategyId=xxx&strategyServiceSign=xxx×tamp=xxx&ver=xxx http://open.d.api.edaijia.cn/customer/authorizeToken?appkey=xxx&from=xxx&phone=xxx&sig=xxx×tamp=xxx&ver=xxx (无权益)
成功返回值
{
"code": 0,
"data": "tQlMlIUck+Cs6i/gYLauntShw2KZzLqc0A8O1vaGeJb6ixCxVuu1g0xa69v9sSILVs04s846+/XYDND/awvtrTQGjN2ABIcMB6ubAZrhzDwc5NtzyGSq0RZgFDJW7q3LzIfZ1KDtjRdorZEl7kaZDw==",
"message": "suc"
}