ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
Java示例: https://supply-chain-fs.oss-cn-chengdu.aliyuncs.com/supply-api-demo.zip .Net C# 示例 https://supply-chain-fs.oss-cn-chengdu.aliyuncs.com/DaXiangScmDemo.zip PHP 示例 ``` <?php namespace common\utils; class daxiang_api { public $appid = "346837987331407872";//apiKey public $secret = "801135476cebb8700f45a319d38de308";//apiSecret public $host = "http://api.funengscm.com/"; /** * 获取选品库商品 * @return json */ public function get_goods_shelf_products() { $timestamp = $this->get_msectime(); $post_data['pageNum'] = 1; $post_data['pageSize'] = 50; $post_data = json_encode($post_data); $sign = $this->getSign($post_data,$timestamp); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $this->host."goods-shelf/get-mine-list", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $post_data, CURLOPT_HTTPHEADER => array( "Content-Type: application/json", "apiKey: ".$this->appid, "cache-control: no-cache", "sign: ".$sign, "timestamp: ".$timestamp ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); return $response; } /** * 获取签名 * @param $post_data * @param bool $timestamp * @return string */ public function getSign($post_data,$timestamp) { $data = [ 'apiKey' => $this->appid, 'body'=>$post_data, 'timestamp' => $timestamp, ]; ksort($data); $signString = ''; foreach($data as $k=>$v){ $signString = $signString."$k=$v&"; } $signString = $signString."secret=$this->secret"; $sign = md5($signString); echo "签名原始串:$signString<br/>"."签名后:$sign <br/>"; return $sign; } //返回当前的毫秒时间戳 public function get_msectime() { list($msec, $sec) = explode(' ', microtime()); $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); return $msectime; } } $apiInvoker = new daxiang_api(); $a = $apiInvoker->get_goods_shelf_products(); echo "<br/> result is:<br/> $a" ?> ``` Python 示例: ``` #需安装:pip install requests import requests import json import hashlib import time #---------------------------以下需要修改--------------------------- apiKey="346837987331407872" apiSecret="801135476cebb8700f45a319d38de308" #--------------------------- END --------------------------- req_data = {"pageNum": 1,"pageSize":5} t=time.time() time_stamp = str(int(round(t * 1000))) url="http://api.funengscm.com/goods-shelf/get-mine-list" dataString = json.dumps(req_data) needSignParams = { 'apiKey':apiKey, 'timestamp':time_stamp, 'body':dataString } needSignParams = dict(sorted(needSignParams.items(),key=lambda x:x[0],reverse=False)) needSignParamsString='' for key,value in needSignParams.items(): needSignParamsString += key +'=' + value+'&' needSignParamsString += 'secret=' + apiSecret md5Sign=hashlib.md5(needSignParamsString.encode(encoding='UTF-8')).hexdigest() print("签名原始串:" + needSignParamsString + "\n" + "签名后:" + md5Sign) headers = { 'Content-Type':'application/json', 'apiKey':apiKey, 'timestamp':time_stamp, 'sign':md5Sign } result = requests.post(url, headers=headers,data=dataString) print("---------------------------result is:---------------------------") print(result.text) ``` golang 示例: ``` package main import ( "crypto/md5" "fmt" "sort" "strconv" "time" "github.com/gogf/gf/frame/g" ) type DxScmConfig struct { ApiKey string ApiSecret string Host string } func NewDxScmConfig(apiKey string, apiSecret string) *DxScmConfig { config := new(DxScmConfig) config.ApiKey = apiKey config.ApiSecret = apiSecret config.Host = "http://api.funengscm.com" return config } var currentConfig *DxScmConfig func setConfig(config *DxScmConfig) { currentConfig = config } type SignParams struct { ApiKey string Timestamp uint64 Sign string } func Invoke(url string, bodyString string) { setConfig(NewDxScmConfig("346837987331407872", "801135476cebb8700f45a319d38de308")) timestamp := strconv.FormatUint(uint64(time.Now().UnixNano()/1e6), 10) needSignParams := g.MapStrStr{ "apiKey": currentConfig.ApiKey, "body": bodyString, "timestamp": timestamp, } keys := make([]string, 0) for k := range needSignParams { keys = append(keys, k) } sort.Strings(keys) var needSignParamsString string = "" for _, k := range keys { needSignParamsString = needSignParamsString + fmt.Sprintf("%s=%s&", k, needSignParams[k]) } needSignParamsString += "secret=" + currentConfig.ApiSecret md5Sign := md5.Sum([]byte(needSignParamsString)) code := fmt.Sprintf("%x", md5Sign) fmt.Println("签名原始串:" + needSignParamsString + "\n" + "签名后:" + code) headers := g.MapStrStr{ "apiKey": currentConfig.ApiKey, "timestamp": timestamp, "sign": code, } response, _ := g.Client().SetHeaderMap(headers).ContentJson().Post(currentConfig.Host+url, bodyString) bodyArray := response.ReadAll() netString := string(bodyArray) fmt.Println(netString) } func GetMyProduct() { bodyString := `{"pageNum": 1,"pageSize":5}` Invoke("/goods-shelf/get-mine-list", bodyString) } func main() { GetMyProduct() } ```