商户会员卡模板创建一直持续了大半个月的时间,天天与支付宝的技术进行沟通,终于创建成功了,这里Mark一下。

1. 构建模板参数

下面的模板参数中,有许多前面加了注释符号,基本都是可选参数,而且容易导致报 “入参错误” 的参数,如果您有需要,请自行尝试或联系支付宝技术客服。

/*** @todo: 组建 会员卡模板 相关参数数组* @return array*/
public function addMarketCardJson(){
$json_data = array();
$json_data['request_id'] = date('YmdHis').mt_rand(10000,99999);
$json_data['card_type'] = 'OUT_MEMBER_CARD';
$json_data['biz_no_prefix'] = 'prex';
$json_data['biz_no_suffix_len'] = '10';
$json_data['write_off_type'] = 'qrcode'; #qrcode: 二维码 dqrcode: 动态二维码 barcode: 条码 dbarcode: 动态条码 text: 文本
$json_data['template_style_info']['card_show_name'] = '高端会员卡';
$json_data['template_style_info']['logo_id'] = 'YS6zsqoES5iHcD4uGwrP6QAAACMAAQED';  # logo 上传后的ID 1M以内,格式bmp、png、jpeg、jpg、gif; 尺寸不小于500*500px的正方形; 请优先使用商家LOGO;
$json_data['template_style_info']['color'] = 'rgb(55,112,179)'; #卡片背景色
$json_data['template_style_info']['background_id'] = '1BPt1AVNQnGAkntb2PFw3QAAACMAAQED'; # 上传背景图片返回的ID
$json_data['template_style_info']['bg_color'] = 'rgb(153,204,153)'; # 背景色#$json_data['template_style_info']['feature_descriptions'] = array('使用高端会员卡,0门卡享受9折优惠') ; # √ 描述#$json_data['template_style_info']['slogan'] = '会员权益享不停'; # √ 标语#$json_data['template_style_info']['slogan_img_id'] = '1BPt1AVNQnGAkntb2PFw3QAAACMAAQED'; # √ 标语图片ID#$json_data['template_style_info']['brand_name'] = '高端会员'; # √ 品牌名称$json_data['template_benefit_info'] = array( # √ 权益信息, 1、在卡包的卡详情页面会自动添加权益栏位,展现会员卡特权, 2、如果添加门店渠道,则可在门店页展现会员卡的权益
array(
'title' => '消费即折扣1', #  权益标题
'benefit_desc' => ['消费即折扣2'], #  权益描述
'start_date' => '2016-07-18 15:17:23', #  权益开始时间
'end_date' => '2017-07-18 15:17:23', #  权益结束时间
));$json_data['column_info_list'] = array(
array(
'code' => 'BENEFIT_INFO', #  code 唯一码 写死
'more_info' => array(
'title'  => '会员专享权益', #  二级页面标题√
'url'    => BASE_DOMAIN, #  超链接(选择openweb的时候必须填写url参数内容)√
'params' => '{}', #  需要URL地址回带的值,JSON格式(openweb时填)√#    'descs'  => ['会员生日打六折'] #  选择opennative的时候必须填写descs的内容√
),
'title' => '进入店铺', #  栏目标题
'operate_type' => 'openWeb', # 1、openNative:打开二级页面,展现 more中descs 2、openWeb:打开URL 3、staticinfo:静态信息
//                'value' => '80' , #  卡包详情页面,卡栏位右边展现的值√
));$json_data['field_rule_list'] = array(
array(
'field_name' => 'Balance',  # Balance:金额 Point:整数 Level:任意字符串 OpenDate:开卡日期 ValidDate:过期日期
'rule_name'  => 'ASSIGN_FROM_REQUEST', # 1.ASSIGN_FROM_REQUEST: 以rule_value为key值,表示该栏位的值从会员卡开卡接口中获取,会员卡开卡接口的card_info中获取对应参数值# 2、DATE_IN_FUTURE: 生成一个未来的日期(格式YYYY-MM-DD),当选择DATE_IN_FUTURE的时候,field_name 必须是OpenDate或ValidDate, 值为(10m或10d 分别表示10个月或10天)# 3、CONST: 常量,会员卡开卡接口进行开卡的时候使用模板创建时候设置的值,即取rule_value的值
'rule_value' => 'Balance'  # 根据rule_name,采取相应取值策略# 3.CONST:直接取rule_value作为卡属性值# 3.DATE_IN_FUTURE:10m或10d 分别表示10个月或10天# 1.ASSIGN_FROM_REQUEST:在开卡Reuqest请求中按rule_value取值,现在和field_name对应的为(OpenDate、ValidDate、Level、Point、Balance)
),
/*  array('field_name' => 'Point','rule_name'  => 'ASSIGN_FROM_REQUEST','rule_value' => 'Point'),array('field_name' => 'Level','rule_name'  => 'CONST','rule_value' => '1'),array('field_name' => 'OpenDate','rule_name'  => 'DATE_IN_FUTURE','rule_value' => '0d'),array('field_name' => 'ValidDate','rule_name'  => 'DATE_IN_FUTURE','rule_value' => '12m')*/
);
//        $json_data['open_card_conf'] = array( # √
//            'open_card_source_type' => 'ISV', #ISV:外部系统 MER:直连商户
//            'source_app_id' => '2016101702200000',  # 渠道APPID,提供领卡页面的服务提供方
//            'open_card_url' => BASE_DOMAIN, # 开卡连接,必须http、https开头
//            #'conf' => '' ,  # √ 配置,预留字段,暂时不用
//        );//        $json_data['service_label_list'] = ['HUABEI_FUWU'] ; # √ 服务Code HUABEI_FUWU:花呗服务(只有需要花呗服务时,才需要加入该标识)
//        $json_data['shop_ids'] = []; # √ 会员卡上架门店id(支付宝门店id),既发放会员卡的商家门店id//        $json_data['pub_channels'] = array( # √ 卡模板投放渠道
//            array(
//                'pub_channel' => 'SHOP_DETAIL' , # 1、SHOP_DETAIL:店铺详情页 2、PAYMENT_RESULT: 支付成功页(支付成功页暂不支持)
//                'ext_info'    => '{}'   # 扩展信息,无需配置 "key":"value"
//            )
//        );#card_level_conf 这个参数 有问题 请勿添加
//        $json_data['card_level_conf'] = array( # √ 卡级别配置
//            array(
//                'level' => 'VIP3', # 会员级别 该级别和开卡接口中的levle要一致
//                'level_show_name' => '黄金会员', # 会员级别显示名称
//                'level_icon' => 'aPQKWaYXQZimxEFz09nTBQAAACMAAQED',# 会员级别对应icon, 通过接口(alipay.offline.material.image.upload)上传图片
//                'level_desc' => '黄金会员享受免费停车,加油85折', # 会员级别描述
//            ),
//            array('level' => 'VIP2','level_show_name' => '银牌会员','level_icon' => 'rIBh_U4IRfmJtP97b-M5QQAAACMAAQED','level_desc' => '银牌会员享受免费停车,加油9折',
//                 ),
//            array( 'level' => 'VIP1','level_show_name' => '铁牌会员','level_icon' => 'U1GnhAh8QNGJxkBcBADyQAAAACMAAQED','level_desc' => '铁牌会员享受免费停车,加油9折',
//                 )
//        );
return $json_data;

