以下是支付宝卡包接口开发过程中需要了解的常用概念:
名称 | 描述 |
---|---|
模板/卡券模板(template) |
模板包含了开发者设计的卡券的样式、内容信息。基于此模板的样式,开发者可以向用户发放卡券,一个模板可以对应多个卡券,模板内容样式的变化会引起卡券的变化。 |
模板编号(templateId) |
模板的唯一标识,由创建模板成功后,接口返回给商户,基于此参数创建卡券。 |
卡券ID(passId) |
卡券ID,唯一代表一张卡券。可以多个卡券ID对应一个模板。由卡券创建成功后返回。 |
授权访问令牌(app_auth_token) |
开发者帮助商户发券场景,如何获取,详见“第三方应用授权”。 |
要在您的应用中使用支付宝开放产品的接口能力,您需要先去蚂蚁金服开放平台(open.alipay.com),在开发者中心中创建登记您的应用,并提交审核,审核通过后会为您生成应用唯一标识(APPID),并且可以申请开通开放产品使用权限,通过APPID您的应用才能调用开放产品的接口能力。创建应用后,请在【功能信息】中点击【添加功能】,选择【支付宝卡包】,待应用上线后,支付宝卡券的权限即可开通。需要详细了解开放平台创建应用步骤请参考《开放平台应用创建指南》。
开发者调用接口前需要先生成RSA密钥,RSA密钥包含应用私钥(APP_PRIVATE_KEY)、应用公钥(APP_PUBLIC_KEY)。生成密钥后在开放平台开发者中心进行密钥配置,配置完成后可以获取支付宝公钥(ALIPAY_PUBLIC_KEY)。详情请参考《配置应用环境》。
1. 下载服务端SDK
为了帮助开发者调用开放接口,我们提供了开放平台服务端SDK,包含JAVA、PHP和.NET三个语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的SDK并引入您的开发工程。
各语言版本服务端SDK详细使用说明,请参考《服务端SDK说明》。
2. 接口调用配置
在SDK调用前需要进行初始化,以Java代码为示例如下:
AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE);
关键参数说明:
配置参数 | 示例值解释 | 获取方式/示例值 |
---|---|---|
URL | 支付宝网关(固定) | https://openapi.alipay.com/gateway.do |
APPID | APPID 即创建应用后生成 | 获取见上面创建应用并获取APPID |
APP_PRIVATE_KEY | 开发者私钥,由开发者自己生成 | 获取详见上面配置密钥 |
FORMAT | 参数返回格式,只支持json | json(固定) |
CHARSET | 编码集,支持GBK/UTF-8 | 开发者根据实际工程编码配置 |
ALIPAY_PUBLIC_KEY | 支付宝公钥,由支付宝生成 | 获取详见上面配置密钥 |
SIGN_TYPE | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
创建卡券模板
>>模板设计:推荐使用卡券平台(https://alipassprod.alipay.com),在线编辑获取JSON模板
详细可参见:支付宝卡包API详细说明
>>接口列表:创建卡券模板接口(alipay.pass.template.add)
>>SDK调用示例:
/** * 新建模板 * appAuthToken如ISV代替商家调用接口,需将商户授权后获取的app_auth_token带上;如商家自己调用,则传null。 * bizContent 因该接口业务参数复杂,请详见接口文档 */ AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayPassTemplateAddRequest request = new AlipayPassTemplateAddRequest(); request.putOtherTextParam("app_auth_token", appAuthToken); request.setBizContent(bizContent); AlipayPassTemplateAddResponse response=alipayClient.execute(request);
System.out.print(response.getBody());//根据业务处理response
>>app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
>>bizContent Json串示例:
"{\"unique_id\":\"143512639346821\"," //支付宝对该参数的请求有唯一性校验,请保证每次请求该参数唯一 + "\"tpl_content\":" + "{\"logo\":\"https://alipass.alipay.com//temps/free/logo.png\"," + "\"strip\":\"https://alipass.alipay.com//temps/free/strip.png\"," + "\"icon\":\"http://alipassprod.test.alipay.net/temps/free/icon.png\"," + "\"content\":{" + "\"evoucherInfo\":" + "{\"title\":\"风情优惠券\"," + "\"type\":\"coupon\"," + "\"product\":\"free\"," + "\"startDate\":\"$validStartDate$\"," + "\"endDate\":\"$validEndDate$\"," + "\"operation\":" + "[{\"format\":\"barcode\",\"message\":\"$code$\",\"messageEncoding\":\"UTF-8\",\"altText\":\"$code$\"}]," + "\"einfo\":{" + "\"logoText\":\"$logoText$\"," + "\"headFields\":" + "[{\"key\":\"status\",\"label\":\"状态\",\"value\":\"$useStateDesc$\",\"type\":\"text\"}]," + "\"primaryFields\":" + "[{\"key\":\"strip\",\"label\":\"\",\"value\":\"$discountInfo$\",\"type\":\"text\"}]," + "\"secondaryFields\":" + "[{\"key\":\"validDate\",\"label\":\"有效期至:\",\"value\":\"$validEndDate$\",\"type\":\"text\"}]," + "\"auxiliaryFields\":[]," + "\"backFields\":" + "[{\"key\":\"description\",\"label\":\"详情描述\",\"value\":\"1.该优惠有效期:截止至2014年06月18日;\n2.凭此券可以享受以下优惠:\n享门市价优惠\n不与其他优惠同享。详询商家。\",\"type\":\"text\"}," + "{\"key\":\"shops\",\"label\":\"可用门店\",\"value\":\"\",\"type\":\"text\"}," + "{\"key\":\"disclaimer\",\"label\":\"负责声明\",\"value\":\"除特殊注明外,本优惠不能与其他优惠同时享受;本优惠最终解释权归商家所有,如有疑问请与商家联系。提示:为了使您得到更好的服务,请在进店时出示本券。\",\"type\":\"text\"}" + "]}," + "\"remindInfo\":{\"offset\":\"2\"}}," + "\"merchant\":{\"mname\":\"hodewu\",\"mtel\":\"\",\"minfo\":\"\"}," + "\"platform\":{\"channelID\":\"$channelID$\",\"webServiceUrl\":\"\"}," + "\"style\":{\"backgroundColor\":\"RGB(255,126,0)\"}," + "\"fileInfo\":" + "{\"formatVersion\":\"2\",\"canShare\":true,\"canBuy\":false,\"canPresent\":true,\"serialNumber\":\"$serialNumber$\",\"supportTaxi\":\"true\",\"taxiSchemaUrl\":\"alipays://platformapi/startapp?appId=20000130&sourceId=20000030&showTitleBar=YES&showToolBar=NO&showLoading=NO&safePayEnabled=YES&readTitle=YES&backBehavior=back&url=/www/index.html\"}," + "\"appInfo\":" + "{\"app\":{},\"label\":\"\",\"message\":\"\"}," + "\"source\":\"alipassprod\"," + "\"alipayVerify\":[]" + "}}}"
说明:1.模板中的自定义参数以双$符号标志,即$serialNumber$表示自定义参数名为serialNumber,供发放卡券时使用
2.unique_id参数支付宝有唯一性校验,请保证每次请求该值唯一;
>>API详细文档:创建卡券模板接口
发放卡券
>>接口列表:发放卡券接口(alipay.pass.instance.add)
>>SDK调用示例:
/** * 发放卡券 * appAuthToken如ISV代替商家调用接口,需将商户授权后获取的app_auth_token带上;如商家自己调用,则传null。 * bizContent 因该接口业务参数复杂,请详见接口文档 */ AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayPassInstanceAddRequest request = new AlipayPassInstanceAddRequest(); request.putOtherTextParam("app_auth_token", appAuthToken); request.setBizContent(bizContent); AlipayPassInstanceAddResponse response = alipayClient.execute(request);
System.out.print(response.getBody());//根据业务处理response
>>app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
>>bizContent Json串示例:
"{\"recognition_type\":\"1\"," + "\"tpl_id\":\"2016072715135409252622447\"," + "\"recognition_info\":{\"partner_id\":\"2088**********10\"," + "\"out_trade_no\":\"xiaomoxiaomotest7629500\"}," + "\"tpl_params\":" + "{" + "\"validStartDate\":\"2016-06-30 20:00:00\"," + "\"validEndDate\":\"2016-12-30 20:00:00\"," + "\"channelID\":\"2088**********10\"," + "\"discountInfo\":\"凭此券即可打8.5折\"," + "\"code\":\"20160725762587i\"," +"\"useStateDesc\":\"可使用\"," +"\"logoText\":\"四季风情85折优惠券\"," + "\"serialNumber\":\"xm433367366244615532\"}}";
说明:1.tpl_params中的json节点即为模板创建时设置的自定义参数(即模板中定义的$xxxx$),每次发券可以自己定义内容,且其中的serialNumber支付宝有唯一性校验,每次请求请保证唯一性,不要重复
2.tpl_id:模板创建接口请求成功后获取的模板ID,即步创建卡券模板中获取
3.recognition_info:真实存在的支付宝交易,需要提供该交易的外部订单号和对应的商户pid(partner)(partner获取路径需要补充)
4.channelID:可设置为APPID(从创建应用处获取)或者pid(partner获取路径需要补充)
>>API详细文档:发放卡券接口
核销卡券
>>接口列表:更新卡券接口(alipay.pass.instance.update)
>>SDK调用示例
/** * * appAuthToken如ISV代替商家调用接口,需将商户授权后获取的app_auth_token带上;如商家自己调用,则传null。 * bizContent 因该接口业务参数复杂,请详见接口文档 */ AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayPassInstanceUpdateRequest request = new AlipayPassInstanceUpdateRequest(); request.putOtherTextParam("app_auth_token", appAuthToken); request.setBizContent(bizContent); AlipayPassInstanceUpdateResponse response = alipayClient.execute(request);
System.out.print(response.getBody());//根据业务处理response
>>app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
>>bizContent Json串示例:
"{\"status\":\"USED\"," + "\"channel_id\":\"2088**********10\"," + "\"serial_number\":\"xm433367366244615532\"," + "\"tpl_params\":" + "{\"useStateDesc\":\"已使用\"}" + "}"
说明:1.channl_id取发放卡券时候设置的值
2.serial_number取发放成功的卡券的值
>>API详细文档:更新卡券接口
卡券模板更新
接口列表:更新模板接口(alipay.pass.template.update)
>>SDK调用示例:
/** * 更新模板 * appAuthToken如ISV代替商家调用接口,需将商户授权后获取的app_auth_token带上;如商家自己调用,则传null。 * bizContent 因该接口业务参数复杂,请详见接口文档 */ AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); AlipayPassTemplateUpdateRequest request = new AlipayPassTemplateUpdateRequest(); request.putOtherTextParam("app_auth_token", appAuthToken); request.setBizContent(bizContent); AlipayPassTemplateUpdateResponse response = alipayClient.execute(request); System.out.print(response.getBody());//根据业务处理response
>>app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
>>bizContent Json串示例:
"{\"tpl_id\":\"2016071516121584501489290\"," //支付宝对该参数的请求有唯一性校验,请保证每次请求该参数唯一 + "\"tpl_content\":" + "{\"logo\":\"https://alipass.alipay.com//temps/free/logo.png\"," + "\"strip\":\"https://alipass.alipay.com//temps/free/strip.png\"," + "\"icon\":\"http://alipassprod.test.alipay.net/temps/free/icon.png\"," + "\"content\":" + "{\"evoucherInfo\":" + "{\"title\":\"萧萧沫沫优惠券\",\"type\":\"coupon\",\"product\":\"free\",\"startDate\":\"$validStartDate$\",\"endDate\":\"$validEndDate$\",\"operation\":" + "[{\"format\":\"barcode\",\"message\":\"45612346579465\",\"messageEncoding\":\"UTF-8\",\"altText\":\"45612346579465\"}]," + "\"einfo\":{" + "\"logoText\":\"$logoText$\"," + "\"headFields\":" + "[{\"key\":\"status\",\"label\":\"状态\",\"value\":\"$useStateDesc$\",\"type\":\"text\"}]," + "\"primaryFields\":" + "[{\"key\":\"strip\",\"label\":\"\",\"value\":\"$discountInfo$\",\"type\":\"text\"}]," + "\"secondaryFields\":" + "[{\"key\":\"validDate\",\"label\":\"有效期至:\",\"value\":\"$validEndDate$\",\"type\":\"text\"}]," + "\"auxiliaryFields\":[]," + "\"backFields\":" + "[{\"key\":\"description\",\"label\":\"详情描述\",\"value\":\"1.该优惠有效期:截止至2014年06月18日;\n2.凭此券可以享受以下优惠:\n享门市价优惠\n不与其他优惠同享。详询商家。\",\"type\":\"text\"}," + "{\"key\":\"shops\",\"label\":\"可用门店\",\"value\":\"\",\"type\":\"text\"}," + "{\"key\":\"disclaimer\",\"label\":\"负责声明\",\"value\":\"除特殊注明外,本优惠不能与其他优惠同时享受;本优惠最终解释权归商家所有,如有疑问请与商家联系。提示:为了使您得到更好的服务,请在进店时出示本券。\",\"type\":\"text\"}" + "]}," + "\"remindInfo\":" + "{\"offset\":\"2\"}}," + "\"merchant\":{\"mname\":\"hodewu\",\"mtel\":\"\",\"minfo\":\"\"}," + "\"platform\":{\"channelID\":\"$channelID$\",\"webServiceUrl\":\"\"}," + "\"style\":{\"backgroundColor\":\"RGB(255,126,0)\"}," + "\"fileInfo\":{\"formatVersion\":\"2\",\"canShare\":true,\"canBuy\":false,\"canPresent\":true,\"serialNumber\":\"$serialNumber$\",\"supportTaxi\":\"true\",\"taxiSchemaUrl\":\"alipays://platformapi/startapp?appId=20000130&sourceId=20000030&showTitleBar=YES&showToolBar=NO&showLoading=NO&safePayEnabled=YES&readTitle=YES&backBehavior=back&url=/www/index.html\"}," + "\"appInfo\":{\"app\":{},\"label\":\"\",\"message\":\"\"}," + "\"source\":\"alipassprod\"," + "\"alipayVerify\":[]" + "}}}"
说明:1.tpl_id即为需要修改的模板id,从创建模板接口中调用成功之后获取;
2.tpl_content即为创建模板是的json内容,并修改其中需要更新的节点和内容;
>>API详细文档:更新模板接口
接口调用流程
支付宝卡券产品包含以下接口:
接口名称 | 接口描述 |
---|---|
新建模板 |
创建卡券的模板,卡券的样式、内容信息通过该接口提交到支付宝,支付宝会生成模板ID反馈给开发者,用于后续的更新和发布。 |
更新模板 |
对于已经创建的模板,如果需要修改模板内容,可通过该接口修改,适用于修改模板内容。对于已经发布的模板,如果需要修改内容并同步到用户端,则应使用更新卡券接口。 |
发布卡券 |
卡券模板生成后,如需将卡券发布给对应的用户,则调用此接口。 |
更新卡券 |
对于已经发布的卡券,如需更新内容,可通过此接口更新,主要用于更新卡券的使用状态。 |
支付宝卡券整体接口调用流程: