接口调用说明,请仔细看一下

申请app_key及app_secret

[!NOTE] 在申请API服务化接口前先向客服提交相关的企业证件信息,由平台审核人员进行审核。审核通过后,发放 初始的 app_key和 app_secret。

接口调用说明

[!NOTE] 接口为http请求的参数传参(即像form表单提交的方式传值)即可( 其中 ts、 sign、 app_key,nonce 为特殊必填参数(encry_method为选填,默认不填写时encry_method=sha256)。 其它参数根据不同的接口地址, 相应的追加参数请求)
对于要上传文件的情况, 请使用form的文件上传方式传值
请求的地址为 $SERVICE_URL/业务地址

接口请求地址

[!NOTE] 接口测试地址
SERVICE_URL="https://api.sandbox.junziqian.com"
接口生产地址
SERVICE_URL="https://api.junziqian.com"

公共必填参数

参数名 说明 是否必填(*是) 请求方式
ts 时间戳,取当前时间的毫秒值 * query或post
app_key 君子签提供的app_key * query或post
sign 对请求生成的签名,生成方式参考后续详细说明 * query或post
nonce 32位随机数(只能是[0-9a-f]) * post
encry_method 签名方式:md5,sha256,sha1,sha3_256;默认sha256 ? query或post

[!NOTE] 请求方式:QUERY即建议参数附在URL地址上请求;POST即建议参数在REQUEST.BODY中传输(如nonce参数建议使用post请求并把参数放入请求的body中而不是以url的方式传输)

签名方法

  • nonce说明

[!NOTE] nonce是32位的随机数,推荐获取方式为:md5(当前时间)的方式

  • sign说明

[!NOTE] sign是对请求参数签名,签名方法如下: 1.指定一种签名方式:encry_method=md5,sha256,sha1,sha3_256 2.计算nonce: md5(ts)
3.获取到app_key,app_secret,ts

  1. 按如下规则:sign = $encry_method("nonce"+nonce+"ts"+ts+"app_key"+app_key+"app_secret"+secret ) 即生成字符串的哈希值

sha3-256签名说明

[!NOTE] sha3-256这里使用的是apache的DigestUtil.sha3_256Hex(需要指定加密服务提供商为BouncyCastleProvider)方法生成(PHP的SDK中暂不支持)

<!--使用sha3-256签名的最低commons-codec版本要求,并需要引用BouncyCastleProvider-->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.13</version>
</dependency>
<!--
以下是一个对”123456”字符串签名后的结果:
sha1Hex:7c4a8d09ca3762af61e59520943dc26494f8941b
sha256Hex:8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
md5Hex:e10adc3949ba59abbe56e057f20f883e
sha3_256Hex:c888c9ce9e098d5864d3ded6ebcc140a12142263bace3a23a36f9905f12bd64a
-->

代码实现

JAVA实现
    /**请求地址*/
    private String serviceUrl;
    /**appkey*/
    private String appkey;
    /**secret*/
    private String appSecret;
    /**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
    private String encryMethod;
    /**默认ts单位:1毫秒,2秒*/
    private byte tsType=(byte)1;

    /**app_key*/
    private String appKey;
    /**app_secret*/
    private String appSecret;
   /**
     * 填充签名数据
     * @param req
     */
    private void fillSign(Map<String,Object> req){
        /**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
        long ts=System.currentTimeMillis();
        if(tsType==2){
            ts=System.currentTimeMillis()/1000;
        }
        String sign;
        String nonce= DigestUtils.md5Hex(System.currentTimeMillis()+"");
        String signSrc="nonce"+nonce+"ts"+ts+"app_key"+appkey+"app_secret"+appSecret;
        if(encryMethod==null||encryMethod.equalsIgnoreCase("sha256")){
            sign=DigestUtils.sha256Hex(signSrc);
        }else if(encryMethod.equalsIgnoreCase("sha1")){
            sign=DigestUtils.sha1Hex(signSrc);
        }else if(encryMethod.equalsIgnoreCase("md5")){
            sign=DigestUtils.md5Hex(signSrc);
        }else if(encryMethod.equalsIgnoreCase("sha3-256")){
            sign=DigestUtils.sha3_256Hex(signSrc);//*此需要引入加密商BouncyCastleProvider才能使用
        }else{
            throw new ResultInfoException("HTTP_PARAM_ERROR",encryMethod+",必须为md5,sha1,sha256,sha3-256之一");
        }
        req.put("ts",ts);
        req.put("app_key",appkey);
        req.put("sign",sign);
        req.put("nonce",nonce);//这只只是为了生成一个随机值
        if(encryMethod!=null){
            req.put("encry_method",encryMethod);//为''也不会传,在requestUtils中有判断
        }
    }
PHP实现

    /**请求地址*/
    private $serviceUrl;
    /**appkey*/
    private $appkey;
    /**secret*/
    private $appSecret;


    /**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
    private $encryMethod;
    /**默认ts单位:1毫秒,2秒*/
    private $tsType;
    /**
     * 填充签名数据
     * @param $req array
     */
    public function fillSign($req){
        /**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
        $ts=time();
        if($this->tsType==1){
          $ts=$ts*1000;
        }
        $sign=null;
        $nonce= md5($ts."");
        $signSrc="nonce".$nonce."ts".$ts."app_key".$this->appkey."app_secret".$this->appSecret;
        if($this->encryMethod==null||$this->encryMethod=="sha256"){
            $sign=ShaUtils::getSha256($signSrc);
        }else if($this->encryMethod=="sha1"){
            $sign=ShaUtils::getSha1($signSrc);
        }else if($this->encryMethod=="md5"){
            $sign=md5($signSrc);
        }else{
            throw new ResultInfoException($this->encryMethod.",必须为md5,sha1,sha256之一","PARAM_ERROR");
        }
        $req['ts']=$ts;
        $req['app_key']=$this->appkey;
        $req['sign']=$sign;
        $req['nonce']=$nonce;//这只是为了生成一个随机值
        if($this->encryMethod!=null){
            $req['encry_method']=$this->encryMethod;//为''也不能传
        }
        return $req;
    }

返回说明

[!NOTE] 返回response为application/json的数据,其字段说明如下

参数 类型 是否必返回 说明
success bool * 成功true;异常false
msg string ? 异常时,返回异常原因
data object ? 成功有数据,各接口不同返回值不同
resultCode int * 成功0,其它参考附录

results matching ""

    No results matching ""