2. 创建会员卡模板

这里有一个已经成功的 json 模板例子,可以尝试一下 ,可能有些人用不了,不知道原因,不过我这里成功了

PHP在转json的过程中 可以将中文字符不转义,注意支付宝的 文档中

#会员卡 模板创建
public function  addMarketCardTemplete(){
$this->AopClient->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$this->AopClient->apiVersion = '1.0';
$request = new AlipayMarketingCardTemplateCreateRequest();
$post_data = $this->addMarketCardJson();
$post_data = json_encode($post_data,JSON_UNESCAPED_UNICODE);/*      正常请求成功数据 请更改 request_id 值 再请求  $post_data = '{"request_id": "124678911122","card_type": "OUT_MEMBER_CARD","biz_no_prefix": "prex","biz_no_suffix_len": "8","write_off_type": "qrcode","template_style_info": {"card_show_name": "高端会员卡","logo_id": "tLuK85s3SnKSiagmulHBUwAAACMAAQQD","color": "rgb(55,112,179)","background_id": "tLuK85s3SnKSiagmulHBUwAAACMAAQQD","bg_color": "rgb(55,112,179)"},"field_rule_list": [{"field_name": "Balance","rule_name": "ASSIGN_FROM_REQUEST","rule_value": "Balance"}],"column_info_list": [{"code": "BENEFIT_INFO","more_info": {"title": "会员专享权益","url": "http://www.baidu.com","params": "{}"},"title": "会员专享","operate_type": "openWeb"}],"template_benefit_info": [{"title": "消费即折扣","benefit_desc": ["消费即折扣"],"start_date": "2016-07-18 15:17:23","end_date": "2017-07-34 12:12:12"}]
}';*/
$request->setBizContent($post_data);
$result = $this->AopClient->execute($request);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}}

