http://gw.api.alibaba.com/dev/doc/intl/sys_auth.htm?ns=aliexpress.open#concept

关键字段说明

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;
}

速卖通API开发步骤的更多相关文章

  1. 外贸开发,用java调用速卖通api第一步,token的获取。

     第一步 定义速卖通api的常量  public String client_id;  public String client_key;  public String site;   第二步 获取登 ...

  2. Java 集成 速卖通开发.

    一.申请成为开发者 申请入口:http://isvhz.aliexpress.com/isv/index.htm 说明文档:http://activities.aliexpress.com/open/ ...

  3. Java 集成速卖通开发.

    一.申请成为开发者 申请入口:http://isvhz.aliexpress.com/isv/index.htm 说明文档:http://activities.aliexpress.com/open/ ...

  4. 使用速卖通开放平台云API调用菜鸟组件实现云打印

    公司是跨境电商,使用速卖通平台卖玩具,我们自己研发的ERP是基于速卖通开放平台API,实现订单的发货提交,打印面单等功能 近期公司要求使用菜鸟组件云打印,去平台里看下,有这个API,如下图所示 实现也 ...

  5. 速卖通AE平台+聚石塔+奇门 完整教程V2

    公司是跨境电商,在阿里马马的速卖通平台上开有店铺,并且基于速卖通开放平台,自主研发了ERP系统,居今已有3年多的时间了,一直很稳定. 今年初,速卖通AE开放平台改版,并入淘宝开放平台中,我们的麻烦就开 ...

  6. 速卖通api--获取商品信息

    <? $productId    = 'xxxx';//你的产品id    $access_token = 'xxxxx';//你的授权码    $appSecret    = 'xxxx';/ ...

  7. 速卖通api--发起授权

    <? $reqURL_onLine = "https://gw.api.alibaba.com/openapi/http/1/system.oauth2/getToken/494739 ...

  8. 速卖通---发布商品aeopAeProductPropertys这个字段值报07004013的错误

    由于文档的说明很少,导致里面改填写那些值都是靠自己推敲出来,当然可以根据他们的错误提示了研究,他们的错误提示也给出了相关的帮助了, 例如通过categoryid的200000001获取到"i ...

  9. ActiveMQ学习笔记(4)----JMS的API结构和开发步骤

    1. JMS的API结构 其实上图中的五个API在第一节中我们都已经使用到了.本节将会讲非持久化和持久化topic的使用. 2. JMS的基本开发步骤 1. 创建一个JMS工厂,  Connectio ...

随机推荐

  1. 深度学习原理与框架-Tensorflow基本操作-mnist数据集的逻辑回归 1.tf.matmul(点乘操作) 2.tf.equal(对应位置是否相等) 3.tf.cast(将布尔类型转换为数值类型) 4.tf.argmax(返回最大值的索引) 5.tf.nn.softmax(计算softmax概率值) 6.tf.train.GradientDescentOptimizer(损失值梯度下降器)

    1. tf.matmul(X, w) # 进行点乘操作 参数说明:X,w都表示输入的数据, 2.tf.equal(x, y) # 比较两个数据对应位置的数是否相等,返回值为True,或者False 参 ...

  2. alias 设置别名

    我们在使用Linux中使用较长的命令而且要经常要使用时,总是会使用别名,这里就简单的介绍一下别名alias 指令:alias设置指令的别名 语法:#  alias name='command line ...

  3. APP-4-百度地图定位

    APP-3-百度地图应用 需要根据上一步完成百度地图应用的测试,本文介绍Hbuilder通过MUI框架完成百度地图的定位. 1.代码部分 <!DOCTYPE html> <html& ...

  4. Java,AWTUtilities,eclipse报编译错误:Access restriction: The type 'AWTUtilities' is not API (restriction on required library 'C:\Program Files\Java\jre7\lib\rt.jar')

    [场景]调用com.sun.awt.AWTUtilities时,eclipse提示编译错误: Access restriction: The type 'AWTUtilities' is not AP ...

  5. 跨域(五)——postMessage

    HTML5的postMessage机制是客户端最直接的中档传输方法,一般用在iframe中父页与子页之间的客户端跨域通信. 浏览器支持情况:Chrome 2.0+.Internet Explorer ...

  6. 如何查看一个class文件是否正确

    今天碰到了个问题,左思右想就是找不出问题,试验多个路径来解决问题,错误依旧. 然后我拿到了现场的包,一个很大的问题让我忽略了,这个class文件用反编译程序打不开(jd-gui.exe),非常神奇,但 ...

  7. LeetCode OJ 93. Restore IP Addresses

    题目 Given a string containing only digits, restore it by returning all possible valid IP address comb ...

  8. openwrt中防暴力破解shell的脚本

    原文:http://www.right.com.cn/forum/thread-124429-1-1.html 原理:1. snort做入侵检测是很好,但是太大太复杂,我们需要轻量化的操作.当对方进行 ...

  9. winform clickonce在线安装

    转 http://swanmsg.blog.sohu.com/162994305.html

  10. java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)

    为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...