对接方式权益免验证码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&timestamp=xxx&ver=xxx http://open.d.api.edaijia.cn/customer/authorizeToken?appkey=xxx&from=xxx&phone=xxx&sig=xxx&timestamp=xxx&ver=xxx (无权益)

成功返回值
{
    "code": 0,
    "data": "tQlMlIUck+Cs6i/gYLauntShw2KZzLqc0A8O1vaGeJb6ixCxVuu1g0xa69v9sSILVs04s846+/XYDND/awvtrTQGjN2ABIcMB6ubAZrhzDwc5NtzyGSq0RZgFDJW7q3LzIfZ1KDtjRdorZEl7kaZDw==",
    "message": "suc"
}
© 2011-2019 北京亿心宜行汽车技术开发服务有限公司 版权所有2019 all right reserved,powered by Gitbook该文件修订时间: 2024-01-23 16:28:14

results matching ""

    No results matching ""