微信小程序会员卡开发(开发效果示例图+详细介绍+接口说明)

说实话呢,这次微信会员卡的开发文档是真的乱,四分五裂,我也是东凑西拿的才完成会员卡的开发,把开发经验和踩坑给大家说一下,希望对大家有所帮助

开发出来是这个效果如下图:

在这里插入图片描述
在这里插入图片描述
JAVA微信会员卡接口踩坑详细

直接上我写的接口吧;

  • /createCard 会员卡开卡接口,创建模板也是在这个接口;
  • /getopenid 获取微信用户传过来的code,通过code获取用户的唯一标识符openid;
  • /wxgetcode 根据这个接口传来的值去匹配数据库数据返回给微信小程序数据;
  • /getparam 这个接口是获取encrypt_card_id, outer_str, biz 三个参数(没有用到换方法了,用的是 wx.add方法,没有用navigateToMiniProgram这个,快废弃掉了);
  • /signature 获取签名(根据时间戳timestamp,随机串nonce_str,模板card_id,生成签名要和微信文档签名一致);
    签名校验地址:http://www.bejson.com/tools/weixinmpcardsign/
  • /delcard1 删除会员卡(根据创建的模板card_id删除);
  • /selectcardid 查询会员卡是否已领取过进行判断防止用户重复领卡;
  • /sendcardid 用户领取完会员卡保存模板card_id,为查询会员卡做提供;
  • updatedh 修改用户手机号(根据自己的业务可有可无);

这些接口差不多就可以完成会员卡开发流程,从开卡——到发卡——到卡包中
下面就上业务代码吧

  • controller
package com.example.demo;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.entities.CheckUtil;
import com.example.demo.entities.NDShenPi;
import com.example.demo.entities.wxuser;
import com.example.demo.service.sfrz;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.ParseException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;

import static com.example.demo.shenfenrz.decode;

/**
 * @author : 宋银义
 * @date : 2020-06-11 17:27
 **/
@Controller
public class wxcard {
   

    @Autowired
    private sfrz sfrz;

    /**公众号APPID*/
    public static  final String APPID = "xxx";
    /**小程序APPID*/
    public static  final String APPID1 = "wx9472bxxx";
    /**公众号AppSecret*/
    public static  final String AppSecret = "d9977bee1dxxx";
    /**小程序AppSecret*/
    public static  final String AppSecret1 = "4d62c2ce155a929adc70xxx";

    @GetMapping("/updatedh")
    @ResponseBody
    public  HashMap<String, String> updatedh(String sfzh ,String xm,String shouji){
   
        sfzh = new String(decode(sfzh));
        shouji = new String(decode(shouji));
        System.err.println("shouji:=="+shouji);
        HashMap<String, String> map = new HashMap<>();
        int i = sfrz.updatedh(sfzh,xm,shouji);
        System.err.println("I:=="+i);
        if (i>0){
   
            map.put("success","true");
            map.put("msg","修改成功");
        }else {
   
            map.put("success","false");
            map.put("msg","修改失败");
        }
        return map;
    }

    @GetMapping("/sendcardid")
    @ResponseBody
    public HashMap<String, String> cardout(String openid,String sfzh ,String xm,String cardid){
   
        sfzh = new String(decode(sfzh));
        openid = new String(decode(openid));
        cardid = new String(decode(cardid));
        int i=sfrz.savecardid(openid,sfzh,xm,cardid);
        HashMap<String, String> map = new HashMap<>();
        if (i>0){
   
             map.put("success","true");
             map.put("msg","插入成功");
        }else {
   
            map.put("msg","插入失败");
        }
        return map;
    }

    @GetMapping("/selectcardid")
    @ResponseBody
    public HashMap<String, String> selectcardid(String openid,String sfzh ,String xm){
   
        sfzh = new String(decode(sfzh));
        openid = new String(decode(openid));
        List<wxuser> list =sfrz.selectcardid(openid,sfzh,xm);
        System.err.println("cardid"+list.get(0).getOpencardid());
        HashMap<String, String> map = new HashMap<>();
        if (list.size()!=0){
   
            String opencardid = list.get(0).getOpencardid();
            if (opencardid!=null &&opencardid!=""){
   
                map.put("success","true");
                map.put("msg","卡已领取");
            }else {
   
                map.put("success","false");
                map.put("msg","可以领卡");
            }
        }else {
   
            map.put("success","false");
            map.put("msg","可以领卡");
        }
        return map;
    }



    @GetMapping("/delcard1")
    @ResponseBody
    public String delcard(String card_id){
   
        String accessToken = getAccessToken();
        String body="{\n" +
                "   \"card_id\": \""+card_id+"\"\n" +
                "}";
        JSONObject jsonObject = JSONObject.parseObject(body);
        String url ="https://api.weixin.qq.com/card/delete?access_token="+accessToken;
        String post = post(jsonObject, url);
        return post;
    }


