ISV开发者配置好卡片模板后,要给真正的用户发送卡片数据,需要做以下几件事情:
1,需要通过OAuth2协议,得到用户的授权。详细见下面文档,2种方式只需要选择1种即可:
服务端web应用打通用户免登授权:
//open.yunos.com/doc/detail?spm=a2c01.7698725.0002.23.oabPmZ&documentId=102635
客户端native应用打通用户免登授权:
//open.yunos.com/doc/detail?spm=a2c01.7698725.0002.21.9mVk4j&documentId=103430
2,拿到用户授权的access_token后,调用开放平台入口网关API,发送卡片数据。
说明:以下用java代码作为范例说明。
注:下面文档中演示的代码,只是示例代码,各种异常情况的处理,请开发者自己完善。
1,检查是否有API接口权限。
如下图所示:
一般开发者入驻后,此处默认已获得。如果未获得,则点击申请开通:
2,下载SDK:
在开放门户中,点SDK下载菜单,出现下面的页面:
注意:下载SDK之前,必须申请好API的权限,否则下载的SDK包中将没有对应的API类。
1,判断用户是否登陆开发者的网站。如果没有登陆,则拼接授权,重定向到淘宝开放平台登陆授权页。
记得填写好回调地址,这个回调地址和ISV入驻时填写的域名要保持一致。
//open.yunos.com/isv/info?spm=a2c01.7698725.0001.3.2oHQ0V
回调地址即上面页面中的域名字段。
如下代码所示:
Cookie cookie = CookieUtil.getCookieByName(httpServletRequest, "username"); if (cookie == null) { String redirectUrl = "https://oauth.taobao.com/authorize?response_type=code&client_id=23172651&redirect_uri=http://yunos100.wx.jaeapp.com/doLogin.do&state=1001&view=web"; resp.sendRedirect(redirectUrl); return; }else{ chain.doFilter(request, response); } |
2,开发者在回调地址的实现类中,获取临时code,然后用这个调用开放平台接口换取access_token。
这里用到开放平台提供的SDK。
String code = req.getParameter("code"); String error = req.getParameter("error"); if (code == null) { String url = "https://oauth.taobao.com/token"; String appkey = "23172651";//替换为开发者自己的appkey String secret = "************";//替换为开发者自己的secret String redirect = "http://yunos100.wx.jaeapp.com/index.jsp"; Map<String,String> props = new HashMap<String,String>(); props.put("grant_type", "authorization_code"); props.put("code", code); props.put("client_id", appkey); props.put("client_secret",secret); props.put("redirect_uri", redirect); try { String json = WebUtils.doPost(url, props, 3000, 3000); Map result = JacksonUtil.fromJsonStringToMap(json); String access_token = (String) result.get("access_token"); String taobao_user_nick = (String) result.get("taobao_user_nick"); CookieUtil.addCookie(resp, "username", taobao_user_nick, -1);//设置cookie CacheService cacheService = CacheServiceFactory.getCacheService("baozi100"); cacheService.put(taobao_user_nick, access_token);//缓存access_token resp.sendRedirect(redirect); } catch (IOException e) { logger.error(e.getMessage(),e); } |
3,用缓存的access_token调用开放平台提供的接口。
详细见下面API文档地址:
//open.taobao.com/apidoc/api.htm?spm=a219a.7386789.1998342952.1.HPz25u&path=cid:20518-apiId:24457
JAVA API调用范例:
String appkey = "23172651";//替换为开发者自己的appKey String secret = "****************";//替换为开发者自己的appSecret String url="http://gw.api.taobao.com/router/rest"; TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); YunosCloudcardUsercardAddRequest yunosCloudcardUsercardAddRequest= new YunosCloudcardUsercardAddRequest(); HashMap<String,String>map = new HashMap<String,String>(); map.put("logoText", "C23 草莓/巧克力圣代"); map.put("secondLogoText", "C23 草莓/巧克力圣代"); map.put("startDate",DateUtil.getCurrentTimeString()); map.put("endDate", "2016-07-06 20:57:46"); map.put("limit", "仅限店内使用"); map.put("expirationDate", "2016-07-06 20:57:46"); map.put("status","有效"); map.put("yh_url", "http://yunos100.wx.jaeapp.com/kfc/20150427155642_6504.jpg"); map.put("exchangeCode", "C23"); String json = JacksonUtil.toJson(map); CardModel cardModel = new CardModel(); cardModel.setContent(json); cardModel.setTplId("1500000000012"); yunosCloudcardUsercardAddRequest.setCardModel(cardModel); try { YunosCloudcardUsercardAddResponse response = client.execute(yunosCloudcardUsercardAddRequest,access_token); data = response.getData(); message=response.getErrorCode(); success=true; } catch (ApiException e) { logger.error(e.getMessage(),e); success=false; message="调用API新增卡片出错"; } |