创建成功返回结果

{"alipay_marketing_card_template_create_response":{"code":"10000","msg":"Success","template_id":"20161207000000000099121000300xxx"},"sign":"DsXWiJsQOPhWC77Tls4d4UicLE0on5o60y5o2S4uRKaP4Br8ojPT4FY+bdj5MN5k/J5OS2ypnDdBvHOyo3U5Z/tpmdWpxRgphiE7OLO+8PXOCYOU9Jh+OThk/KQYJqPbC/o5FSRRDeZ7PUBbwLVnZHolQMxP/emi5JFyMEYDIA8="}

3. 会员卡更新模板

#会员卡 模板更新
public function  updateMarketCardTemplete(){
$this->AopClient->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$this->AopClient->apiVersion = '1.0';
$request = new AlipayMarketingCardTemplateModifyRequest();
$post_data = $this->addMarketCardJson();
$post_data['template_id'] = '2016120700000000009912100030xxxx';
$post_data['request_id'] = '124678911122';
$post_data['write_off_type'] ='barcode';
unset($post_data['card_type']);  #更新模板不需要此参数
unset($post_data['biz_no_suffix_len']);  #更新模板不需要此参数
$post_data = json_encode($post_data,JSON_UNESCAPED_UNICODE);
$request->setBizContent($post_data);
$result = $this->AopClient->execute($request);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}}

修改成功返回结果

{"alipay_marketing_card_template_modify_response":{"code":"10000","msg":"Success","template_id":"20161207000000000099121000300xxx"},"sign":"DsXWiJsQOPhWC77Tls4d4UicLE0on5o60y5o2S4uRKaP4Br8ojPT4FY+bdj5MN5k/J5OS2ypnDdBvHOyo3U5Z/tpmdWpxRgphiE7OLO+8PXOCYOU9Jh+OThk/KQYJqPbC/o5FSRRDeZ7PUBbwLVnZHolQMxP/emi5JFyMEYDIA8="}

4. 会员卡模板查询

#会员卡 模板查询
public function queryMarketCardTemplete(){
$this->AopClient->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$this->AopClient->apiVersion = '1.0';
$request = new AlipayMarketingCardTemplateQueryRequest();
$post_data['template_id'] = '201612070000000001031170003XXXX';
$post_data = json_encode($post_data,JSON_UNESCAPED_UNICODE);
$request->setBizContent($post_data);
$result = $this->AopClient->execute($request);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
echo "成功";
} else {
echo "失败";
}}# ----------------------------------------会员卡模板部分结束---------------------------------------------------------

返回结果

{"alipay_marketing_card_template_query_response":{"code":"10000","msg":"Success","biz_no_prefix":"prex","biz_no_suffix_len":"10","card_type":"OUT_MEMBER_CARD","column_info_list":[{"code":"BENEFIT_INFO","more_info":{"params":"{}","title":"会员专享权益","url":"http:\/\/testshop1.ouyun.com\/"},"operate_type":"openWeb","title":"进入店铺"}],"field_rule_list":[{"field_name":"Balance","rule_name":"ASSIGN_FROM_REQUEST","rule_value":"Balance"}],"template_benefit_info":[{"benefit_desc":["消费即折扣2"],"end_date":"2017-07-18 15:17:23","start_date":"2016-07-18 15:17:23","title":"消费即折扣1"}],"template_style_info":{"background_id":"1BPt1AVNQnGAkntb2PFw3QAAACMAAQED","bg_color":"rgb(153,204,153)","card_show_name":"高端会员卡","color":"rgb(55,112,179)","logo_id":"YS6zsqoES5iHcD4uGwrP6QAAACMAAQED"}},"sign":"onpHp4PQr6hOsbRGrbM+B5h8o1xG7Ny"}

支付宝文档 部分示例 有问题 其中 json部分参数错误

https://doc.open.alipay.com/docs/api.htm?docType=4&apiId=1192

【注意】

支付宝文档中 card_level_conf 这个示例参数 是个多维数组 json 时 需要 {[{等级1},{等级2},{等级3}]}  否则会报 “入参格式错误”,还有些可选的参数也会报此错误,尽量减少可选参数。