    @GetMapping("/getopenid")
    @ResponseBody
    public HashMap<String, String> getopenid(String code){
   
        code = new String(decode(code));
        String openid = getOpenid(code);
        JSONObject jsonObject = JSONObject.parseObject(openid);
        String openid1 = jsonObject.getString("openid");
        System.err.println("openid1:=="+openid1);
        int i = sfrz.getapp_id1(openid1);
        System.err.println("i:=="+i);
        HashMap<String, String> map = new HashMap<>();
        if (i==0){
   
            map.put("success","2");
            map.put("openid",openid1);
        }else if(i>0){
   
            map.put("success","1");
            List<wxuser> list = sfrz.selectopenid(openid1);
            if (list.size()!=0){
   
                System.err.println("getName"+list.get(0).getName());
                NDShenPi ndShenPi = sfrz.getselect(list.get(0).getSfzh(),list.get(0).getName());
                if (ndShenPi != null) {
   
                    map.put("id", String.valueOf(ndShenPi.getId()));
                    map.put("BillNo", ndShenPi.getBillNo());
                    map.put("OID", String.valueOf(ndShenPi.getOID()));
                    map.put("ShiXiangMingCheng", ndShenPi.getShiXiangMingCheng());
                    map.put("ShiXiangLeiXing", ndShenPi.getShiXiangLeiXing());
                    map.put("ShouLiShiXian", ndShenPi.getShouLiShiXian());
                    map.put("ShiXiangBianMa", ndShenPi.getShiXiangBianMa());
                    map.put("ShouLiBuMen", ndShenPi.getShouLiBuMen());
                    map.put("ShouLiChuangKou", ndShenPi.getShouLiChuangKou());
                    map.put("ShouLiShiJian", ndShenPi.getShouLiShiJian());
                    map.put("ShenQingRen", ndShenPi.getShenQingRen());
                    map.put("ShenQingRenEN", ndShenPi.getShenQingRenEN());
                    map.put("ZhengJianType", ndShenPi.getZhengJianType());
                    map.put("ZhengJianHao", ndShenPi.getZhengJianHao());
                    map.put("Img", ndShenPi.getImg());
                    map.put("ShengRi", ndShenPi.getShengRi());
                    map.put("XingBie", ndShenPi.getXingBie());
                    map.put("MinZu", ndShenPi.getMinZu());
                    map.put("GuoJia", ndShenPi.getGuoJia());
                    map.put("HuKouSuoZaiDi", ndShenPi.getHuKouSuoZaiDi());
                    map.put("XueLi", ndShenPi.getXueLi());
                    map.put("XueLiQuanRiZhi", ndShenPi.getXueLiQuanRiZhi());
                    map.put("QuanRiZhiZhuanYe", ndShenPi.getQuanRiZhiZhuanYe());
                    map.put("HaiWai", ndShenPi.getHaiWai());
                    map.put("XueLiZaiZhi", ndShenPi.getXueLiZaiZhi());
                    map.put("ZaiZhiZhuanYe", ndShenPi.getZaiZhiZhuanYe());
                    map.put("RenCaiLeiBie", ndShenPi.getRenCaiLeiBie());
                    map.put("RenCaiChengHao", ndShenPi.getRenCaiChengHao());
                    map.put("BiYeZhengShuBH", ndShenPi.getBiYeZhengShuBH());
                    map.put("YJTime", ndShenPi.getYJTime());
                    map.put("YouXiang", ndShenPi.getYouXiang());
                    map.put("DianHua", ndShenPi.getDianHua());
                    map.put("ShouJi", ndShenPi.getShouJi());
                    map.put("YuanDanWei", ndShenPi.getYuanDanWei());
                    map.put("YuanZhiCheng", ndShenPi.getYuanZhiCheng());
                    map.put("YinJinLeiXing", ndShenPi.getYinJinLeiXing());
                    map.put("QianYueQiXian", ndShenPi.getQianYueQiXian());
                    map.put("ZhiCheng", ndShenPi.getZhiCheng());
                    map.put("DanWei", ndShenPi.getDanWei());
                    map.put("DiZhiQu", ndShenPi.getDiZhiQu());
                    map.put("DiZhi", ndShenPi.getDiZhi());
                    map.put("HangYe", ndShenPi.getHangYe());
                    map.put("XingZhi", ndShenPi.getXingZhi());
                    map.put("ShengZhi", ndShenPi.getShengZhi());
                    map.put("FaRen", ndShenPi.getFaRen());
                    map.put("LianXiRen", ndShenPi.getLianXiRen());
                    map.put("LianXiDianHua", ndShenPi.getLianXiDianHua());
                    map.put("GZShiJian", ndShenPi.getGZShiJian());
                    map.put("GZGongZuo", ndShenPi.getGZGongZuo());
                    map.put("GZZhiWu", ndShenPi.getGZZhiWu());
                    map.put("JLMingCheng", ndShenPi.getJLMingCheng());
                    map.put("JLShiJian", ndShenPi.getJLShiJian());
                    map.put("JLBuMen", ndShenPi.getJLBuMen());
                    map.put("QXingMing", ndShenPi.getQXingMing
  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值