公司最近在搞项目推广,要对京东金融平台做对接,于是就开始了一段神坑的道路。
京东金融的开放平台刚开始做,网上基本都很难找到资料,入住的商户也是寥寥无几,它的所有url都可以在浏览器中的打开不需要专门的开发者工具。
1.创建商户号
要在您的服务窗中使用京东金融开放产品的接口能力,您需要先去京东金融开放平台(open.jr.jd.com),在积木系统中创建登记您的积木商户号,并提交审核,审核通过后会为您生成应用唯一标识(AppID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能调用开放产品的接口能力。需要详细了解开放平台创建应用步骤请参考《京东金融开放平台积木号创建指南》。
使用场景举例:开发者可以使用该方案获取用户的openId、头像、昵称等基础信息。想要调用该接口,需要先在积木系统中申请开通积木商户号,如下图所示:
1.1 配置服务窗环境
开发者调用接口前需要先在开发者中心配置服务窗环境,如下图所示:
所需配置内容请参考:字段说明
1.2 调用接口获取用户信息
如果用户在京东金融App客户端中访问第三方网页,服务窗可以通过京东金融网页授权机制,来获取用户基本信息,进而实现业务逻辑。
具体而言,网页授权流程分为四步:
1、引导用户进入授权页面同意授权,获取code; 2、通过code换取网页授权user_token;
3、如果需要,开发者可以刷新网页授权user_token,避免过期;
4、通过网页授权user_token和openid获取用户京东金融用户信息。
关于网页授权回调域名的说明
1、在京东金融服务窗请求用户网页授权之前,开发者需要先到开放平台官网中的开发者中心页配置授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头;
2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.jd.com,配置以后此域名下面的页面http://www.jd.com/index.html
、 http://www.jd.com/error2.aspx 都可以进行OAuth2.0鉴权。但http://order.jd.com
、 http://jinku.jd.com 无法进行OAuth2.0鉴权
3、如果服务窗登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替服务窗实现网页授权即可
关于网页授权的scope的说明
1、以base为scope发起的网页授权,是用来获取进入页面的用户的基本信息。授权需要用户手动同意。
2、以white为scope发起的网页授权,是用来获取用户的小白信用信息的。这种授权同样需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的小白信用信息。
关于网页授权user_token
1、京东金融网页授权是通过OAuth2.0机制实现的,在用户授权给服务窗后,服务窗可以获取到一个网页授权特有的接口调用凭证(网页授权user_token),通过网页授权user_token可以进行用户信息接口调用,例如:获取用户小白信用信息;
1.3 用户同意授权,获取code
在确保京东金融服务窗账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的base和white),引导关注者打开如下页面:
https://open.jr.jd.com/oauth2/authorization/forward?appid=APPID&redirect_uri=REDIRECT_URI&scope=SCOPE&state=STATE
若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,京东金融会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
参考链接
Scope为white
https://open.jr.jd.com/oauth2/authorization/forward?appid=JD0000004&scope=white&redirect_uri=https://www.jd.com&state=321cba
尤其注意:跳转回调redirect_uri,应当使用https链接来确保授权code的安全性。
参数说明
下图为scope等于base时的授权页面:
1.4 用户同意授权后
如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE
code说明 :
code作为换取user_token的票据,每次用户授权带上的code将不一样,code只能使用一次,2小时未被使用自动过期。
1.5 通过code换取网页授权user_token
首先请注意,这里通过code换取的是一个特殊的网页授权user_token。服务窗可通过下述接口来获取网页授权user_token。如果网页授权的作用域为white,则本步骤中获取到网页授权user_token的同时,也获取到了openid,white式的网页授权流程即到此为止。
尤其注意:由于服务窗的AppKey和获取到的user_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新user_token、通过user_token获取用户小白信用信息等步骤,也必须从服务器发起。
请求方法
获取code后,请求以下链接获取user_token:
https://open.jr.jd.com/oauth2/code/c2t?code=CODE
参数说明
参数 是否必须 说明
code 是 填写第一步获取的code参数
返回说明
正确时返回的JSON数据包如下:
{
"result_code":0,
"result_msg":”Success”,
"signature":"",
"result_data":{
"user_token":"ACCESS_TOKEN",
"timeout":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID"
}
}
参数 描述
错误时京东金融会返回JSON数据包如下(示例为Code无效错误):
{
"result_code":1017,
"result_msg":” code失效”,
"signature":"",
"result_data":””
}
3.3 刷新user_token(如果需要)
由于user_token拥有较短的有效期,当user_token超时后,可以使用refresh_token进行刷新,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
请求方法
获取第二步的refresh_token后,请求以下链接获取user_token:
https://open.jr.jd.com/oauth2/authorization/refresh_token?appid=APPID&openid=OPENID&refresh_token=REFRESH_TOKEN
参数 是否必须 说明
返回说明
正确时返回的JSON数据包如下:
{
"result_code": 0,
"result_msg": "成功",
"signature": null,
"userToken": {
"user_token": "USERTOKEN",
"timeout": 7200,
"refresh_token": "REFRESHTOKEN",
"openid": "OPENID",
"scope": "base,white"
}
}
参数 描述
错误时京东金融会返回JSON数据包如下(示例为refresh_token不存在错误):
{
"result_code":1015,
"result_msg":"refreshTokenBean None",
"signature":null,
"userToken":null
}
- 全局返回码说明
服务窗每次调用接口时,可能获得正确或错误的返回码,开发者可以根据返回码信息调试接口,排查错误。
全局返回码说明如下:
大致的文档就是这么些了,新的平台资料太少了,而且有点很恶心的是回调域名现在这个只支持https , 所以在项目中还是要配置Nginx 转发的
整理了几百本各类技术电子书和视频课程 ,送给小伙伴们。同名公号内回【666】自行领取。和一些小伙伴们建了一个技术交流群,一起探讨技术、分享技术资料,旨在共同学习进步,如果感兴趣就扫码加入我们吧!