1.开放文档 - globalsacnner/open-api GitHub Wiki

1. 对接流程

商家在店铺后台->配送管理->发货地管理点击 erp对接信息 ,即可显示正式的账号(partner)和密钥(key),erp对接人员可使用测试账号在测试环境进行联调。

2. 文档说明

此文档主要指导商家与平台API对接。商家与基于HTTP协议通讯,请求业务数据与返回业务数据均承载于HTTP体(Body)、遵行JSON格式规范并使用UTF-8字符集,其中请求格式遵循POST(METHOD)提交参数规范。

3. API调用说明

3.1. 调用介绍

调用时,签名sign放在Http Header中,参数存放在Http Body中

测试环境接口地址:http://seller-open-api.test.gegejia.com
正式环境接口地址:http://seller-open-api.gegejia.com

上方接口地址,不是让商家在浏览器打开使用,接口地址是技术人员对接时系统调用使用。浏览器打不开是正常现象。

测试环境账号
账号1:hqbs196
密钥:bc0acfa673064b88908d097c3a53353b

账号2:hqbs197
密钥:4e4c3d11d49a49148d1882d152372248

3.2. 系统参数

partner String 是 商家身份标识,由店铺后台发货地管理获取partner timestamp String 是 时间戳,格式为yyyy-mm-dd HH:mm:ss,例如:2018-12-17 10:00:00。误差不超过10分钟。 params String 是 具体业务参数(json格式的字符串),详情见各个业务章节 名称 类型 是否必须 描述

3.3. 签名

签名值是32位大写md5,算法为:md5(key+系统参数+key).toUpperCase(), partner=hqbs43,key=038c0101b60e44588f8d18a9af03156c,完整的系统参数:

{
    "partner":"GGJ_test",
    "timestamp":"2018-12-17 11:01:33",
    "params":{
        "startTime":"2018-12-15 23:30:00",
        "endTime":"2018-12-17 23:30:00",
        "status":100
    }
}

最终生成的sign=0360E1DC156F993317B73B3536B42DCE。以下是 java代码示例:

package com.ggj.open.api;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.joda.time.DateTime;

import java.util.HashMap;
import java.util.Map;

/**
 * 
 *
 * @author ggj
 * @create 2018-12-17 10:00
 */
public class SignDemo
{
    private static String partner = "hqbs43";
    private static String key = "038c0101b60e44588f8d18a9af03156c";

    public static void main(String[] args){

        Map<String, Object> params = new HashMap<>();
        params.put("startTime","2018-12-15 23:30:00");
        params.put("endTime","2018-12-17 23:30:00");
        params.put("status",100);

        Map<String, Object> reqData = new HashMap<>();
        reqData.put("partner", partner);
        reqData.put("timestamp", DateTime.now().toString("yyyy-MM-dd HH:mm:ss"));
        reqData.put("params", params);

        String sign = DigestUtils.md5Hex(key + JSONObject.toJSONString(reqData) + key).toUpperCase();
        System.out.println(sign);

    }

}

3.4. API调用

调用入口即调用接口(API)的请求访问该地址。java代码示例:

package com.ggj.open.api;

import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.joda.time.DateTime;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author ggj
 * @create 2018-12-17 10:00
 */
public class RequestDemo {

    private static String partner = "hqbs196";
    private static String key = "bc0acfa673064b88908d097c3a53353b";
    private static String url = "http://xxx/order/findOrders";

    public static void main(String[] args) throws Exception{

        Map<String, Object> params = new HashMap<>();
        params.put("startTime","2018-12-20 00:00:00");
        params.put("endTime","2018-12-30 23:30:00");
        params.put("status", 100);
        params.put("page",1);
        params.put("pageSize",50);

        Map<String, Object> reqData = new HashMap<>();
        reqData.put("partner", partner);
        reqData.put("timestamp", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        reqData.put("params", params);

        String sign = DigestUtils.md5Hex(key + JSONObject.toJSONString(reqData) + key).toUpperCase();
        System.out.println(sign);

        List<Charset> charset = new ArrayList<>();
        charset.add(Charset.forName("utf-8"));//设置字符集,utf-8

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);//设置返回类型,json格式 编码
        headers.setAcceptCharset(charset);
        headers.add("sign", sign);

        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setReadTimeout(10000);//设置超时时间
        requestFactory.setConnectTimeout(10000);//设置链接超时时间

        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setRequestFactory(requestFactory);
        restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));

        HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(reqData), headers);
        JSONObject result = restTemplate.postForObject(url, entity, JSONObject.class);
        System.out.println(result);
    }
}

PHP代码示例:

<?php
header("Content-Type:text/html;charset=UTF-8");
if(date_default_timezone_get() != "1Asia/Shanghai") date_default_timezone_set("Asia/Shanghai");
//首先检测是否支持curl
if (!extension_loaded("curl")) {
	trigger_error("对不起,请开启curl功能模块!", E_USER_ERROR);
}
/**
 * 
 * xxx的地方需要替换成相应的内容
 * @author ggj
 *
 */
class GEGE
{
	private  $partner = "xxx";
	private  $key = "xxx";
	private $url = "http://xxx/order/findOrders";
	

	public function http_post(){
		
		$endTime = '2018-12-30 23:30:00';
		$startTime = '2018-12-20 00:00:00';
		
		
		
		$params = '"pageSize":100,"startTime":"'.$startTime.'","endTime":"'.$endTime.'","page":1,"status":100';
		
		$p_timestamp = date('Y-m-d H:i:s');
		$json = '{"partner":"'.$this->partner.'","params":{'.$params.',"status":100},"timestamp":"'.$p_timestamp.'"}';

		$md5key = md5($this->key.$json.$this->key);
		$md5key = strtoupper($md5key);
		$da =$json;
		return $this->http_post1($this->url, $da,$md5key);
	 }
	
	 public function http_post1($url,$param,$sign){
	    
	 	$ch = curl_init();
	 	curl_setopt($ch, CURLOPT_URL, $url);
	 	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	 	curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json","sign:".$sign));
	 	curl_setopt($ch, CURLOPT_POST, 1);
	 	curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
	 	$result = curl_exec($ch);
	 	echo $result;
	 	return $result;
			
	 }

}

$b = new GEGE;
$b->http_post();

?>

4. 接口文档

⚠️ **GitHub.com Fallback** ⚠️