1.开放文档 - globalsacnner/open-api GitHub Wiki
商家在店铺后台->配送管理->发货地管理点击 erp对接信息 ,即可显示正式的账号(partner)和密钥(key),erp对接人员可使用测试账号在测试环境进行联调。
此文档主要指导商家与平台API对接。商家与基于HTTP协议通讯,请求业务数据与返回业务数据均承载于HTTP体(Body)、遵行JSON格式规范并使用UTF-8字符集,其中请求格式遵循POST(METHOD)提交参数规范。
调用时,签名sign放在Http Header中,参数存放在Http Body中
测试环境接口地址:http://seller-open-api.test.gegejia.com
正式环境接口地址:http://seller-open-api.gegejia.com
上方接口地址,不是让商家在浏览器打开使用,接口地址是技术人员对接时系统调用使用。浏览器打不开是正常现象。
测试环境账号
账号1:hqbs196
密钥:bc0acfa673064b88908d097c3a53353b
账号2:hqbs197
密钥:4e4c3d11d49a49148d1882d152372248
partner String 是 商家身份标识,由店铺后台发货地管理获取partner timestamp String 是 时间戳,格式为yyyy-mm-dd HH:mm:ss,例如:2018-12-17 10:00:00。误差不超过10分钟。 params String 是 具体业务参数(json格式的字符串),详情见各个业务章节 名称 类型 是否必须 描述
签名值是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);
}
}
调用入口即调用接口(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();
?>