本文档展示了如何从零开始,使用蚂蚁金服开放平台服务端SDK快速接入媒体类生活号产品,完成与支付宝对接的部分。
注意: 文档中的代码示例和Demo是用来阐述API基本使用方法的,仅针对大众场景。
首先请确认是否需要通过接口大批量创建生活号账号:
1.不需要:
请登录生活号后台入驻,一个支付宝账号可以创建5个生活号。
创建成功以后,登录蚂蚁金服开放平台(open.alipay.com),在管理中心下可以查找到创建成功的生活号应用,并记录APPID,在代码中使用。
2.需要:
要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在管理中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能调用开放产品的接口能力。需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》。
把该APPID提供给对应的技术支持或PD申请开通相关接口权限。
开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台管理中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详细步骤请参考《配置应用环境》。
为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。
在使用SDK调用具体API前,需要先配置通用接入参数:
参数名称 | 参数说明 |
---|---|
APP_ID | 开放平台应用的APPID,详见创建应用并获取APPID |
APP_PRIVATE_KEY | 开发者应用私钥,详见配置密钥 |
CHARSET | 请求和签名使用的字符编码格式,支持GBK和UTF-8 |
ALIPAY_PUBLIC_KEY | 支付宝公钥,详见配置密钥 |
sign_type | 签名类型,RSA或RSA2,需要与开放平台配置的公钥匹配 |
然后,使用上述接入参数初始化AlipayClient:
1
|
AlipayClient alipayClient =
new
DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do"
,APP_ID,APP_PRIVATE_KEY,
"json"
,CHARSET,ALIPAY_PUBLIC_KEY,sign_type);
|
接下来,就可以用alipayClient来调用具体的API了。alipayClient只需要初始化一次,后续调用不同的API都可以使用同一个alipayClient对象。
生活号产品共提供4个接口,分别为:
创建生活号接口:alipay.open.public.life.account.create
发送生活号消息接口:alipay.open.public.life.msg.send
修改生活号接口:alipay.open.public.life.account.modify (未发布)
撤回生活号消息接口:alipay.open.public.life.msg.recall
接口名称 | 接口功能 | 入参 | 出参 | 备注 |
---|---|---|---|---|
alipay.open.public.life.account.create | 新建一个生活号 | 1. 被代理生活号:alipay_uid 2. 生活号名称:life_account_name 3. 生活号二级分类:idcatagory_id 4. 简介:content 5. 客服电话:customer_tel 6. 头像图片:logo 7. 背景图片:background 8. 联系人电话 contact_tel 9. 联系人邮箱contact_email |
1. 创建的生活号id:public_id 2. 代理授权:token 3. 刷新令牌 refresh_token 4. 过期时间 expire_time |
|
alipay.open.public.life.msg.send | 发送一条生活号消息 | 1. 生活号授权token:app_auth_token 2. 生活号消息类型:msg_type 3. 消息标题:title(不超过30字) 4. 消息摘要:desc(不超过50字) 5. 消息封面图:cover 6. 视频链接地址:video_url 7. 视频时长:video_length 8. 视频大小:video_size 9. 消息正文:content 10. 原文跳转URL:raw_url 11. 消息分类:category 12. 消息描述信息:source_ext_info 13. 来源方消息唯一id:unique_msg_id |
生活号消息id:messageId(生活号消息唯一标识) | |
alipay.open.public.life.account.modify | 修改生活号信息 | 1. 生活号授权token:app_auth_token 2. 头像图片:logo 3. 封面图片:background 4. 简介:content(长度小于200字) |
修改结果: result | 本接口每月最多仅能调用一次 |
alipay.open.public.life.msg.recall | 撤回一条生活号消息 | 1. 生活号授权token:app_auth_token 2. 生活号消息id:messageId |
撤回结果:status |
上表中入参加粗字段为必填字段,具体接口文档详见API目录。
如果无需创建生活号,只需调试发送及撤销接口。
创建生活号接口,创建成功后会返回token,在调用发送接口或撤销接口时,需要传递对应token,使支付宝识别是哪个生活号发送的。
描述 | 编码 | 说明 |
---|---|---|
财经 | c001 | 包含财经要闻、投资理财指南等内容 |
科技 | c002 | 包含科技新闻、互联网公司动向、科学探索等内容 |
数码 | c003 | 包含手机、电脑、平板、VR等数码设备、消费、点评内容 |
体育 | c004 | 包含体育新闻、赛事报道、体育明星动向、赛事分析等内容 |
运动 | c005 | 包含个人运动、健身、体育锻炼的科普、指南、课程等内容 |
娱乐综艺 | c006 | 包含娱乐八卦、明星动态、综艺节目、美女帅哥等内容 |
美食 | c007 | 包含探店、烹饪、烘焙、营养膳食等内容 |
时尚 | c008 | 包含穿搭、美妆、风物、潮流、街拍、网红等内容 |
旅行 | c009 | 包含境内外旅游攻略、排行榜、目的地介绍等内容 |
教育 | c010 | 包含k12、英语、成人、职业培训等教育内容 |
游戏 | c011 | 包含游戏攻略、游戏发行、游戏视频、玩家动态等内容 |
汽车 | c012 | 包含购车指南、养车攻略等内容 |
养生 | c013 | 包含身体保健、膳食调理、生活习惯等内容(严格禁止药物介绍和医院介绍) |
电影 | c014 | 包含电影发行、影评、电影剪辑、影视特效、电影节等内容 |
电视剧 | c015 | 包含流行电视剧、剧评、电视剪辑等内容 |
音乐 | c016 | 包含音乐分析、音乐榜单、音乐节、音乐奖项新闻等内容 |
摄影 | c017 | 包含摄影技巧、摄影作品、摄影设备等内容 |
艺术 | c018 | 包含文学、绘画、设计、乐器、雕塑等内容 |
情感 | c019 | 包含婚姻、两性、家庭、伦理等内容 |
宠物 | c020 | 包含养宠技巧、宠物趣图、宠物食品等内容 |
动漫 | c021 | 包含动画、漫画、周边产品、动漫节、动漫作者采访等内容 |
星座 | c022 | 包含星座、占卜、运势等内容 |
育儿 | c023 | 包含备孕、孕妇、生子、产后护理、婴幼儿护理等内容 |
搞笑 | c024 | 主要为搞笑视频 |
房产 | c025 | 包含地产新闻、最新国家政策、楼市走势分析、装修装潢、家居软装等内容 |
2.消息正文content样例:
<p>明天就是5月8日,是今年的母亲节了。我们每个人的长相不同,身份不同,梦想不同,可是我们相同的是都有一位生下我们的伟大的母亲!</p> <p><br></p> <p><img src="https://t.alipayobjects.com/images/publichome/T16P8oXlhdXXcUQpbX"></p> <p><img src="https://t.alipayobjects.com/images/publichome/T1ORhoXd8XXXcUQpbX"></p> <p><br></p> <p><img src="https://t.alipayobjects.com/images/publichome/T1dlhoXghXXXcUQpbX"></p> <a class="author-info" href="javascript:void(0)"> <span class="title"> <span class="logo" style="background-image: url(https://os.alipayobjects.com/rmsportal/HARMCZNAKsXFMmw.png);"></span> <span class="name">毒蛇电影</span> </span> <span class="desc">毒蛇影院以最快的速度为你提供最新电视剧以及最热门的好看的电视剧,电影,综艺,动漫等...新浪微博账号:@mingricaijing</span> </a>
3.java版本SDKalipay.open.public.life.msg.send接口调用示例:
// 支付宝SDK调用客户端调用工厂类 public class AlipayAPIClientFactory{ // 获取ISV调用客户端 public static AlipayClient getAlipayISVClient(String appId){ //AlipayISVEnvConstant.ALIPAY_GATEWAY:**支付宝网关地址**(线上:https://openapi.alipay.com/gateway.do) //AlipayISVEnvConstant.APP_ID:**外部商户应用id** //AlipayISVEnvConstant.PRIVATE_KEY:**外部商户应用私钥** //AlipayServiceEnvConstants.UTF_CHARSET:utf-8 return new DefaultAlipayClient(AlipayISVEnvConstant.ALIPAY_GATEWAY, AlipayISVEnvConstant.APP_ID, AlipayISVEnvConstant.PRIVATE_KEY, "json", AlipayServiceEnvConstants.UTF_CHARSET); } } 3.java版本SDKalipay.open.public.life.msg.send接口调用示例: /** * 生活号消息接口实现 * * @author xuzeng.xz * @version $Id: AlipayOpenPublicLifeMsgFacadeImpl.java, v 0.1 2016年4月29日 下午8:58:39 xuzeng.xz Exp $ */ public class AlipayOpenPublicLifeMsgFacadeImpl implements AlipayOpenPublicLifeMsgFacade { @Override public String send(String appId, String biz_content) { // 取自创建生活号接口返回值,形如 String appAuthToken = "201509BBdcba1e3347de4e75ba3fed2c9abebE36"; // 初始化SDK调用客户端 AlipayClient alipayClient = AlipayAPIClientFactory.getAlipayISVClient(appId); /** * 由于app_auth_token如果间隔一年不使用,会自动失效的 * 若无使用场景,建议定期刷新;如果使用,则自动续命一年 * */ if(间隔一段时间未使用app_auth_token发送消息){ // 设置刷新应用授权令牌Request类, refresh_token使用alipay.open.public.life.account.create接口返回值 AlipayOpenAuthTokenAppRequest authRequest = new AlipayOpenAuthTokenAppRequest(); request.setBizContent("{\"grant_type\":\"refresh_token\",\"refresh_token\":\"201509BBdcba1e3347de4e75ba3fed2c9abebE36\"}"); // 调用刷新应用授权令牌 AlipayOpenAuthTokenAppResponse authResponse = alipayClient.execute(authRequest); // 获取刷新后的令牌 appAuthToken = authResponse.getAppAuthToken(); } // 调用生活号消息发送接口 AlipayOpenPublicLifeMsgSendRequest request = new AlipayOpenPublicLifeMsgSendRequest(); // 填充app_auth_token request.putOtherTextParam("app_auth_token", appAuthToken); // 图文类型消息为IMAGE-CONTENT,视频类消息为VIDEO request.setMsgType("VIDEO"); request.setUniqueMsgId("2016042810221362"); request.setTitle("杭州天气预报"); request.setDesc("多云转晴,13-21°"); FileItem Cover = new FileItem("/home/admin/res/LifeMsgCover.png"); request.setCover(Cover); request.setContent("多云转晴,10°-21°"); request.setRawUrl("https://open.alipay.com/platform/home.htm"); request.setCategory("天气,杭州"); request.setVideoUrl("http://cloud.video.taobao.com/play/u/693005635/e/1/t/1/p/1/28630973.swf"); request.setVideoLength("36"); request.setVideoSize("1024"); JSONObject source_ext_info = new JSONObject(); source_ext_info.put("keyword_list", "娱乐|财经"); source_ext_info.put("comment", "100000"); source_ext_info.put("reward", "1000000"); source_ext_info.put("is_recommended", "true"); source_ext_info.put("is_news", "true"); source_ext_info.put("read", "100000"); source_ext_info.put("like", "100000"); source_ext_info.put("is_hot", "true"); source_ext_info.put("share", "10000"); source_ext_info.put("deadline", "2016.04.10 16:50:00"); request.setSourceExtInfo(source_ext_info.toJSONString()); try { // 发送生活号消息 AlipayOpenPublicLifeMsgSendResponse response = alipayClient.execute(request); // 发送成功 if (null != response && response.isSuccess()) { // 获取生活号消息id String lifeAPPMsgId = response.getAlipayMsgId(); // TODO 记录生活号消息id } // 发送失败 else { LoggerUtil.warn(LOGGER, response); } } catch (Exception e) { LoggerUtil.error(LOGGER, String.format("AlipayOpenPublicLifeMsgSender接口调用异常,request:%s", request), e); } } } // 生活号消息撤回 public class AlipayOpenPublicLifeMsgRecallSender implements RequestSender { @Override public String send(String appId, String biz_content) { String msg = ""; String cover = ""; try { // 调用生活号消息撤回接口 AlipayOpenPublicLifeMsgRecallRequest request = new AlipayOpenPublicLifeMsgRecallRequest(); // 设置oauthToken request.putOtherTextParam("app_auth_token", appAuthToken); String msgId = (String) req.get("message_id"); JSONObject reqJsonObject = new JSONObject(); reqJsonObject.put("message_id", msgId); request.setBizContent(reqJsonObject.toJSONString()); try { // 商户自己发送 // alipayClient = AlipayAPIClientFactory.getAlipayClient(appId); AlipayOpenPublicLifeMsgRecallResponse response = alipayClient.execute(request); if (null != response && response.isSuccess()) { msg = response.getBody(); LoggerUtil.info(LOGGER, AMPLUQ + "成功 : response = " + response.getBody() + ",cover:" + cover); } else { msg = AMPLUQ + "失败 :response = " + response.getBody(); LoggerUtil.warn(LOGGER, msg); } } catch (Exception e) { LoggerUtil.error(LOGGER, String.format("AlipayOpenPublicLifeMsgRecallSender接口调用异常,request:%s", request), e); msg = e.toString(); } } catch (Exception e) { LoggerUtil.error(LOGGER, String.format( "AlipayOpenPublicLifeMsgRecallSender接口调用异常,biz_content:%s", biz_content), e); msg = e.toString(); } return msg + ", cover:" + cover; } }