京东jos对接爬坑过程

1 篇文章 0 订阅

需求:获取京东商家的订单
环境:java,官方宙斯SDK
1.申请账号注册开发者创建应用参考官方文档注册
注意一点是回调页面url:地址为用户访问应用的地址,当用户访问您的应用时,jos会把相关授权参数通过这个回调地址传给您;这个回调url只是在获取商家授权时需要用到,如果不是后台方法获取的话,填www.baidu.com就好。
2.获取appKey,appSecret,accessToken,下载SDK
感谢前辈提供帮助
控制台应用
应用证书
在控制台应用管理中,从应用证书中可以找到appKey,appSecret;
点击SDK下载,获得SDK;
获取code
在应用基本信息中点击测试;
用商家账号登陆授权
用商家账号登陆,点击授权后,跳转到百度首页,在地址栏中可看到后面的带参?code=48OtVB,保存起来;
拼接https://oauth.jd.com/oauth/token?grant_type=authorization_code&client_id=你的appkey&redirect_uri=http:www.baidu.com&code=48OtVB&state=1212&client_secret=你的appSecret
用浏览器打开;
{
“access_token”: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
“code”: 0,
“expires_in”: 86390,
“refresh_token”: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
“time”: “1516248547902”,
“token_type”: “bearer”,
“uid”: “524625331”,
“user_nick”: “jd abcd”
}
注意,测试的accress_token的时效性只有24小时,之后需要重新获取一次
3.后台获取订单
官方java示例:

public JdClient client=new DefaultJdClient(SERVER_URL,accessToken,appKey,appSecret);

OrderSearchRequest request=new OrderSearchRequest();

request.setStartDate( "jingdong" );
request.setEndDate( "jingdong" );
request.setOrderState( "jingdong" );
request.setPage( "jingdong" );
request.setPageSize( "jingdong" );
request.setOptionalFields( "jingdong" );
request.setSortType( "jingdong" );
request.setDateType( "jingdong" );

OrderSearchResponse response=client.execute(request);

项目中引入宙斯SDK后,测试了下,会报错
只有open-api-sdk-2.0会报错java.lang.NoSuchMethodError,还得另外的jar包。
这里就超级坑了,翻遍了官方文档,百度了很久,终于凑齐了jar包
jar下载

最后就是response的解析了,jos使用的是分页查询,注意是把Page理解为页码,官方描述容易误导,说一次最多可查1000个订单,最大PageSize为100,最大Page为50,容易理解为一次查询Page*PageSize个订单,其实是结果以PageSize分页,返回的只有第Page页的订单。

结尾贴一下自己的代码,大神请无视

package com.sat.jos;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.jd.open.api.sdk.DefaultJdClient;
import com.jd.open.api.sdk.JdClient;
import com.jd.open.api.sdk.JdException;
import com.jd.open.api.sdk.domain.order.OrderResult;
import com.jd.open.api.sdk.domain.order.OrderSearchInfo;
import com.jd.open.api.sdk.request.order.OrderSearchRequest;
import com.jd.open.api.sdk.response.order.OrderSearchResponse;
import com.sat.entity.Result_Order;
import com.sat.util.PropertiesConfig;
/**
 * 京东jos调用类
 * @author VULCAN
 *
 */
public class Jos {
    private String SERVER_URL=PropertiesConfig.readData("josapi.properties", "SERVER_URL");
    private String accessToken=PropertiesConfig.readData("josapi.properties", "accessToken");
    private String appKey=PropertiesConfig.readData("josapi.properties", "appKey");
    private String appSecret=PropertiesConfig.readData("josapi.properties", "appSecret");
    private String setOrderState=PropertiesConfig.readData("josapi.properties", "setOrderState");
    private String page=PropertiesConfig.readData("josapi.properties", "page");
    private String page_size=PropertiesConfig.readData("josapi.properties", "page_size");