支付宝六(商户会员卡之模板创建)相关推荐

  1. 记录 支付宝口碑--商户会员卡 开发历程

    人生第一次写博客,肯定会有多多不足,希望在接下来的日子里自己能坚持下来,持之以恒. 简单介绍下功能需求,对接商场的CRM会员管理系统和支付宝口碑,实现通过口碑能给商场商圈开通电子会员卡,并通过支付宝消 ...

  2. 支付宝 口碑会员卡模板创建实例

    alipay.marketing.card.template.create(会员卡模板创建)https://docs.open.alipay.com/api_5/alipay.marketing.ca ...

  3. .NET版支付宝商户会员卡接入

    最近公司计划对接支付宝会员卡功能,而任务恰巧由领导安排给我这边,小弟之前也未做过支付宝接口,研究了三天,终于将支付宝会员卡API接口大体上调通了,现将其整理下,以供参考. 蚂蚁金服开发平台-商户会员卡 ...

  4. 支付宝七(商户会员卡之发放卡券)

    支付宝会员卡发放 接口实现 部分功能 1. 发放会员卡 # 会员卡 开卡public function openCard(){$this->load->helper('url');$acc ...

  5. 十六.静态页面抽取模板 2021-03-31

    十六.静态页面抽取模板 引言 模板标签之模板继承 静态模板文件:链接:https://pan.baidu.com/s/1eZKi4a5fBTmy-DwAQmr51w 提取码:8mmy django-- ...

  6. vs code vue模板创建

    摆图 其他模板创建,依照此法即可. 转载于:https://blog.51cto.com/11mihu/1926917

  7. 超图桌面版使用模板创建数据源

    新建一个文件型数据源test1; 新创建完是空的:文件数据源菜单下拉,基于模板创建数据源: 选择数据源模板,国情普查:这是一套系统预定义的模板: 创建: 根据模板创建的数据源,数据集结构会被继承过来: ...

  8. 03_Weblogic之配置简单域:启动和配置域,使用模板创建域,使用控制台

     1 域:概览 是Oracle Weblogic Server的基本管理单元 始终包含一个配置为管理服务器的Oracle WebLogic Server实例 域中可以包括一些称为受管服务器的Ora ...

  9. docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)

    文章目录 docker镜像 制作镜像的过程 基于已有镜像创建 基于本地模板创建 基于Dockerfile创建 Dockerfile操作指令 Docker的数据管理 数据卷 docker的网络通信 容器 ...

最新文章

  1. android studio转载文章
  2. 一些简单网络命令用法
  3. h5实现网页内容跟随窗口大小移动_h5页面能流行于各大社交平台必定有其原因的...
  4. [leetcode]347. Top K Frequent Elements
  5. 产品经验谈:B端产品需求的3个层次,你都了解吗?
  6. laravel CURD
  7. linux加水印乱码,linux java程序加水印及中文乱码方案(二)
  8. npm ERR! path D:\NodeWWW\webpack\node_modules\fsevents\node_modules
  9. 免费下载百度文库的几款在线工具推荐
  10. 公交车管理系统C语言
  11. 郝斌数据结构与算法自学视频教程
  12. PPM 金字塔池化模块 - PSPNet
  13. imitate wechat - 2
  14. 设计师悲剧:你一天内要完成100张海报
  15. stm32 esp8266 ota升级-自建mqtt和文件服务器全量升级
  16. 14个适合后台管理系统快速开发的前端框架
  17. 陕西美食羊肉泡馍,舌尖上的美感
  18. 灵活就业身份参加社保,怎样才能以工人身份退休?
  19. T560和为k的子数组
  20. vector介绍及使用

热门文章

  1. 弃百万年薪加入创业期阿里拿500元,他证明选择和努力同样重要
  2. 手机中毒变“肉鸡” 个人信息1元贱卖
  3. 小程序原生swiper中bindtransition监听滑动效果
  4. PHP资源,库,工具大全
  5. 苹果cmsv10仿芒果TV小说免费简约模板源码
  6. 2022年北京国家高新技术企业补贴奖励有多少及认定申报介绍,补贴30-50万
  7. 简写的最大公约数写法(不能再忘了)
  8. [USACO Nov08]玩具toys解题报告
  9. Typora常用语法和Markdown样式美化一本通
  10. oracle11gr2安装hard limit错误