速賣通API開發步驟

速賣通API開發步驟

關鍵字段說明

1、appKey和appSecret   

appKey是app的唯一標識,appSecret是app的密鑰,它們相當於用戶名和密碼。註冊app之後就會生成一個appKey和appSecret,請妥善保存。

2、code   

即臨時令牌。當用戶在開放平臺訪問app前,需對app進行授權,用戶授權後,app方可訪問用戶的隱私數據。用戶在完成授權之後,會跳轉到redirect_uri,並帶上臨時令牌code,app再用code從開放平臺後臺接口換取access_token。code爲一次性令牌,有效期爲2分鐘。

3、accessToken   

即用戶授權令牌,爲用戶一次會話的授權標識,有效期10小時。在獲得code後,通過調用開放平臺後臺接口getToken來獲取accessToken。 App在訪問用戶隱私數據時,需要帶上accessToken,也只有accessToken才能作爲訪問的憑證,其他token如code和refreshToken都不能直接作爲訪問憑證,需要轉換爲accessToken之後才能訪問用戶隱私數據。

4、refreshToken   

即長時令牌,有效期半年。當access_token過期後,可以使用refreshToken換取新的accessToken訪問用戶數據。

5、redirect_uri   即回調地址,指的是App發起請求時,所傳的回調地址參數,必填。請參考授權流程中的說明。 API參考說明地址: http://gw.api.alibaba.com/dev/doc/sys_auth.htm?ns=aliexpress.open   速賣通API官網地址

開發邏輯流程

 

伸手黨福利

代碼雖然很亂,但感覺很對的起伸手黨了,哈哈!!!

/*
* 獲取信息模板
*/
public static function getAccountTemplates($config)
{
$config['moduleStatus'] = 'approved';
$config['pageIndex'] = 1;
$apiname = "api.findAeProductDetailModuleListByQurey";
//獲取信息模板
$accountTemplats = Apiservice::getinfo($config,$apiname);
return $accountTemplats;
}


/*
* 獲取帳號appkey
*/
public static function getacountinfo($account)
{
$account = DB::SELECT('appkey','account','appsecret')
->from('account')
->where('account','=',$account)
->execute('system')
->current();
return $account;
}

//新方法獲取通行證
public static function newupdatetoken($account)
{
$row = Apiservice::newgetaccounts($account['account']);
if((strtotime($row['access_create_time'])+10*3600-60*10)<time()){
$ali = new Getapi();
$accessToken = $ali->getaccesstoken($row['refresh_token'],$account['appkey'],$account['appsecret']); //通過refreshToken換取accessToken
if(isset($accessToken['error'])){
return $accessToken;
}
$set = array(
'access_token' => $accessToken['access_token'],
'access_create_time' => date('Y-m-d H:i:s',time()),
);

$sql = "UPDATE `erp_aliexpress_accounts`
SET access_token='".$accessToken['access_token']."',access_create_time='".date('Y-m-d H:i:s')."'
WHERE `aliId`=".$accessToken['aliId'];

DB::query(Database::INSERT,$sql)
->execute('system');

$row['access_token'] = $accessToken['access_token'];
}elseif((strtotime($row['refresh_create_time'])+180*24*3600)<time()){
$row['access_token'] = NULL;
}
return $row['access_token'];
}

 

/**
* 獲取速賣通新帳號
* Enter description here ...
* @param unknown_type $account
*/
public static function newgetaccounts($account = '',$fields = '')
{
if(empty($account)){
return '賬戶爲空';
}else{

$result = DB::select('access_token','refresh_token','access_create_time','refresh_create_time')
->from('erp_aliexpress_accounts')
->where('aliexpress_account','=',$account)
->execute('system')
->current();
}
return $result;
}

/*
* 獲取帳號appkey
*/
public static function getacountinfo($account)
{
$account = DB::SELECT('appkey','account','appsecret')
->from('account')
->where('account','=',$account)
->execute('system')
->current();
return $account;
}

 

/*
* 公用方法
*/
public static function getinfo($config,$apiname)
{
$appkey = Apiservice::getacountinfo($config['account']);
$config['appkey'] = $appkey['appkey'];
//獲取信息模板
$api = new getapi();
$result = $api::api($config,$apiname);
return $result;
}

 

const URL = 'http://gw.api.alibaba.com/openapi/';
const SITE = 'aliexpress';

/*
* api公用方法
*/
public function api($set,$apiname)
{
if(empty($set['access_token'])){
return FALSE;
}
$api_url = 'param2/1/aliexpress.open/'.$apiname.'/'.$set['appkey'];
$url = Getapi::URL.$api_url;
$data = http_build_query($set);
$result = Getapi::sendRequestCurl($url,$data);
return $result;
}

/**
* 發送請求
* Enter description here ...
* @param unknown_type $url
* @param unknown_type $data
*/
protected static function sendRequestCurl($url,$data)
{

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
curl_setopt($ch,CURLOPT_TIMEOUT,300);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response,TRUE);
return $response;
}

/*
* 通過refreshToken換取accessToken
* Enter description here ...
* @param unknown_type $refreshToken
*/
public function getaccesstoken($refreshtoken,$appkey,$appsecret)
{
$code_arr = array(
'client_id' => $appkey,
'grant_type' => 'refresh_token',
'client_secret' => $appsecret,
'refresh_token' => $refreshtoken,
);
$sign_str = 'param2/1/system.oauth2/refreshToken/544880';
$code_sign = Getapi::apiSign($appsecret,$code_arr,$sign_str,$appsecret);
$getTokenUrl = 'https://gw.api.alibaba.com/openapi/param2/1/system.oauth2/refreshToken/'.$appkey;
$data = 'grant_type=refresh_token&refresh_token='.$refreshtoken.'&client_id='.$appkey.'&client_secret='.$appsecret.'&_aop_signature='.$code_sign;
$result = $this->sendRequestCurl($getTokenUrl,$data);
return $result;
}


/**
* 簽名串組規則
* Enter description here ...
* @param unknown_type $redirectUrl
*/
protected static function apiSign($appsecret,$code_arr,$sign_str = '')
{
ksort($code_arr);
foreach($code_arr as $key => $val){
$sign_str .= $key.$val;
}
$code_sign = strtoupper(bin2hex(hash_hmac("sha1",$sign_str,$appsecret,TRUE)));
return $code_sign;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章