    /**
     * 发送请求获取响应
     * @param MySERVER_URL
     * @param MyaccessToken
     * @param MyappKey
     * @param MyappSecret
     * @param MystarDate
     * @param MyendDate
     * @param MysetOrderState
     * @param Mypage
     * @param Mypage_size
     * @return
     */
    public OrderSearchResponse getOrderSearchResponse(String MySERVER_URL,String MyaccessToken,String MyappKey,String MyappSecret,String MystarDate,
            String MyendDate,String MysetOrderState,String Mypage,String Mypage_size){
        //创建请求
        JdClient client=new DefaultJdClient(MySERVER_URL,MyaccessToken,MyappKey,MyappSecret);       
        OrderSearchRequest request=new OrderSearchRequest();
        //开始时间
        request.setStartDate(MystarDate);
        //结束时间
        request.setEndDate(MyendDate);
        //订单状态
        request.setOrderState(MysetOrderState);
        //查询的页数
        request.setPage(Mypage);
        //每页的条数(最大page_size 100条)
        request.setPageSize(Mypage_size);
        try {
            OrderSearchResponse response=client.execute(request);
            return response;
        } catch (JdException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 根据时间获取未出库订单
     * @param endDate 结束时间
     * @param minute 时间间隔分钟
     * @return
     */
    public Result_Order getOrderByTime(String endDate,int minute){
        String orderState =setOrderState;
        return this.getOrderByTime(endDate, minute, orderState);
    }
    /**
     * 根据时间、状态获取订单
     * @param endDate
     * @param minute
     * @return
     */
    public Result_Order getOrderByTime(String endDate,int minute,String orderState){
        Result_Order result_order=new Result_Order();
        List<OrderSearchInfo> finalorderlist = new ArrayList<OrderSearchInfo>();
        //时间处理
        Calendar cal = Calendar.getInstance();
        SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String starDate="";
        if(!endDate.equals("")){
            try {
                Date end =sdf.parse(endDate);
                cal.setTime(end);
                cal.add(Calendar.MINUTE, 0-minute);
                starDate=sdf.format(cal.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        //封装返回结果
        OrderSearchResponse response=this.getOrderSearchResponse(SERVER_URL, accessToken, appKey, appSecret, 
                starDate, endDate, orderState, page, page_size);
        String code = response.getCode();
        result_order.setCode(code);
        String zhDesc = response.getZhDesc();
        result_order.setZhDesc(zhDesc);
        OrderResult or =response.getOrderInfoResult();
        int orderTotal = or.getOrderTotal();
        result_order.setOrderTotal(orderTotal);
        List<OrderSearchInfo> orderlist = or.getOrderInfoList();
        finalorderlist.addAll(orderlist);

        int pagesize = Integer.parseInt(page_size);//每页订单数

        //多页时多次请求
        if(orderTotal>pagesize){            
            int pages =1;//总页数
            if(orderTotal%pagesize>0){
                pages =orderTotal/pagesize+1;
            }else{
                pages =orderTotal/pagesize;
            }       
            for(int newpage=Integer.parseInt(page)+1;newpage<=pages;newpage++){
                String newpageString =newpage+"";
                response=this.getOrderSearchResponse(SERVER_URL, accessToken, appKey, appSecret, 
                        starDate, endDate, orderState, newpageString, page_size);               
                or =response.getOrderInfoResult();
                orderlist = or.getOrderInfoList();
                finalorderlist.addAll(orderlist);
            }       
        }

        result_order.setOrderlist(finalorderlist);
        return result_order;
    }
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
京东jos京东提供的一种云服务,包括对象存储、CDN、视频转码等功能。如果想在ThinkPHP5中使用京东jos,可以按照以下步骤操作: 1. 安装京东jos SDK 可以通过 Composer 安装京东jos SDK: ``` composer require jingdong-union/jd-union-sdk-php ``` 2. 配置应用信息 在 `config` 目录下新建 `jos.php` 文件,填写如下内容: ```php <?php return [ 'app_key' => 'your app key', 'app_secret' => 'your app secret', 'access_token' => 'your access token', 'bucket_name' => 'your bucket name', ]; ``` 其中,`app_key` 和 `app_secret` 为京东jos的应用信息,`access_token` 是访问凭证,`bucket_name` 是对象存储的桶名。 3. 使用对象存储功能 ```php <?php namespace app\index\controller; use think\Controller; use Jdcloud\Credentials\Credentials; use Jdcloud\Result; use Jdcloud\Service\OSS\OSSClient; class Index extends Controller { public function index() { // 实例化OSSClient $credentials = new Credentials(config('jos.app_key'), config('jos.app_secret')); $ossClient = new OSSClient([ 'regionId' => 'cn-north-1', 'credentials' => $credentials, ]); // 上传文件 $file = request()->file('image'); $result = $ossClient->putObject([ 'Bucket' => config('jos.bucket_name'), 'Key' => $file->getOriginalName(), 'Body' => fopen($file->getRealPath(), 'r'), ]); // 打印上传结果 dump($result->toArray()); } } ``` 以上代码演示了在 ThinkPHP5 中使用京东jos的对象存储功能,实现了上传文件的功能。其他功能的使用方法类似,只需要根据 SDK 提供的 API 进行调用即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值