@]女猴子真可爱
那些年微信会员卡接口踩过的坑(一)
前段时间,根据公司业务需要,完成微信会员卡的对接,因为开发周期短,微信公众平台提供的接口文档没有及时更新,可以说是踩坑踩的很愉快,笑着哭,谁让我是一只美丽的女猴子!这里做一下经验总结,希望能给小伙伴们带来一些帮助
一、所涉及官方接口地址
/**创建微信会员卡*/
public static final String CREATE_WX_URL = "https://api.weixin.qq.com/card/create?access_token=";
/**上传图片到微信平台 */
public static final String UPLOAD_URL="https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=";
/**更新会员卡*/
public static final String UPDATE_MEMBERCARD_URL = "https://api.weixin.qq.com/card/update?access_token=";
/**支付即会员接口*/
public static final String PAY_IS_MEMBER_URL = "https://api.weixin.qq.com/card/paygiftcard/add?access_token=";
/**查看卡券详情接口*/
public static final String GET_DETAIL_MEMBER_CARD_URL="https://api.weixin.qq.com/card/get?access_token=";
/**创建投放二维码接口*/
public static final String CREATE_QRCODE_MEMCARD_URL = "https://api.weixin.qq.com/card/qrcode/create?access_token=" ;
/**显示二维码图片接口*/
public static final String SHOW_QRCODE_MEMCARD_URL = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=";
/**创建货架接口*/
public static final String CREATE_MEMBERCARD_SHELF="https://api.weixin.qq.com/card/landingpage/create?access_token=";
/**设置用户激活填写选项*/
public static final String SET_USER_OPEN_CARD_URL = "https://api.weixin.qq.com/card/membercard/activateuserform/set?access_token=";
/**获取前端需要展示的ticket*/
public static final String GET_APP_TICKET_URL ="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=";
/**对接微信平台微信买单接口地址*/
public static final String WX_MEM_WX_PAY_URL ="https://api.weixin.qq.com/card/paycell/set?access_token=";
/**微信平台解码Code地址*/
public static final String WX_MEM_HANDLE_CODE_URL ="https://api.weixin.qq.com/card/code/decrypt?access_token=";
/**微信平台拉取会员信息接口*/
public static final String WX_MEM_USERINFO_URL ="https://api.weixin.qq.com/card/membercard/userinfo/get?access_token=";
/**微信更新用户会员卡信息接口*/
public static final String SET_USERINFO_IN_CARD_URL="https://api.weixin.qq.com/card/membercard/updateuser?access_token=";
/**微信删除会员卡规则id接口*/
public static final String DELATE_PIM_RULE_ID_URL="https://api.weixin.qq.com/card/paygiftcard/delete?access_token=";主流程:
- 创卡(创卡时设置激活方式,公司业务中设定为一键激活)
- 开启支付即会员功能
- 设置投放方式(生成领卡二维码/货架投放卡券)
- 设置激活用户必填,选填字段(手机号,姓名,爱好等)
- 用户领卡
- 用户激活卡
- 微信官方推送领卡信息
- 接收信息保存领卡用户个人数据
- 更新会员卡会员卡面信息(积分值,等级名称等)
二、微信接口文档路径
微信公众平台微信会员卡
三、接口示例及解坑
(一)上传图片到微信官方
java代码
/**
* 上传图片到微信,获取微信方图片路径
*/
public String upLoadImgToWx(File imgFile, long companyId) throws Exception {
Map<String, Object> map = new HashMap<>();
map.put("buffer", imgFile);
String urlByAccessToken = getUrlWithAccessToken(memId, UPLOAD_URL);
log.info("upLoadPicture==========================begin");
String postResponse = HttpUtil.post(urlByAccessToken, map);
UpLoadPictureResponse resBean = JSON.parseObject(postResponse, new TypeReference<UpLoadPictureResponse>() {
});
log.info("uploadResponse======================" + resBean);
if (NumberEnum.NUMBER_ZERO.getCode().equals(resBean.getErrcode())) {
throw new Exception("上传图片失败");
}
String imgUrlInWx = resBean.getUrl();
return imgUrlInWx;
}- 微信接口所上传的图片必须先上传到微信官方,因此上传图片接口毋庸置疑排在接口首位
这里官方给的参数为buffer,图片文件直接以File传入即可,不必进行任何流的转换
(二)创建会员卡接口:
接口请求参数:
"card": {
"card_type": "MEMBER_CARD",
"member_card": {
"activate_app_brand_user_name": "gh_be22f4c06020@app",
"background_pic_url": "http://mmbiz.qpic.cn/mmbiz_jpg/CePZzW2f8M9IQe4lEEnCiawZwtpI84VlU7fgKDXhibA6C2qZUKqviacE99T2juhSTtd43GsQYdYgLyFlrSP6diaFfg/0",
"base_info": {
"brand_name": "开发",
"can_give_friend": false,
"center_app_brand_pass": "/pages/pay/pay",
"center_app_brand_user_name": "gh_be22f4c06020@app",
"center_title": "快速买单",
"code_type": "CODE_TYPE_QRCODE",
"color": "Color030",
"date_info": {
"type": "DATE_TYPE_PERMANENT"
},
"description": "这是特权说明",
"get_limit": 1,
"logo_url": "http://mmbiz.qpic.cn/mmbiz_jpg/CePZzW2f8M9IQe4lEEnCiawZwtpI84VlUJVSHvibKFmT50mznYW4oYFX68q7ibTxbn4EeibEREn9XbYYsib8FibYr9jg/0",
"notice": "请出示会员卡二维码",
"promotion_app_brand_pass": "/pages/mine/mine",
"promotion_app_brand_user_name": "gh_be22f4c06020@app",
"promotion_url_name": "会员中心",
"promotion_url_sub_title": "点击进入",
"sku": {
"quantity": 100000000
},
"title": "海贼卡"
},
"custom_cell1": {
"app_brand_pass": "/pages/index/index",
"app_brand_user_name": "gh_be22f4c06020@app",
"name": "首页",
"tips": "点击进入"
},
"custom_field1": {
"app_brand_pass": "/pages/integral/integral",
"app_brand_user_name": "gh_be22f4c06020@app",
"name": "积分",
"url": "https://www.baidu.com"
},
"custom_field2": {
"app_brand_pass": "/pages/levelIntroduce/levelIntroduce",
"app_brand_user_name": "gh_be22f4c06020@app",
"name": "等级",
"url": "https://www.baidu.com"
},
"custom_field3": {
"app_brand_pass": "/pages/coupon/coupon",
"app_brand_user_name": "gh_be22f4c06020@app",
"name": "优惠券",
"url": "https://www.baidu.com"
},
"prerogative": "这是使用须知",
"supply_balance": false,
"supply_bonus": false,
"wx_activate": true
}
}
}创卡踩坑一,官方某些非必填字段,其实变相必填:
这里的变相必填的意思是接口文档显示都是非必填字段,但其实两个非必填的字段都不填就会报错,必须 N 选一
其实官方文档在激活接口处有相应说明,但通常开发过程中,我们在写一个接口时往往很少在另一个接口文档处获取信息
官方字段如下:
字段名称 | 是否必填 | 参数解析 |
auto_activate | 否 | 设置为true时用户领取会员卡后系统自动将其激活,无需调用激活接口,详情见 自动激活 |
wx_activate | 否 | 设置为true时会员卡支持一键开卡,不允许同时传入activate_url字段,否则设置wx_activate失效。填入该字段后仍需调用接口设置开卡项方可生效,详情见 一键开卡 。 |
activate_url | 否 | 激活会员卡的url |
经多次实验(爬坑)得知:这三个所谓的非必填字段,必须三选一必填,否则创卡失败
创卡踩坑二,无法用言语形容我内心深处的%……&?(*¥#)%&
custom_field这三个横向自定义入口,业务需要点击跳转到公众号绑定的小程序,先看创卡的接口文档,这三个字段完全没提跟小程序跳转有关的东西,于是经过我多方查看文档,最终------custom_field所对应的json要想实现跳转需要添加如下两个字段
字段名称 | 参数解析 |
app_brand_pass | 跳转到小程序的页面地址如:/pages/coupon/coupon |
app_brand_user_name | 小程序原始id+“@app” |
到这里,你以为你设置的这三个入口就能跳转到小程序了吗?哈哈哈,天真
custom_field所对应的json中 url 字段必传,我这里传的是
"url": "https://www.baidu.com"别问我为啥填这个,当时脑子想出来啥就写啥了。。。。。。。,填别的行不行,行!
不填行不行。。。。。不行! 这里的url字段必填
我能怎么办,我也很无奈。。。。。。。。。
还有就是小程序审核未通过的话,也是没办法跳转的啦,这个非接口原因
未完待续。。。。。
















