@]女猴子真可爱

那些年微信会员卡接口踩过的坑(一)

前段时间,根据公司业务需要,完成微信会员卡的对接,因为开发周期短,微信公众平台提供的接口文档没有及时更新,可以说是踩坑踩的很愉快,笑着哭,谁让我是一只美丽的女猴子!这里做一下经验总结,希望能给小伙伴们带来一些帮助

一、所涉及官方接口地址

/**创建微信会员卡*/
    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=";

主流程

  1. 创卡(创卡时设置激活方式,公司业务中设定为一键激活)
  2. 开启支付即会员功能
  3. 设置投放方式(生成领卡二维码/货架投放卡券)
  4. 设置激活用户必填,选填字段(手机号,姓名,爱好等)
  5. 用户领卡
  6. 用户激活卡
  7. 微信官方推送领卡信息
  8. 接收信息保存领卡用户个人数据
  9. 更新会员卡会员卡面信息(积分值,等级名称等)

二、微信接口文档路径

微信公众平台微信会员卡

三、接口示例及解坑

(一)上传图片到微信官方

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字段必填
我能怎么办,我也很无奈。。。。。。。。。
还有就是小程序审核未通过的话,也是没办法跳转的啦,这个非接口原因

未完待续。。。。。