最近公司计划对接支付宝会员卡功能,而任务恰巧由领导安排给我这边,小弟之前也未做过支付宝接口,研究了三天,终于将支付宝会员卡API接口大体上调通了,现将其整理下,以供参考。
蚂蚁金服开发平台-商户会员卡文档地址:https://docs.open.alipay.com/251
支付宝会员卡接口我大体上分为四块:
1、会员卡模板管理:包括会员卡模板创建,会员卡模板查询,会员卡模板修改
2、会员卡开卡模块:会员卡开卡表单模板配置,获取会员卡领卡投放链接,查询用户提交的开卡表单数据信息,会员卡的增删改查(会员卡开卡接口,会员卡查询接口,会员卡更新,会员卡删除)
3、会员卡消费记录同步
调用接口直接使用支付宝提供的SDK,下来来针对这四块分别说明。
会员卡模板管理
这块儿需要注意的点是:卡模板的栏位信息中的自定义栏位的展现形式如果是openWeb,必须要填写more_info字段的信息,主要是url的信息需要填写。这儿打开二级页面的展现方式我这边没用到,就没写,有兴趣的同学可以自己尝试。支付宝文档还是比较全,凡是按照支付宝标准接口文档说明来开发,大问题应该没。注意这个接口安接口文档上来说,logo_id和background_id必填,并且其ID是图片资料上传接口返回的结果图片image_id,但我开始几次调用的时候都是随便传的值,也调用成功并且没看出来哪里受影响(貌似会员卡开卡后用户支付宝上显示的会员卡哪里是张灰色的图片),我也就不纠结这个了。直接上一段我调用修改卡模板的代码:
因为我这里是写的示例,所有构建的实体对象的字段都是直接写死的。实际开发中一般都是从配置或其他来源的数据读取的值。
/// <summary> /// 卡模板修改 /// /// </summary> public void demoCardModify() { IAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", APPID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false); AlipayMarketingCardTemplateModifyRequest request = new AlipayMarketingCardTemplateModifyRequest(); CardTemplateModify entity = getModifyParams(); TemplateFieldRuleDTO fieldDto = new TemplateFieldRuleDTO(); fieldDto.field_name = "OpenDate"; fieldDto.rule_name = "DATE_IN_FUTURE"; fieldDto.rule_value = "10m"; entity.field_rule_list.Add(fieldDto); request.BizContent = Newtonsoft.Json.JsonConvert.SerializeObject(entity); ; AlipayMarketingCardTemplateModifyResponse response = client.Execute(request); Console.WriteLine(response.Body); if (!string.IsNullOrEmpty(response.Body)) WriteFileLog.WriteLog("修改会员卡模板返回信息:" + response.Body); } /// <summary> /// 构造修改的实体 /// </summary> /// <returns></returns> public CardTemplateModify getModifyParams() { CardTemplateModify entity = new CardTemplateModify(); entity.request_id = DateTime.Now.ToString("yyyyMMddHHmmss") + "000001"; entity.write_off_type = "qrcode"; entity.template_id = template_id; entity.template_style_info = new TemplateStyleInfoDTO(); entity.template_style_info.card_show_name = "五岳天下秀"; entity.template_style_info.logo_id = "VY3VJvlATW6TrUs_6Ik_gQAAACMAAAAA"; entity.template_style_info.color = "rgb(55,112,179)"; entity.template_style_info.background_id = "VY3VJvlATW6TrUs_6Ik_gQAAACMAAAAA"; entity.template_style_info.bg_color = "rgb(55,112,179)"; entity.template_style_info.front_text_list_enable = false; entity.column_info_list = new List<TemplateColumnInfoDTO>(); TemplateColumnInfoDTO columnDto = new TemplateColumnInfoDTO(); //columnDto.code = "BENEFIT_INFO"; columnDto.code = "BENEFIT_INFO"; columnDto.operate_type = "staticinfo"; columnDto.title = "优惠大礼"; columnDto.value = "优惠礼包大放送"; entity.column_info_list.Add(columnDto); TemplateColumnInfoDTO columnDto1 = new TemplateColumnInfoDTO(); columnDto1.code = "TELEPHONE"; columnDto1.operate_type = "staticinfo"; columnDto1.title = "客服热线"; columnDto1.value = "4006-999-999"; entity.column_info_list.Add(columnDto1); TemplateColumnInfoDTO columnDto2 = new TemplateColumnInfoDTO(); columnDto2.code = "MEMO"; columnDto2.operate_type = "staticinfo"; columnDto2.title = "使用说明"; columnDto2.value = "仅限支付宝支付"; entity.column_info_list.Add(columnDto2); //TemplateColumnInfoDTO columnDto3 = new TemplateColumnInfoDTO(); //columnDto3.code = "WAIBULINK"; //columnDto3.operate_type = "openWeb"; //必须要填写more_info信息 //columnDto3.title = "官网地址1"; //columnDto3.value = "http://www.baidu.com"; //columnDto3.more_info = new MoreInfoDTO(); //columnDto3.more_info.url = "http://www.baidu.com"; //columnDto3.more_info.title = "官网地址"; ////columnDto3.more_info.Params = new Params(); //columnDto3.more_info.Params = "{}"; //这里大小写 //entity.column_info_list.Add(columnDto3); entity.field_rule_list = new List<TemplateFieldRuleDTO>(); TemplateFieldRuleDTO fieldDto = new TemplateFieldRuleDTO(); fieldDto.field_name = "Balance"; fieldDto.rule_name = "CONST"; fieldDto.rule_value = "500"; entity.field_rule_list.Add(fieldDto); return entity; //序列化Json串 //return Newtonsoft.Json.JsonConvert.SerializeObject(entity); }